第一章 序言
1、什么是代码审计:
代码审计是指源代码进行检查,寻找代码中的bug,这是一项需要多方面技能的技术,包括对编程的掌握、漏洞形成原理的理解,系统和中间件等的熟悉。
2、为什么需要代码审计:
代码审计是企业安全运营以及安全从业者必备的基础能力。
3、什么是黑盒测试和白盒测试:
黑盒测试又叫功能性测试,是指在不接触代码的情况下,测试系统功能是否有bug,是否满足设计需求。 白盒测试就是我们说的代码审计,以开放的形式从代码层面寻找bug,如果发现有bug则返回修复,直到没有bug才允许软件发布上线。
4、代码审计思路:
①通常做代码审计都是检查敏感函数的参数,然后回溯变量,判断变量是否可控并且没有经过严格的过滤,这是一个逆向追踪的过程。
②而代码审计并非这一种手段,还有可以先找出哪些文件在接收外部传入的参数,然后跟踪变量的传递过程,观察是否有变量传入到高危函数里面,或者传递的过程中是否有代码逻辑漏洞,这是一种正向追踪的方式,这样挖掘方式比逆向挖掘得更全面。
③还有一种方式是字节挖掘功能点漏洞,根据自身的经验判断该类应用通常在哪些功能中会出现漏洞,直接全篇阅读该功能代码。
5、PHP核心配置详解
①register_globals(全局变量注册开关) 该选项在设置为on的情况下,会直接吧用户GET、POST等方式提交上来的参数注册成全局变量并且初始化值为参数对应的值,使得提交参数可以直接在脚本中使用。register_globals在PHP版本小于等于4.2.3时设置为PHP_INI_ALL,中PHP5.3.0起被废弃,不推荐使用,在PHP5.4.0中移除了该选项。
②allow_url_include(是否允许包含远程文件) 在该配置为on的情况下,它可以直接包含远程文件,当存在include(
v
a
r
)
且
var)且
var)且var可控的情况下,可以直接控制$var变量来执行PHP代码。allow_url_include在PHP5.2.0后默认设置为off,配置范围是PHP_INI_ALL。与之类似的配置还有allow_url_fopen,配置是否允许打开远程文件。
③magic_quotes_gpc(魔术引号自动过滤) magic_quotes_gpc在安全方面做了很大的贡献,主要他被开启,在不存在编码或者其他特殊绕过的情况下,可以使得很多漏洞无法被使用,他也是让渗透测试人员很头疼的一个东西。当该选项设置为on时,会自动在GET、POST、COOKIE变量中的单引号、双引号、反斜杠及空字符的前面加上反斜杠,但是在PHP5中并不会过滤$_SERVER变量,导致很多类似client-ip、referer一类的漏洞能够利用。在PHP5.3之后的不推荐使用magic_quotes_gpc,PHP5.4之后取消了magic_quotes_gpc。在PHP版本小于4.2.3时,配置范围是PHP_INI_ALL;在PHP版本大于4.2.3时,是PHP_INI_PERDIR。
④magic_quotes_runtime(魔术引号自动过滤) magic_quotes_runtime也是自动在单引号、双引号、反斜杠及空字符的前面加上反斜杠。与magic_quotes_gpc的区别是处理的对象不一样,magic_quotes_runtime只对从数据库或者文件中获取的数据进行过滤,他的作用也很大,因为很多程序员只对外部输入的数据进行过滤,却没有想过从数据库获取的数据同样也会有特殊字符存在,所以攻击者的做法是先将攻击代码写入数据库,在程序读取、使用到被污染的数据后即可触发估计。同样magic_quotes_runtime在PHP5.4之后也被取消,配置范围是PHP_INI_ALL。
⑤magic_quotes_sybase(魔术引号自动过滤) magic_quotes_sybase指令用于自动过滤特殊字符,当设置为on时,他会覆盖掉magic_quotes_gpc=on的配置中,即使配置了gpc=on也是没有效果的。这指令与gpc的共同点是处理的对象一致,即都对GET、POST、Cookie进行处理。而他们之间的区别在于处理的方式不同,magic_quotes_sybase仅仅是转义了空字符和吧单引号编程了双引号。于gpc相比他的配置范围是PHP_INI_ALL,在PHP5.4.0中移除了该选项。
⑥safe_mode(安全模式) 安全模式是PHP内嵌的一种安全机制,当safe_mode=on时,联动可以配置的指令有safe_mode_includea_dir、safe_mode_exec_dir、safe_mode_allowed_env_vars、safe_mode_protected_env_vars。safe_mode指令的配置范围为PHP_INI_SYSTEM,PHP5.4之后被取消。
⑦open_basedir PHP可访问目录 open_basedir指令用来现在PHP只能访问哪些目录,通常我们只需要设置Web文件目录即可,如果需要加载外部脚本,也需要吧脚本所在目录路径加入到open_basedir指令中,多个目录以分号分割。使用open_basedir需要注意的一点是,指定的现在实际上是前缀,而不是目录名。如果要将访问仅限制在指定的目录内,请用斜线结束路径名。
⑧disable_functions(禁用函数) 当需要使用指令来禁止危险函数时,切记要把dl()函数也加到禁止列表,因为攻击者可以利用dl()函数来加载自定义的PHP拓展以突破disable_functions指令的限制。disable_functions的指令限制为php_ini_ only。
⑨display_errors和error_reporting错误显示 display_errors表明是否显示PHP脚本内部错误的选项,在调试PHP的时候,通常把PHP错误显示打开,但是在生产环境中,建议关闭PHP错误回显,即设置display_errors=off,以避免一些安全隐患。在设置display_errors=on时,还可以配置一个指令是error_reporting,这选项用来配置错误显示的级别,可使用数字也可以使用内置常量配置。这两个指令的配置范围都是PHP_INI_ALL。
第二章 审计辅助与漏洞验证工具
1、代码编辑器
①Notepad++: 开源的纯文字编辑器。 ②UltraEdit(收费): 非开源的功能强大的文本编辑器。 ③Zend Studio(收费): 是由PHP官方开发出来非开源的专门编写PHP代码的代码编辑器。
2、代码审计工具
代码审计工具是一类辅助我们做白盒测试的程序,它可以分很多类,例如安全性审计以及代码规范性审计等等。
①Seay源代码审计系统: 基于C#开发的一款针对PHP代码安全性审计的系统。 ②Fortify SCA(收费): 由惠普研发的针对源代码进行专业的白盒测试安全审计。 ③RIPS: 基于PHP开发的针对PHP代码安全审计的软件,现在以及暂停更新。
3、漏洞验证辅助
①Burp Suite(收费) 基于Java语言开发的安全测试工具,使用他需要安装Java运行环境。主要分为Proxy、Spider、Scanner、Intruder、Repeater、Sequencer、Decoder和Comparer几个大模块。 Ⅰ、Proxy(代理): 可以截取并修改从客户端到Web服务器的HTTP/HTTPS数据包。 Ⅱ、Spider(蜘蛛): 用来分析网站目录结构,爬行速度非常不错,爬行结果会显示在Target模块中,支持自定义登录表单,让他自动提交数据包进行登录验证。 Ⅲ、Scanner(扫描器): 用于发现Web程序漏洞,他能扫描出SQL注入、XSS跨站、文件包含、HTTP头注入、源码泄露等多种漏洞。 Ⅳ、Intruder(入侵): 用来进行暴力破解和模糊测试。他最强大的地方在于高度兼容的自定义测试用例,通过Proxy功能抓取的数据包可以直接发送到Intruder,设置好测试参数和字典、线程等,即可开始漏洞测试。 Ⅴ、Repeater(中继器): 用于数据修改测试,通常在测试一些像支付等逻辑漏洞的时候经常需要用到他,只需要设置好代理拦截数据报,然后发送到Repeater模块即可对数据随意修改之后再发送。 Ⅵ、Sequencer(会话): 用于统计、分析会话中随机字符串的出现概率,从而分析Session、Token等存在的安全风险。 Ⅶ、Decoder(解码): 用于对字符串进行编码和解码,支持百分号、Base64、ASCII等多种编码转换,还支持Md5、sha等Hash算法。 Ⅷ、Comparer(比较器): 用于比较两个对象之间的差异性,支持text和hex形式的对比,通常用来比较两个request或者response数据包之间不同的地方,功能类似网上常见的文本或者文件对比软件。
②浏览器拓展 Ⅰ、HackBar: 方便安全人员对漏洞进行手工测试。 Ⅱ、Firebug: 支持直接对网页HTM、CSS等元素进行编辑,其中“网络”功能可以直接嗅探Request和Response数据包。 Ⅲ、Live HTTP Headers: 主要功能是抓取浏览器Request和Response数据包,也支持对Request数据进行修改后再次请求。但是只能抓取HTTP的数据,无法抓取HTTPS数据。 Ⅳ、Modify: 仅支持添加和修改Request中的HTTP Header的字段,而且他是做全局修改,即开启Modify之后,他会把浏览器对任何网站的所有请求中对应字段进行修改。
4、编码转换及加密工具
代码审计必然需要接触到编码相关的知识,历史上很多高危漏洞是由编码问题导致的,比如在XSS漏洞中可以利用浏览器对不同编码的支持来绕过过滤触发漏洞,另外我们也经常需要用到不同的编码转码来进行模糊测试漏洞。 ①Seay代码审计系统自带的编码功能 支持Md5算法、URL、Base64、Hex、ASCII、Unicode等多种常用编码方式转换。还针对MySQL与MSSQL注入等做利用格式做针对性处理。 ②Burp Suite上有一个Decoder功能 可对字符串进行编码和解码功能,支持百分号、Base64、ASCII等多种编码转换,还支持Md2、Md5、Sha系列等Hash算法。 ③超级加解密转换工具 百度搜索“超级加解密转换工具”即可下载该工具。
5、正则调试工具
正则表达式是用自定义好的特定字符串组合,在正则解析引擎内进行字符匹配。正则表达式有非常强的灵活性,常用来验证注册用户名、密码、邮箱等格式是否正确,以及用来搜索文件内容。 ①Seay代码审计系统中自带的正则调试功能 ②灵则者正则调试
6、SQL执行监控工具
SQL执行监控可以非常高效地帮助我们发现一些SQL注入和XSS等问题,帮助我们非常方便地观察到数据在Web程序与数据库中地交互过程,在做模糊测试时,只需利用模拟测试工具爬取页面地URL及表单,提交特定地参数如带单引号等,通过分析SQL执行日志则可以非常准确地判断出SQL注入漏洞是否存在。 ①Seay代码审计系统中的插件
|