当前位置:Gxlcms >
数据库问题 >
【PHP代码审计】 那些年我们一起挖掘SQL注入 - 4.全局防护Bypass之二次注入
【PHP代码审计】 那些年我们一起挖掘SQL注入 - 4.全局防护Bypass之二次注入
时间:2021-07-01 10:21:17
帮助过:2人阅读
可以看到,服务端处理GET和POST请求的变量时都会做addslashes处理。
Part2:审计过程
1.首先在个人发布简历处:
elseif ($act == ‘make4_save‘) { $resume_education = get_resume_education($_SESSION[‘uid‘], $_REQUEST[‘pid‘]); if (count($resume_education) >= 6) showmsg(‘教育经历不能超过6条!‘, 1, $link); $setsqlarr[‘uid‘] = intval($_SESSION[‘uid‘]); $setsqlarr[‘pid‘] = intval($_REQUEST[‘pid‘]); if ($setsqlarr[‘uid‘] == 0 || $setsqlarr[‘pid‘] == 0) showmsg(‘参数错误!‘, 1); $setsqlarr[‘start‘] = trim($_POST[‘start‘]) ? $_POST[‘start‘] : showmsg(‘请填写开始时间!‘, 1, $link); $setsqlarr[‘endtime‘] = trim($_POST[‘endtime‘]) ? $_POST[‘endtime‘] : showmsg(‘请填写结束时间!‘, 1, $link); $setsqlarr[‘school‘] = trim($_POST[‘school‘]) ? $_POST[‘school‘] : showmsg(‘请填写学校名称!‘, 1, $link); $setsqlarr[‘speciality‘] = trim($_POST[‘speciality‘]) ? $_POST[‘speciality‘] : showmsg(‘请填写专业名称!‘, 1, $link); $setsqlarr[‘education‘] = trim($_POST[‘education‘]) ? $_POST[‘education‘] : showmsg(‘请选择获得学历!‘, 1, $link); $setsqlarr[‘education_cn‘] = trim($_POST[‘education_cn‘]) ? $_POST[‘education_cn‘] : showmsg(‘请选择获得学历!‘, 1, $link);
|
2.这里看到insert入库了,可以尝试加个单引号,入库后就会消除转义字符。我们先继续跟进inserttables后的check_resume函数
3.我们填写一份简历简单试验下,在教育经历处学校名称字段填写aa’
保存后发现报错语句:
0x04 漏洞证明
构造获取数据库用户相关信息的POC:
查看简历发现简历姓名变成了root@localhost:
查看sql语句发现更新语句是成功执行的:
最后,有兴趣的同学可以继续获取其它的管理员账户等相关字段的信息。
原文链接:http://www.cnbraid.com/2016/02/19/sql3/,如需转载请联系作者。
【PHP代码审计】 那些年我们一起挖掘SQL注入 - 4.全局防护Bypass之二次注入
标签: