ZZCMS201910代码审计,此次审计的目的是为了记录学习过程
下载完源码后用seay审计一下
我们发现了多个sql注入漏洞,在admin/ask.php的文件看到这个可能存在漏洞的点
这里的sql语句中$_COOKIE["askbigclassid"]这个参数可控,此时就有一个想法是不是可以将我所想查询的内容通过构造特殊的sql语句插入到这个变量中,进行自己想查询的东西,这里是不是就完成了一个sql注入攻击。
$sql = "select * from zzcms_askclass where parentid=" $_COOKIE["askbigclassid"] . " order by xuhao asc";
通过phpstorm我们能发现在调用add()的时候才会执行sql语句
我们Ctrl+F 搜索add() 57行成功定位
利用GET的方法传入do,如果do=add那么调用 function add()
所以可知url:http://xxxxxxxx/admin/ask.php?do=add
可触发sql执行语句
这里的$_COOKIE["askbigclassid"]参数可控
我们尝试对Cookie进行注入,发现触发了Waf
我们在phpstorm中使用Ctrl+Shift+F 对全文进行搜索
成功定位到相关文件
在第18行 $_REQUEST 接受传入的参数
这里的$_GET等于调用zc_check($_GET)后的值
get_magic_quotes_gpc() PHP 5.4.0 起移除,这里使用的是 php 7.4环境所以忽略
addslashes(htmlspecialchars(trim($string)) 这串代码是自动转义
用来破坏语义防止Sql注入,Xss
foreach把传入的数组定义后,并调用zc_check()后返回到原来的$_GET中去
trim()
去掉传入的空格
htmlspecialchars()
把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体:
防止xss
addslashes()
在传入的每个双引号(")单引号(')双引号(")反斜杠()NULL
前添加反斜杠:
利用extract定义到全局变量中去
54行代码 检测传入的URI
我们搜索checksqlin=="Yes"
得知,否要启动sql过滤功能的开关 默认为Yes
strpos()判断输入的URI中是否有这个文件
如果我们输入的URI中包含siteconfig.php,那么srtpos(xxxx)==1
srtpos(xxxx)==0,则调用stopsqlin() 用来过滤参数中的select or union 等函数
所以结合第一个利用cookie注入的方法
得出 url=http://xxxxxxxx/admin/ask.php?do=add&ss=siteconfig.php
使得绕过sql注入检测函数
用burp发送数据包,成功绕过了waf
下一步我们指定对cookie进行注入
payload:Python sqlmap.py -r 1.txt --is-dba --batch --dbms Mysql --level 3 -v 6 -p Cookie
sql注入成功
知识星球:
原文始发于微信公众号(凯撒安全实验室):php 代码审计学习记录-SQL注入-01
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论