PHP代码审计(一)代码审计准备
代码审计环境搭建
使用phpstudy搭建wamp环境
PHP核心配置
几个需要了解的PHP核心配置选项
- PHP_INI_USER
该配置选项可以在用户的PHP脚本或Windows注册表中设置 - PHP_INI_PERDIR
在php.ini/.htaccess/httpd.conf中设置 - PHP_INI_SYSTEM
在php.ini/http.conf中设置 - PHP_INI_ALL
在任何地方设置 - php.ini only
在php.ini中配置
几个核心的安全变量
- 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,说明变量注册为了全局变量
可以看到开启这个配置会导致莫名的多出数据,存在安全风险。 - allow_url_include
是否允许包含执行远程文件,php5.2.0后默认设置为off,7.4.0后被废弃,配置范围是PHP_INI_ALL
代码理解:
<?php include $_GET['var'];?>
\(var由外部输入,则\)var可控,可以用来包含外部文件上传木马等
- magic_quotes_gpc
魔术引号自动过滤,自动在GET、POST、COOKIE变量中单引号(')双引号(") 反斜杠(\)空字符(NULL)的前面加上反斜杠(),但在PHP5中并不会过滤$_SERVER变量,php5.3后不建议使用,php5.4后被取消。
代码理解:
<?php echo $_GET['seay'];
- magic_quotes_runtime
魔术引号自动过滤,自动在单引号(')双引号(")反斜杠()空字符前加反斜杠(),该函数支队数据库或者文件中获取的数据进行过滤, - magic_quotes_sybase
魔术引号自动过滤,设置为ON会覆盖magic_quotes_gpc配置,这个函数会对GET、POST、Cookie进行处理,配置范围为PHP_INI_ALL,PHP5.4后取消。 - safe_mode
PHP内嵌的安全机制,php5.4前范围是PHP_INI_SYSTEM,之后被取消
这个函数用来限制了所有的文件操作函数(include(),file()),以及限制了一些函数执行命令(system(),exec())等 - open_basedir
限制PHP可以访问的目录,多个目录使用分号; 进行分隔。注意使用该函数限制的是目录的前缀,若要限制目录名则需要使用斜线结束路径名,举例:open_basedir=/www/a,则可以访问/www/ab ,如果需要限制,则/www/a/.
php版本小于5.2.3配置范围在PHP_INI_SYSTEM,大于5.2.3 是 PHP_INI_ALL - disable_functions
PHP禁用函数,可以禁用一些敏感函数的使用,配置范围为php.ini only ,使用逗号分隔函数名 - display_errors/error_reporting
PHP错误显示,表示是否显示PHP脚本的内部错误,在调试过程会打开这个选项,但是实际生产中建议关闭错误回显
审计工具
- sublime text
- seay 源代码审计系统
- RIPS(2013停止更新)
- FindBugs
- Codescan
...
漏洞验证
- Burp Suite
- HackBar
...
审计思路
-
根据敏感关键字回溯参数传递过程。
敏感函数:https://www.yuque.com/burpheart/phpaudit/php-shen-ji-ji-chu_cui-ruo-han-shu-su-cha-biao
-
查找可控变量,正向追踪变量传递过程。
-
寻找敏感功能点,通读功能点代码。
(1)文件上传/下载功能
(2)文件管理功能
(3)登录认证功能
(4)找回密码功能
-
直接通读全文代码。
(1)函数集文件
(2)配置文件
(3)安全过滤文件
(4)index文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?