Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >初识代码审计

初识代码审计

作者头像
公众号爱国小白帽
发布于 2021-04-25 06:16:44
发布于 2021-04-25 06:16:44
3.6K0
举报

代码审计(Code Audit)是指安全代码评估者尽可能的通过阅读应用系统的源代码来发现潜在的安全漏洞及隐患的技术手段。 代码审计的技术手段,可以弥补黑盒渗透测试的未能完全覆盖的漏洞环节与安全隐患,是一种可靠性、安全性最高的修补漏洞的方法。 可以通过对常见的编程语言如ASP、ASP.NET、PHP、JAVA、C++等语言进行源代码审计,查找出代码中存在的安全问题。

PHP代码审计准备

代码审计环境准备

  • 搭建php环境:
  • php作为一门脚本语言,要运行它必须需要一个php的运行环境。PHP作为最流行的Web编程语言,大部分中间件都会有对php的支持。这里为了方便我们进行代码审计,减少不必要的配置时间,我们选择phpstudy。phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer。 理由:
  • phpstudy支持php不同版本之间的切换,这对代码审计尤为重要。(独特) phpstudy一键集成安装,不需要复杂的环境配置。 phpstudy默认支持多款中间件,方便我们在不同中间件下进行审计。
  • 浏览器:
  • 代码审计过程中,我们经常需要测试代码在浏览器返回的结果。安装多款性能强大的浏览器可以对我们代码审计起到很大的帮助。 Mozilla Firefox:开源,多插件,强引擎,多系统。 Chrome:稳定,快速,开发者调试工具。
  • 编辑器:
  • 俗话说的好,工欲善其事,必先利其器。成功的代码审计自然离不开编辑器的帮助,一款适合自己的编辑器可以让我们阅读代码的速度事半功倍。 例如:

编辑器可以给我们提供以下必不可少的优点。 语法高亮 语法折叠 代码补全 函数断点 批量注释 函数跳转 变量追踪

  • 程序源码
  • 就好比再好的厨师也不能不用材料做饭,代码审计的前提也是获得审计目标的源代码。因此在审计前,我们需要从想办法获得源码。 •获得源码 大多数PHP程序都是开源的、找到官网下载最新的源码包就好了。 •安装网站 在本地搭建网站,一边审计一边调试。实时跟踪各种动态变化。

代码审计工具使用

seay代码审计工具

  1. 一键化自动白盒审计: 提供了自动审计功能,虽然不够精确,但是却能帮助我们迅速找出敏感函数与敏感参数。同时根据情形,简单的分析出可能出现的漏洞,为我们提供思路上的额帮助。 可以看到,将我们的网站目录选入,开始扫描后。扫描出了 敏感函数extract,同时其中含有变量,这将可能导致变量覆盖漏洞。 但是功能并不是十全十美的,他只是利用正则对网站整体进行了扫描,所以有没有漏洞必须要我们人工判别。
  1. 代码调试:
  1. 正则编码:正则编码可以帮助我们判别正则表达式。同时可以写出字符串。利用正则进行匹配。
  2. 自定义插件与规则。
  3. 自定义审计规则。
  4. 数据库执行监控。

