php代码审计

发布于 2022-04-04  203 次阅读


代码审计是安全从业人员必须要会的一项技能。这项技能的功底肯定是对一门语言的熟悉程度,此篇博客我就试着总结一下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标签<%%>。

来自《企业级web代码安全审计架构》

代码审计思路

敏感函数回溯参数:寻找敏感的函数的参数,逐渐回溯这个参数,看能否使此参数可控,

全文代码通读:直接对代码的大致架构和行为流程进行审计,其中应该重点看1.函数集文件。2.配置文件。3.过滤函数文件。4.入口文件

功能定向审计:对某一项功能进行定向的审计,如文件上传,sql注入,登录验证等等进行定向审计。

php代码审计技巧

  • GPC不会保护$_SERVER和$_FILES
  • 代码中的编码转换中通常存在漏洞,如宽字节注入
  • fuzz异常来获取信息
  • %00字符串截断,php5.3之后被修复
  • 善用php的伪协议
  • 正则表达式
  • windows FindFirstFile利用(类似于)
  • php动态语言特征