PHP代码审计
优采云 发布时间: 2022-06-07 16:32PHP代码审计
代码审计顾名思义就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。
PHP代码审计
审计套路
审计方法
常见漏洞安装问题包含漏洞
2.见
3.远程文件包含
找回密码上传漏洞
6.验证方法
7.绕过
文件操作
任意文件删除,任意文件复制,任意文件重命名,任意文件移动,任意文件下载
首先尝试拿到配置文件中的数据库连接账号和密码,然后外链
拿到配置文件,拿到加密解密函数的 key,生成加密字符串,结合具体的代码利用
2.文件复制
3.文件下载
下载配置文件,拿到 key
参考漏洞:qibocmsV7 整站系统任意文件下载导致无限制注入多处 wooyun-2014-066459.html
4.文件写入
5.文件包含
加密函数
拿到加密函数的 key, 加密一些特殊字符然后拿到加密的字符串
XSSCSRFSSRF撸库命令注入登录认证XXE越权注入
把用户可控的一些变量,带入到了数据库的各种操作中,并且没有做好过滤,例如:在注册用户的时候检测用户名是否存在,SQL 语句是拼接 SQL
3.insert注入
把要输出的数据插入到这个 column 里面去
4.delete注入
通过盲注的方式列出数据
5.数字型注入
变量并没有用单引号括住,不需要用单引号区分数据与 SQL 命令,这样就会让一般的GPC等机制无用,因为不包括特殊字符强制类型转换 intval
6.字符型、搜索型
7.Magic_quotes_gpc
8.宽字节注入
9.解码导致
10.变量覆盖
变量覆盖有 extract、parse_str、$$
11.Replace
12.server 注入
-只对 GET POST COOKIE 进行 addslashes,没有对 SERVER 进行转义,一些 server 的变量,用户可控并写入数据库
QUERY_STRING , X_FORWARDED_FOR , CLIENT_IP , HTTP_HOST , ACCEPT_LANGUAGE
最常见的当然也就是 X_FORWARDED_FOR,一般是在 IP 函数中用户,没有验证 ip 是否合法,直接 return。
参考漏洞:Phpyun 注入漏洞二 wooyun-2014-068853.html
13.file 注入
14.未初始化造成的注入
php < 4.20 时,register_globals 默认都是 on, 逐渐 register_globals 默认都是 off
伪全局机制,遗漏了初始化
参考漏洞:qibocms 地方门户系统注入一个问题 wooyun-2014-080867.html
参考漏洞:qibocms 地方门户系统注入 wooyun-2014-080870.html
参考漏洞:齐博地方门户系统 SQL 注入漏洞 wooyun-2014-079938.html
参考漏洞:齐博整站/地方门户 SQL 注入漏洞 wooyun-2014-080259.html
15.数组中的key
判断 GPC 是否开启,如果 off 就对数组中的 value 进行 addslashes,没有对数组中的 key 进行转义,key 带入 sql,听说低版本的 php 对二维数组中的 key 就算 GPC ON 也不会转义
参考漏洞:qibocms V7 整站系统最新版 SQL 注入一枚 & 另外一处能引入转义符的地方。 wooyun-2014-069746.html
参考漏洞:qibocms 多个系统绕过补丁继续注入 wooyun-2014-070072.html
参考漏洞:qibocms全部开源系统 Getshell wooyun-2014-070366.html
参考漏洞:Discuz 5.x 6.x 7.x 前台 SQL 注入漏洞一枚 wooyun-2014-071516.html
16.offset
$_GET[a] 提交的是一个数组,且含有一个 key 为 0,那么 $a 就是对应的这个 key 的 value,但是这里并没有强制要求为数组。
提交一个字符串就为了 \, 吃掉一个单引号,然后就在 $b 处写入 inject 可以注入
参考漏洞:qibocms 地方门户系统 wooyun-2014-080875.html
17.第三方插件
常见的 uc_cencert / alipay / tenpay / chinabank
18.数字型注入
19.二次注入
20.查询当中 key 可控
把 $_POST 带入到了查询函数,然后 foreach key ,foreach 出来的 key 做了查询中的 column。
防止方法一般是把数据库中的 column 查询出来,然后 in_array 判断一下 $_POST 出来的 key 是否在数据库中的 column 中。
参考漏洞:云人才系统 SQL 注入,绕过 WAF wooyun-2014-060166.html
参考漏洞:Cmseasy SQL 注射漏洞之三 wooyun-2014-066221.html
21.striplashes
在全局 addslashes 后,在后面的文件中又 stripslashes 去掉了转义符,然后可以闭合单引号
$_SESSION['flow_consignee'] = stripslashes_deep($consignee);
参考漏洞:ecshop 全版本注入分析
22.截取字符
23.注册 GLOBALS 变量
把 GET POST COOKIE 循环出来,然后注册一个变量,这里不允许创建 GLOBALS 变量,如果设置了 REQUEST 的 GLOBALS,就直接退出低版本 request order 是 GPC ,在 php5.3 以后 request order 默认成了 GP ,也就是 request 成了 get 和 post ,不包含 cookie,所以 $_REQUEST 里面就不包含 COOKIE 提交来的,而这里也把 COOKIE 循环出来,注册变量,所以这里在 COOKIE 里面提交 GLOBALS 就不会被检测出来,而且也成功注册了 GLOBALS 变量,所以再结合后面的一些些代码就造成了代码执行。
参考漏洞:Discuz! 某两个版本前台产品命令执行 wooyun-2014-080723.html
24.PDO 注入
#### 敏感逻辑
2.交易
3.投票、统计
PHP黑魔法
2.正则匹配
总结
本文中提到的漏洞都来自于 wooyun 的历史数据,只提供了漏洞编号而没有提供地址,这个需要大家自行去寻找提供镜像备份的网站,或者下载备份文件自己本地查看,给大家带来的不变请大家见谅。