齐博全版本getshell漏洞

  • A+
所属分类:漏洞时代
摘要

对齐博cms最新漏洞的探讨Author:0day5
Email:[email protected]
Blog:http://www.0day5.com

对齐博cms最新漏洞的探讨

Author:0day5
Email:[email protected]
Blog:http://www.0day5.com

起初,这套程序是我在和小伙伴一边看CCAV一边拿着爪机和妹子微信的时候。基友redrain提醒我看的。说是齐博出了重大的漏洞,发布了紧急补丁。然后就陪好基友redrain一起分析了这个漏洞的产生过程。

0x01 变量覆盖
do/fujsarticle.php
[php]
$FileName=dirname(__FILE__)."/../cache/fujsarticle_cache/";
if($type=='like'){ //只有type=like时候才触发
$FileName.=floor($id/3000)."/";
}else{
unset($id);
}
.........省略部分代码
require_once(dirname(__FILE__)."/global.php"); //重新加载该文件
.........省略部分代码
foreach($listdb AS $key=>$rs)
{
//$target=$rs[target]?'_blank':'_self';
$target='_blank';
if($type=='pic'){
$show.="

";
}else{
eval("/$show.=/"$tplcode/";");
}
}
if(!$show){
$show="暂无...";
}
[/php]

由于重新加载了global.php。所以前面的FileName对get变量再次extract。对FileName可控,就达到了覆盖文件的可能。
比如我们提交
http://www.0day5.com/do/fujsarticle.php?type=like&FileName=../data/1.php&submit=fuck
会由于条件不满足,打印出 1.php
[php][/php]

这里可以造成对任意文件的覆盖和生成,但是内容不可控。

0x02 代码执行
在文件do/jf.php
[php]
$query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list");
while($rs = $db->fetch_array($query)){
$fnameDB[$rs[fid]]=$rs[name];
$query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list");
while($rs2 = $db->fetch_array($query2)){
eval("/$rs2[title]=/"$rs2[title]/";");
eval("/$rs2[content]=/"$rs2[content]/";");
$jfDB[$rs[fid]][]=$rs2;
}
}[/php]
从xx_fjabout里面读取的title和content都被执行了。所以控制好title和content就能够执行任意代码了。
参考
http://phpchallenges2.sinaapp.com/index.php

0x03 双剑合并
这个是造成对getshell的主要原因了。将上面两个漏洞结合起来,就达到了覆盖文件, 然后提交远程数据,控制title和content来执行。

感谢三位好基友hellolove ZTZ redrain

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: