代码审计是安全从业人员必须要会的一项技能。这项技能的功底肯定是对一门语言的熟悉程度,此篇博客我就试着总结一下php的代码审计技巧
php核心配置
register_globals:此选项设置为on时,php会直接将get,post的参数注册成全局变量并初始化为参数的值。在php5.4.0后移除了此配置
allow_url_include:在此配置为on时,php能够包含远程文件,在php5.2.0之后被默认设置成off
magic_quotes_gpc:魔术引号过滤他会在单引号,双引号,反斜杠,空字符前加反斜杠,在php5中此配置不会过滤$_SERVER变量,并在php5.4之后被取消
safe_mode:此项为on时。1.所有文件操作函数都会受到限制,会存在用户为划分的文件权限限制,a用户不能操作b用户的文件。2.函数执行命令会报错。safe_mode_exec_dir可以规定某个文件夹不受限制。
open_basedir:这项配置确定了哪些文件夹可以被访问,注意此项配置是限制前缀,多目录以分隔开。
disable_function:禁用敏感函数,在某些情况可以通过dl()函数绕过。
short_open_tag:此项为on时,php代码允许短标签<??>。
asp_tags:此项为on时可用asp标签<%%>。
代码审计思路
敏感函数回溯参数:寻找敏感的函数的参数,逐渐回溯这个参数,看能否使此参数可控,
全文代码通读:直接对代码的大致架构和行为流程进行审计,其中应该重点看1.函数集文件。2.配置文件。3.过滤函数文件。4.入口文件
功能定向审计:对某一项功能进行定向的审计,如文件上传,sql注入,登录验证等等进行定向审计。
php代码审计技巧
- GPC不会保护$_SERVER和$_FILES
- 代码中的编码转换中通常存在漏洞,如宽字节注入
- fuzz异常来获取信息
- %00字符串截断,php5.3之后被修复
- 善用php的伪协议
- 正则表达式
- windows FindFirstFile利用(类似于)
- php动态语言特征