PHP代码审计(一)代码审计准备

代码审计环境搭建

使用phpstudy搭建wamp环境

PHP核心配置

几个需要了解的PHP核心配置选项

  1. PHP_INI_USER
    该配置选项可以在用户的PHP脚本或Windows注册表中设置
  2. PHP_INI_PERDIR
    在php.ini/.htaccess/httpd.conf中设置
  3. PHP_INI_SYSTEM
    在php.ini/http.conf中设置
  4. PHP_INI_ALL
    在任何地方设置
  5. php.ini only
    在php.ini中配置

几个核心的安全变量

  1. register_globals
    用于将用户GET、POST等方式提交的参数注册成全局变量并初始位参数对应的值,使得提交参数可以直接在脚本中使用,php版本小于4.2.3设置为PHP_INI_ALL,5.3.0起废弃,5.4.0后移除了选项。

    php版本是5.2.0
    代码理解:
    <?php
    if(\(user=='admin') { echo 'true'; } </code> 这里看到,`\)user`没有用\(_GET和\)_POST接收,但是浏览器使用GET传参依然可以输出true,说明变量注册为了全局变量

    可以看到开启这个配置会导致莫名的多出数据,存在安全风险。
  2. allow_url_include
    是否允许包含执行远程文件,php5.2.0后默认设置为off,7.4.0后被废弃,配置范围是PHP_INI_ALL
    代码理解:
    <?php include $_GET['var'];?>
    \(var由外部输入,则\)var可控,可以用来包含外部文件上传木马等
  3. magic_quotes_gpc
    魔术引号自动过滤,自动在GET、POST、COOKIE变量中单引号(')双引号(") 反斜杠(\)空字符(NULL)的前面加上反斜杠(),但在PHP5中并不会过滤$_SERVER变量,php5.3后不建议使用,php5.4后被取消。
    代码理解:
    <?php echo $_GET['seay'];
  4. magic_quotes_runtime
    魔术引号自动过滤,自动在单引号(')双引号(")反斜杠()空字符前加反斜杠(),该函数支队数据库或者文件中获取的数据进行过滤,
  5. magic_quotes_sybase
    魔术引号自动过滤,设置为ON会覆盖magic_quotes_gpc配置,这个函数会对GET、POST、Cookie进行处理,配置范围为PHP_INI_ALL,PHP5.4后取消。
  6. safe_mode
    PHP内嵌的安全机制,php5.4前范围是PHP_INI_SYSTEM,之后被取消
    这个函数用来限制了所有的文件操作函数(include(),file()),以及限制了一些函数执行命令(system(),exec())等
  7. open_basedir
    限制PHP可以访问的目录,多个目录使用分号; 进行分隔。注意使用该函数限制的是目录的前缀,若要限制目录名则需要使用斜线结束路径名,举例:open_basedir=/www/a,则可以访问/www/ab ,如果需要限制,则/www/a/.
    php版本小于5.2.3配置范围在PHP_INI_SYSTEM,大于5.2.3 是 PHP_INI_ALL
  8. disable_functions
    PHP禁用函数,可以禁用一些敏感函数的使用,配置范围为php.ini only ,使用逗号分隔函数名
  9. display_errors/error_reporting
    PHP错误显示,表示是否显示PHP脚本的内部错误,在调试过程会打开这个选项,但是实际生产中建议关闭错误回显

审计工具

  1. sublime text
  2. seay 源代码审计系统
  3. RIPS(2013停止更新)
  4. FindBugs
  5. Codescan
    ...

漏洞验证

  1. Burp Suite
  2. HackBar
    ...

审计思路

  1. 根据敏感关键字回溯参数传递过程。
    敏感函数:https://www.yuque.com/burpheart/phpaudit/php-shen-ji-ji-chu_cui-ruo-han-shu-su-cha-biao

  2. 查找可控变量,正向追踪变量传递过程。

  3. 寻找敏感功能点,通读功能点代码。
    (1)文件上传/下载功能
    (2)文件管理功能
    (3)登录认证功能
    (4)找回密码功能

  4. 直接通读全文代码。
    (1)函数集文件
    (2)配置文件
    (3)安全过滤文件
    (4)index文件

posted @   crayon's  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示