WordPress Plugin - WPdiscuz 7.0.4 任意文件上传漏洞

一、漏洞简介

二、漏洞影响

WPdiscuz 7.0.0 - WPdiscuz 7.0.4

三、复现过程

漏洞分析

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

9.png

10.png

漏洞复现

如此,程序只是根据文件内容判断文件类型,并未对文件后缀进行效验,构造一个图片马,或者手动在webshell前面加上图片头信息即可绕过。

11.png

12.png

13.png

14.png

poc

import requests
import re
import sys

class wpdiscuz():
    def __init__(self):
        self.s = requests.session()
        self.s.headrs = {
            "User-Agent":
            "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 Edg/80.0.361.66"
        }
        self.nonce = ""
        self.state = False

    def check(self, url):
        res = self.s.get(url=url)

        pat1 = "wpdiscuz/themes/default/style\.css\?ver=(.*?)'"
        reSearch1 = re.search(pat1, res.text)
        if reSearch1 == None:
            print("%s 评论插件不存在任意文件漏洞" % url) 
            return
        mess = reSearch1.group(0)
        version = reSearch1.group(1)
        # 判断版本
        vers = version.split(".")
        if (len(vers) == 3):
            if int(vers[0]) == 7:
                if int(vers[2]) <= 4:
                    print(url + " 存在任意文件上传漏洞 wpdiscuz版本为 %s" % version)
                    self.state = True

        if self.state == True:
            # nonce
            pat2 = '"wmuSecurity":"(.*?)"'
            reSearch2 = re.search(pat2, res.text)
            nonce = reSearch2.group(1)
            self.nonce = nonce
        else:
            print("%s 评论插件不存在任意文件漏洞" % url)

    def exp(self, url, project, filepath):
        pass

if __name__ == "__main__":
    wpdiscuz = wpdiscuz()
    url = sys.argv[1]
    print("检测漏洞结果:")
    wpdiscuz.check(url)

参考链接

https://xz.aliyun.com/t/8138#toc-1