标题:贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)
内容:
一,环境部署
二,源码分析
三,sql注入
总结:
[回到顶部](#article_top)
一,环境部署
本漏洞由于是2015年爆出的,所以这里源码使用的PHP版本不支持7版本,这里我们可以使用PHP5.4.45版本,只需小皮进行下载更改即可:
1.1 安装phpstudy
使用php5.4.45版本
将源码解压放在phpstudy的WWW目录下
配置连接数据库
创建数据库ctf,并且建立users表
插入数据
二,源码分析
2.1 第一道WAF分析
第一层WAF: 包含点,单引号,星号等等,一旦包含直接删除非法字符,然后又注释掉了一系列东西,这是第一个WAF防御。
2.2 第二道WAF分析
GET/POST/REQUEST/COOKIE都会经过这个替换str_replace(array(‘&’, ‘"’, ‘<’, ‘>’,‘(’,‘)’), array(‘&’, ‘"’, ‘<’, ‘>’,‘(’,‘)’), $string),
三,sql注入
3.1 注入思路
输入http://localhost/daiqile/demo.php?id=1&username=2&password=3
发现主要是进行了一个使用问号来进行的分割,分割为了两个数组,数组0是路径uri,数组1即为传入的参数。全是explode的功劳
思路:让第一道WAF检测不到恶意字符,再通过第二道WAF的覆盖,从而将恶意字符传入到REQUEST中,其实也就可以绕过WAF,完成注入了
再根据PHP下划线特性
这里我们需要了解PHP的一个小特性,那就是自身在进行解析的时候,如果参数中含有” “、”.”、”[“这几个字符,那么会将他们转换为下划线
所以我们可以利用这个特性,让第一道WAF解析一个正常的参数,第二道WAF来解析另一个恶意字符的参数从而完成覆盖注入。
3.2 开始注入
寻找回显点
我们可以看到是第二个字段进行的回显,所以我们就在第二个字段进行注入。
爆库名
爆出所有的库名
爆表名
爆字段名
查flag
总结:
1.HTTP参数污染(HPP):PHP只接收同名参数的最后一个值,这涉及到HTTP参数污染的问题。也就是说,如果一个请求中包含多个同名参数,PHP会忽略前面的,只使用最后一个。
2.PHP特性:在GET请求中,如果参数的键(key)包含点号(.),PHP会自动将其转换为下划线(_)。例如,参数i.d会被转换为i_d。
3. R E Q U E S T 数组: _REQUEST数组: REQUEST数组:_REQUEST数组会按照PHP的接收方式来处理参数,如果存在i_d和i.d这样的参数,PHP会将它们都转换为i_d,并且只接收最后一个参数的值。因此,如果攻击者将恶意代码放在第二个参数中,第一个参数即使被WAF检测到,也不会影响最终的请求数据,从而绕过了WAF的防护。