欢迎来到云服务器

网络技术

Discuz x3.2前台GET型SQL注入裂痕(绕过全局WAF)

前台非盲注,只需要共同一个xss,就能消除鸡肋了。
信pandas,得长生,紧抱doggy哥大腿!

/source/include/misc/misc_stat.php 46行:
if(!empty($_GET['xml'])) {
$xaxis = '';
$graph = array();
$count = 1;
$begin = dgmdate($beginunixstr, 'Ymd');
$end = dgmdate($endunixstr, 'Ymd');
$field = '*';
if(!empty($_GET['merge'])) {
if(empty($_GET['types'])) {
$_GET['types'] = array_merge($cols['login'], $cols['forum'], $cols['tgroup'], $cols['home'], $cols['space']);
}
$field = 'daytime,`'.implode('`+`', $_GET['types']).'` AS statistic';
$type = 'statistic';
}
foreach(C::t('common_stat')->fetch_all($begin, $end, $field) as $value) {
$xaxis .= "<value xid='$count'>".substr($value['daytime'], 4, 4)."</value>";
if($type == 'all') {
foreach ($cols as $ck => $cvs) {
if($ck == 'login') {
$graph['login'] .= "<value xid='$count'>$value[login]</value>";
$graph['register'] .= "<value xid='$count'>$value[register]</value>";
} else {
$num = 0;
foreach ($cvs as $cvk) {
$num = $value[$cvk] + $num;
}
$graph[$ck] .= "<value xid='$count'>".$num."</value>";
}
}
} else {
//var_dump($value);exit;
if(empty($_GET['types']) || !empty($_GET['merge'])) {
$graph[$type] .= "<value xid='$count'>".$value[$type]."</value>";
} else {
foreach($_GET['types'] as $t) {
$graph[$t] .= "<value xid='$count'>".$value[$t]."</value>";
}
}
}
$count++;
}
$xml = '';
$xml .= '<'."?xml version="1.0" encoding="utf-8"?>";
$xml .= '<chart><xaxis>';
$xml .= $xaxis;
$xml .= "</xaxis><graphs>";
$count = 0;
foreach ($graph as $key => $value) {
$xml .= "<graph gid='$count' title='".diconv(lang('spacecp', "do_stat_$key"), CHARSET, 'utf8')."'>";
$xml .= $value;
$xml .= '</graph>';
$count++;
}
$xml .= '</graphs></chart>';

@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
@header("Content-type: application/xml; charset=utf-8");
echo $xml;
exit();
}

见这一句:$field = 'daytime,`'.implode('`+`', $_GET['types']).'` AS statistic';

将$_GET['type']数组直接用`+`支解,并没有过滤。


因为位置在$field的处所,并不在单引号中,所以不消引入单引号,也无需思量addslashes。

此刻碰着另一个问题,怎么绕过discuz3.2的WAF?

不绕过也没法出数据。

我们先看看输出点在那里:http://localhost/bbs/misc.php?mod=stat&op=trend&xml=1&merge=1&types[1]=x

 

Discuz x3.2前台GET型SQL注入裂痕(绕过全局WAF)

也就是说我们可以节制的部门有许多。

且不看全局防注入源码,黑盒试一下我发明一旦呈现'、(就会拦截,并且注释符(#、--)也会拦截。

括号不能有,就出格拙计,因为许多盲注需要括号,子查询也需要括号,函数也需要括号,这里都不能用了。



SELECT daytime,`aaa` AS statistic FROM common_stat WHERE daytime>=20140805 AND daytime<=20140904 ORDER BY daytime

我们再看上述sql语句,发明我们可控的部门前面,尚有个daytime。这就愁坏我了,因为我要查询的表是用户表,而用户表基础没这个字段。

 

Discuz x3.2前台GET型SQL注入裂痕(绕过全局WAF)

执行会提示Unknown column 'daytime' in 'field list'。

所以,我们可以操作mysql的特性,一次查询两个表,将pre_ucenter_members的数据连带着查询出来:
 

Discuz x3.2前台GET型SQL注入裂痕(绕过全局WAF)

各人可以看到,已经不报错了。因为pre_common_statuser表中存在`daytime`这个列。并且这个表中也有uid这个列,正好可以作为pre_ucenter_members的筛选项。

那么,有的同学再问,sql语句后半部门

` AS statistic FROM common_stat WHERE daytime>=20140805 AND daytime<=20140904 ORDER BY daytime

 

没有注释符怎么处理惩罚?

腾讯云代理

Copyright © 2003-2021 MFISP.COM. 国外vps服务器租用 梦飞云服务器租用 版权所有 粤ICP备11019662号