代码审计流程与方法

  • 代码审计过程中应该先对大局有所把握,了解要审计的整个网站大概框架是什么,工作流程是什么等。把握大局可以有以下几点:
  • 网站结构:浏览源码文件夹,了解该程序的大致目录 入口文件:index.php、admin.php文件一般是整个程序的入口,详细读一下index文件可以知道程序的架构、运行流程、包含那些配置文件,包含哪些过滤文件以及包含那些安全过滤文件,了解程序的业务逻辑。 配置文件:一般类似config.php等文件,保存一些数据库相关信息、程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。 过滤功能:通过详读 公共函数文件 和 安全过滤文件 等文件,清晰掌握用户输入的数据,哪些被过滤,哪些无过滤,在哪里被过滤了,如何过滤的,能否绕过过滤的数据。过滤的方式是替换还是正则?有没有GPC?有没有使用addslasher()处理?
  • 了解网站目录结构,重要文件目录作用
  • 几种常见审计方法:
  • 通读全文法通读全文发作为一种最麻烦的方法也是最全面的审计方法。特别是针对大型程序,源码成千上万行,这要读到什么时候。但是该方法也是一种必要的方法。了解整个应用的业务逻辑,才能挖掘到更多更有价值的漏洞。这种方法一般是企业对自身产品的审计,当然,对于小型应用,未尝不可以读一读。前面的把把握大局也包含在通读全文法里面,也是通读全文的第一步。当然通读全文也不是傻乎乎的顺着目录一个一个代码全部读一遍,而是根据网站的目录文件,对每个功能点进行完全的代码通读,这样才可以更好的理解整个Web程序,完成审计。例如:首先看程序的大体代码结构,比如主目录存在哪些文件,模块目录存在哪些文件。除了关注有哪些文件,我们还要注意文件的大小,创建时间。我们根据这些文件的命名就可以大致了解程序具体功能,寻找核心文件。在看程序目录结构的时候,我们要特别注意几个文件,分别如下:函数集文件,通常命名中包含functions或者common等关键字,这些文件里面是一些公共的函数,提供给其他文件统一调用,所以大多数文件都会在文件头部包含到它们,寻找这些文件一个非常好用的技巧就是去打开index.php或者一些功能性文件,在头部一般都能找到。配置文件,通常命名里面包括config这个关键字,配置文件包括Web程序运行必须的功能性配置选项以及数据库等配置信息,从这个文件里面可以了解程序的小部分功能,另外看这个文件的时候注意观察配置文件中参数值是用单引号还是用的双引号包起来,如果是双引号,则很大可能会存在代码执行漏洞,例如下面kuwebs的代码,只要我们在修改配置的时候利用PHP可变变量的特性即可执行代码。kuWebsiteSupportEn= “1”; 安全过滤文件,安全过滤文件对我们做代码审计至关重要,关系到我们挖掘到的可疑点能不能利用,通常命名中有filter、safe、check、clean、dirty、waf等关键字,这类文件主要是对参数进行过滤,比较常见的是针对SQL注入和XSS过滤,还有文件路径、执行的系统命令的参数,其他的则相对少见。而目前大多数应用都会在程序的入口循环对所有参数使用addslashes()函数进行过滤。index文件,index是一个程序的入口文件,所以通常我们只要读一遍index文件就可以大致的了解整个程序的架构,运行的流程,包含到的文件,其中核心的文件又有哪些,而不同目录的index文件也有不同的实现方式,建议最好是先把几个核心目录的index文件都简单读一遍。敏感函数参数回溯法敏感函数参数回溯法就是根据敏感函数,逆向追踪参数传递的过程。这个方法是最高效,最常用的方法。大多数漏洞的产生是因为函数的使用不当导致的。我们只要找到这样的一些使用不当的函数,就可以快速挖掘想要的漏洞。这方面,Seay法师大大有一款神器 Seay源代码审计系统,主要是利用正则匹配一些高危函数、关键函数以及敏感关键字。然后,我们就可以分析判断敏感函数的上下文,追踪参数源头。尝试控制可控的参数变量。例如:首先可以利用抓包软件,观察我们GET或者POST的参数名称,在php代码中进行参数名的回溯追踪。发现了php接受参数的函数,观察函数对参数的处理流程,直到最后一步完成,完成追踪。通常在提交请求前的变量,都是攻击者可控都是不安全的,因此我们观察是否对参数进行完整的处理。我们也可以使用一些软件自带的变量追踪,方便我们调试,可以看到具体变量传递到函数,以及函数处理完之后的变化。定向功能分析法定向功能分析法主要是根据程序的业务逻辑来说审计的。首先是用浏览器逐个访问浏览,看看这套程序有那些功能。根据相关功能,大概推测可能存在那些漏洞。找到具体的功能模块,主要审计此模块。
  • 常见功能漏洞:(包括但不限于)
  • 程序初始安装 如,有些安装程序可能存在重装漏洞,网站数据库被重置。 站点信息泄漏 如:某些关键目录信息,如adnmin登陆界面,数据库管理界面,网站源码等。 文件上传漏洞 如:文件上传全套每部存在问题。 文件管理 如:服务器文件可以被远程读取,写入。 登陆认证 如:暴力破解,没有多重认证系统。 数据库备份恢复 如:利用数据库备份拿shell。 越权(横向越权,纵向越权) 如:越权执行敏感操作,如修改其他用户信息。 投票,积分,抽奖活动 如:单用户多次抽奖。 任意密码重置 如:充值他人密码。 验证码绕过 如:验证码过于简单,可以被绕过等。
  • 审计总结
  • 审计过程中,我们不要局限于固定的方法,适当的天马行空,找到适合自己的审计思路。 同时审计时,经常需要结合多种方法,不要局限于定性知识。

原创不易,转载请注明来源【爱国小白帽】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱国小白帽 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
代码审计
代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。 C和C ++源代码是最常见的审计代码,因为许多高级语言(如Python)具有较少的潜在易受攻击的功能。
宸寰客
2020/10/10
2.9K0
实战技巧 | 知其代码方可审计
终于来到了代码审计篇章。希望看了朋友有所收获,我们通常把代码审计分为黑盒和白盒,我们一般结合起来用。
辞令
2020/09/17
1.7K0
实战技巧 | 知其代码方可审计
网络安全自学篇-PHP代码审计(一)
相较与黑盒测试而言,代码审计(白盒测试)可以帮助我们更能了解web应用的框架和结构方便我们挖掘出黑盒测试中难以发觉的一些漏洞,总而言之就是对代码进行审计,并发现代码的vulnerability。
字节脉搏实验室
2020/07/01
1.3K0
代码审计 | 利用思维导图快速读懂框架和理清思路
html/javascript/dom元素使用,主要是为了挖掘xss漏洞,jquery 主要写一些涉及到CSRF脚本使用的或者DOM型XSS,JSON劫持等
HACK学习
2020/02/26
1.9K0
小白的代码审计初始之路
代码审计是在一个编程中对源代码旨在发现错误、安全漏洞或违反编程约定的项目。 说人话就是找它这些代码中可能存在问题的地方,然后看它是否真的存在漏洞。(博主小白,可能存在问题,请见谅)
用户9691112
2023/05/18
7020
小白的代码审计初始之路
代码审计(二)——SQL注入代码
当访问动态网页时,以MVC框架为例,浏览器提交查询到控制器(①),如是动态请求,控制器将对应sql查询送到对应模型(②),由模型和数据库交互得到查询结果返回给控制器(③),最后返回给浏览器(④)。
黑伞安全
2022/01/26
7K0
代码审计(二)——SQL注入代码
PHP代码审计要点
随着代码安全的普及,越来越多的开发人员知道了如何防御sqli、xss等与语言无关的漏洞,但是对于和开发语言本身相关的一些漏洞和缺陷却知之甚少,于是这些点也就是我们在Code audit的时候的重点关注点。本文旨在总结一些在PHP代码中经常造成问题的点,也是我们在审计的时候的关注重点。(PS:本文也只是简单的列出问题,至于造成问题的底层原因未做详细解释,有兴趣的看官可以自行GOOGLE或者看看底层C代码。知其然,且知其所以然)
HACK学习
2021/04/09
1.5K0
代码审计:BlueCMS v1.6
下载链接:https://jwt1399.lanzoui.com/inPwSde6c5a
小简
2023/01/04
2.9K0
代码审计:BlueCMS v1.6
PHP无框架代码审计
开始审计前,先看一下目录结构,判断是否使用框架开发,常见的框架如Thinkphp、Laravel、Yii等都有比较明显的特征
亿人安全
2024/01/23
2660
PHP无框架代码审计
通过代码审计找出网站中的XSS漏洞实战(三)
笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198
汤青松
2018/10/09
6160
通过代码审计找出网站中的XSS漏洞实战(三)
代码审计:命令注入学习
0x01 起因及想法 起因:好久没更新博客了,我在乌云社区看到一篇代码审计的整体学习思想如下: 学习代码审计目标:能独立完成对一个CMS代码安全的监测 思路: A、通读全文代码,从功能函数代码开始阅读,例如include文件夹下的comm_fun.php,或者类似关键字的文件。 B、看配置文件,带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。 C、跟读首页文件,了解程序运行时调用那些函数和文件,以首页为基线,一层层去扩展阅读所包含
Angel_Kitty
2018/04/09
1.5K0
代码审计:命令注入学习
代码审计之任意文件下载漏洞案例分享
继上次审计HDWiki之后,最近拿到一套新的源码Ear_Music_20180510_UTF8最新版进行审计,发现这套cms还是比较安全的,而当我审计遇到一处下载点的时候发现存在安全问题,也就是任意文件下载漏洞,任意文件下载漏洞php最常见的函数就是readfile()这个函数,当里面的参数我们可以控制的话就会存在任意文件下载风险。
FB客服
2018/07/30
1.1K0
代码审计之任意文件下载漏洞案例分享
海洋 CMS 代码审计过程分析
最近在学代码审计,但总是学了忘,所以把思路步骤全写下来,便于后期整理。这次审计的是 seacmsV10.1,但是审完返现 V11 也有同样的漏洞。先放 payload:
信安之路
2020/09/28
2K0
海洋 CMS 代码审计过程分析
网站渗透测试 白盒代码审计要素
网站白盒渗透测试中要测试的内容非常多,总算赶到了代码审计这一点。期待看过的朋友有一定的感悟,大伙儿通常把代码审计分成黑盒和白盒,大伙儿通常相结合在一起用。平常大家在白盒审计上有多种多样方式,比如一些常见的危险代码函数或执行函数,以及上传漏洞绕过,命令执行反序列化等这些漏洞,总体来讲我们可以梳理为:1.细读全篇 2.追踪.
技术分享达人
2020/09/07
8610
网站渗透测试 白盒代码审计要素
代码审计从0到1 —— Centreon One-click To RCE
代码审计的思路往往是多种多样的,可以通过历史漏洞获取思路、黑盒审计快速确定可疑点,本文则侧重于白盒审计思路,对Centreon V20.04[1]的审计过程进行一次复盘记录,文中提及的漏洞均已提交官方并修复。
Seebug漏洞平台
2020/09/01
8390
代码审计与渗透测试
代码审计对于小白来说可能比较陌生,但实际上也就是拿到某网站的源码进行审计,从而发现漏 洞。但是在审计的过程中不可能一行一行的去看,不仅浪费时间,看的久了也可能有些遗漏点,所以使用工具进行协助,就会快很多,比如“Seay源代码审计系统2.1”就很方便,可以查找定位代码,但误报很高。
字节脉搏实验室
2020/09/16
1.5K0
代码审计与渗透测试
代码审计入门总结
0x00 简介 ---- 之前看了seay写的PHP代码审计的书,全部浏览了一遍,作为一个代码审计小白,希望向一些和我一样的小白的人提供一下我的收获,以及一个整体的框架和常见漏洞函数。这也算是这本书的一个学习笔记吧,可以结合我捋顺的思路来看这本书。: ) 0x01 整体 ---- 学习代码审计的目标是能够独立完成对一个CMS的代码安全监测。其通用的思路有: 通读全文代码,从功能函数代码开始阅读,例如include文件夹下的common_fun.php,或者有类似关键字的文件。 看配置文件,带有config关
用户1467662
2018/03/30
1.5K0
代码审计入门总结
代码审计之YXCMS
本次教程来自YanXia,转载请注明作者信息,博客地址http://www.535yx.cn,感谢
YanXia
2023/04/07
1.4K0
代码审计之YXCMS
PHP代码审计实战思路浅析
对于面向过程写法的程序来说,最快的审计方法可能时直接丢seay审计系统里,但对于基于mvc模式的程序来说,你直接丢seay审计系统的话,那不是给自己找麻烦吗?
FB客服
2018/12/05
7160
弱鸡的代码审计之旅
作为一只审计菜鸡,在前台没发现什么大漏洞,只在后台找到两个,不过代码审计过程还是很香的。接下来就掰扯一下菜鸡的审计过程。另外分享的两个漏洞已经通报给 CNVD。
信安之路
2020/04/20
8720
相关推荐
代码审计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档