当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-053781

漏洞标题:phpmywind 9枚sql注入漏洞

相关厂商:phpmywind.com

漏洞作者: ′雨。

提交时间:2014-03-18 17:58

修复时间:2014-06-16 17:59

公开时间:2014-06-16 17:59

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-03-18: 细节已通知厂商并且等待厂商处理中
2014-03-26: 厂商已经确认,细节仅向厂商公开
2014-03-29: 细节向第三方安全合作伙伴开放
2014-05-20: 细节向核心白帽子及相关领域专家公开
2014-05-30: 细节向普通白帽子公开
2014-06-09: 细节向实习白帽子公开
2014-06-16: 细节向公众公开

简要描述:

过滤不严。
位于同一文件中。

详细说明:

在member.php中。
注入1 :

else if($a == 'delfavorite')
{
if(is_array($checkid))
{
foreach($checkid as $v)
{
$dosql->ExecNoneQuery("DELETE FROM `#@__userfavorite` WHERE `id`=$v AND `uname`='$c_uname'");
}
}
header('location:?c=favorite');
exit();
}


数组遍历 然后 带入查询 无单引号。

80.jpg


有图有真相。
类似的 2:

else if($a == 'delmsg')
{
if(is_array($checkid))
{
foreach($checkid as $v)
{
$dosql->ExecNoneQuery("DELETE FROM `#@__message` WHERE `id`=$v AND `nickname`='$c_uname'");
}
}


原理一样 都不多说了。
类似的3:

else if($a == 'delorder')
{
if(is_array($checkid))
{
foreach($checkid as $v)
{
$dosql->ExecNoneQuery("DELETE FROM `#@__goodsorder` WHERE `id`=$v AND `username`='$c_uname'");
}
}


类似的4:

else if($a == 'delcomment')
{
//是否开去文章评论功能
if($cfg_comment == 'N') exit();
if(is_array($checkid))
{
foreach($checkid as $v)
{
$dosql->ExecNoneQuery("DELETE FROM `#@__usercomment` WHERE `id`=$v AND `uname`='$c_uname'");
}
}
header('location:?c=comment');
exit();
}


注入 5:

else if($a == 'getgoods')
{
$r = $dosql->GetOne("SELECT `checkinfo` FROM `#@__goodsorder` WHERE `username`='$c_uname' AND `id`=$id");
$checkinfo = explode(',',$r['checkinfo']);
if(!in_array('getgoods', $checkinfo))
{
$checkinfo = $r['checkinfo'].',getgoods';
}
$dosql->ExecNoneQuery("UPDATE `#@__goodsorder` SET checkinfo='$checkinfo' WHERE `username`='$c_uname' AND `id`=$id");
header('location:?c=ordershow&id='.$id);
exit();
}


这里$id 可控 并且无intval 直接带入了查询 无单引号 可注入。

100.jpg


不用多说了把?
注入6:

else if($a == 'applyreturn')
{
$r = $dosql->GetOne("SELECT `checkinfo` FROM `#@__goodsorder` WHERE `username`='$c_uname' AND `id`=$id");
$checkinfo = explode(',',$r['checkinfo']);
if(!in_array('applyreturn', $checkinfo))
{
$checkinfo = $r['checkinfo'].',applyreturn';
}
$dosql->ExecNoneQuery("UPDATE `#@__goodsorder` SET checkinfo='$checkinfo' WHERE `username`='$c_uname' AND `id`=$id");
header('location:?c=ordershow&id='.$id);


跟注入5一样 不多说。
注入7:

else if($a == 'getarea')
{
//初始化参数
$datagroup = isset($datagroup) ? $datagroup : '';
$level = isset($level) ? $level : '';
$v = isset($areaval) ? $areaval : '0';
if($datagroup == '' or $level == '' or $v == '')
{
header('location:?c=default');
exit();
}
$str = '<option value="-1">--</option>';
$sql = "SELECT * FROM `#@__cascadedata` WHERE `level`=$level And ";
if($v == 0)
$sql .= "datagroup='$datagroup'";
else if($v % 500 == 0)
$sql .= "`datagroup`='$datagroup' AND `datavalue`>$v AND `datavalue`<".($v + 500);
else
$sql .= "`datavalue` LIKE '$v.%%%' AND `datagroup`='$datagroup'";

$sql .= " ORDER BY orderid ASC, datavalue ASC";

$dosql->Execute($sql);
while($row = $dosql->GetArray())


这里$level 直接带入查询当中 无单引号 直接注入

101.jpg


注入8:

else if($a == 'savecomment')
{
//是否开去文章评论功能
if($cfg_comment == 'N') exit();
//初始化参数
$aid = isset($aid) ? $aid : '';
$molds = isset($molds) ? $molds : '';
$body = isset($body) ? htmlspecialchars($body) : '';
$link = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

if($aid == '' or $molds == '' or $body == '')
{
header('location:?c=default');
exit();
}
$reply = '';

if(empty($c_uname))
{
$uid = '-1';
$uname = '游客';
}
else
{
$r = $dosql->GetOne("SELECT `id`,`expval`,`integral` FROM `#@__member` WHERE `username`='$c_uname'");
$uid = $r['id'];
$uname = $c_uname;
}
$time = time();
$ip = GetIP();
$dosql->ExecNoneQuery("INSERT INTO `#@__usercomment` (aid,molds,uid,uname,body,reply,link,time,ip,isshow) VALUES ('$aid','$molds','$uid','$uname','$body','$reply','$link','$time','$ip','1')");


$link是referer 可控。 并且直接带入了insert中

102.jpg


直接注入
注入9:

else if($a == 'savefavorite')
{
$aid = isset($aid) ? $aid : '';
$molds = isset($molds) ? $molds : '';
$link = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
if($aid == '' or $molds == '' or $link == '')
{
header('location:?c=default');
exit();
}
$r = $dosql->GetOne("SELECT `id`,`expval`,`integral` FROM `#@__member` WHERE `username`='$c_uname'");
$uid = $r['id'];
$uname = $c_uname;
$time = time();
$ip = GetIP();
$r2 = $dosql->GetOne("SELECT `aid`,`molds` FROM `#@__userfavorite` WHERE `aid`=$aid and `molds`=$molds");
if(!is_array($r2))
{
echo aaaa;exit;
$dosql->ExecNoneQuery("INSERT INTO `#@__userfavorite` (aid,molds,uid,uname,link,time,ip,isshow) VALUES ('$aid','$molds','$uid','$uname','$link','$time','$ip','1')");

//收藏一条增加1经验值2积分


跟注入8一样 就不多说了。

漏洞证明:

见详细说明。

修复方案:

无尽的过滤。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-03-26 17:11

厂商回复:

漏洞存在。

最新状态:

暂无


漏洞评价:

评论

  1. 2014-05-06 20:56 | 小贱人 ( 路人 | Rank:4 漏洞数:3 | 资深菜鸟,)

    mark