1.简述
畅捷通信息技术股份有限公司(以下简称畅捷通公司)是用友集团成员企业。畅捷通T+软件是畅捷通公司开发的ERP管理软件,采用B/S结构及NET开发技术,面向中小型工贸和商贸企业提供财务管理、采购管理、库存管理等业务功能,其产品目前有单机、公有云和云主机三种售卖形态。
2022年8月29日和8月30日,畅捷通公司紧急发布安全补丁修复了畅捷通T+软件任意文件上传漏洞。未经身份认证的攻击者利用该漏洞,通过绕过系统鉴权,在特定配置环境下实现任意文件的上传,从而执行任意代码,获得服务器控制权限。目前,已有用户被不法分子利用该漏洞进行勒索病毒攻击的情况出现。
CNVD对该漏洞的综合评级为“高危”。
2.漏洞位置查找
漏洞搭建过程不多赘述,先安装SQLserver版本要大于2008,然后点击安装包一直下一步就可以了。
安装完成之后查找代码路径,查看80端口的pid,然后通过pid的命令行找到畅捷通内置nginx的程序和nginx配置路径
然后再nginx目录下发现readme.txt,里面记录了如何修改监听端口,和如何修改虚拟目录。查看虚拟目录的配置,可以找到网站源代码路径:C:\Program Files (x86)\Chanjet\TPlusPro\WebSite。这个是默认安装路径。
根据网上透露的一点点细节可以知道,漏洞根源在于Upload.aspx文件,然后用everything来搜索Upload.aspx。发现有三个,接下来挨个来看。
找到Upload.aspx文件打开之后发现没有源代码,而是一句话“这是预编译工具生成的标记文件,不应删除!”。怀疑有加密,然后就去百度加密方法,经过一番搜索终于得知,这不是加密而是ASP.NET 预编译。ASP.NET 可以预编译网站,然后再将其提供给用户。这样做有很多优点,包括缩短响应时间、执行错误检查、保护源代码以及提高部署效率。
3.预编译如何查找源代码
想要看到我们心心念念的源代码就势必要对预编译的结果进行反编译。根据网上教程,要找到源代码就需要先在bin目录下找到compiled文件。三个Upload.aspx对应生成了三个compiled文件,这里没办法直接看出他们的一一对应关系,所以还需要看compiled文件内容。
从下图可以看出,compiled文件里面记录了预编译前aspx的文件路径。
同时还记录了预编译之后生成的dll文件名。
为什么aspx记录的是文件路径而dll记录的是文件名?因为dll和compiled统一放在bin目录下,而aspx放在原来的位置。
4.漏洞分析
这里使用ILSpy来查看dll源代码。
查看三个Upload.aspx源代码,确定了出现问题的代码文件是/WebSite/SM/SetupAccount/Upload.aspx
代码如下
1 | // CommonPage_SetupAccount_Upload |
4.1文件上传漏洞
简单分析代码可知,这里存在两个漏洞,一个是文件上传,另一个是目录穿越。
先查看文件上传漏洞,上传文件的条件有两个:
1.文件大小要小于或等于204800
2.文件类型必须为image/jpeg、image/bmp、image/gif、image/pjpeg其中之一
然后构造上传表单,action写上传路径。
1 | <form action="http://192.168.100.42/tplus/SM/SetupAccount/Upload.aspx" name="form1" id="form1" method="post" enctype="multipart/form-data"> |
然后通过burpsuit抓包,这样方便改包。不管我怎样尝试,只有在cookie中有session是才能上传成功
4.2认证绕过漏洞
就在我百思不得的时候,突然我注意到一个字眼
漏洞根源在于Upload.aspx文件存在认证缺陷,向该文件传递preload参数可直接绕过系统权限认证,从而实现任意文件上传。
然后开fuzz参数perload参数,最终fuzz出的参数为1
4.3目录穿越漏洞
因为代码获取文件名时是用\\来分割的,所以将文件名用/分割就可以绕过分割,从而造成目录穿越
5上传WEBSHELL
既然知道了漏洞利用条件,那么就可以尝试上传WEBSHELL了
先调整一下poc
1 | <form action="http://192.168.100.42/tplus/SM/SetupAccount/Upload.aspx?preload=1" name="form1" id="form1" method="post" enctype="multipart/form-data"> |
上传哥斯拉马
上传成功,服务器上已经有了文件
直接访问文件会报错,报错提示没有预编译。
5.1预编译aspx
1 | C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v \ -p C:\Users\user\Desktop\1 C:\Users\user\Desktop\2 |
预编译需要用到aspnet_compiler.exe,这个是Microsoft.NET中附带的。这里成功预编译了冰蝎马。
5.2上传预编译之后的aspx
上传compiled
上传dll
上传aspx
冰蝎连接成功
- 本文作者: ordar
- 本文链接: https://mrwq.github.io/用友畅捷通T+未授权任意文件上传漏洞(0day)分析与复现/
- 版权声明: 本文作者: ordar123 转载请注明出处!