在一次复现畅捷通任意文件读取漏洞的过程中,发觉这个“任意文件读取”漏洞其实暗藏了大坑。通过网上检索,一大堆的文章和工具都是copy只提到文件读取。
1.首先就是用网上 公开的的poc试一下
/tplus/SM/DTS/DownloadProxy.aspx?preload=1&Path=../../Web.Config
成功读取到了文件内容
2.然后想通过读取源代码,来分析看看漏洞的成因。通过读aspx文件读取到的文件内容如下
3.通过网上查阅资料了解到,畅捷通系统是asp.net开发的,代码是采用了预编译。
简单说,就是提前将源码aspx文件转换成dll文件,这些dll文件保存在bin/ 文件夹下,当程序运行时,首先会加载bin目录下的程序。
当访问aspx文件时,会被对应的.dll文件处理。代码逻辑也是存储在dll中,不论aspx文件是否存在,只要dll文件存在,特定路由的功能就能正常处理。
而文件对应路径为:abc.aspx -> /bin/abc.dll
4.进一步利用读源码读取文件,成功读取相应的dll文件
5.然后再次请求,去读上传接口的文件,出了大问题了。竟然报错报。
错提示:文件找不到了
网上找到了畅捷通源码,直接反编译DownloadProxy.aspx对应的dll文件
通过源码看出代码逻辑很简单,首先是获取了Path参数,赋给变量text。
然后也没有经过任何过滤,到了最下边WriteFile()函数(向浏览器输出文件),就发生了任意文件读取。
但紧接着下一行就是 File.Delete() ,通过字面意思也知道这是个文件删除函数。
由于Path参数可控,就能读取任何文件,但同样也会删除任何文件。
这明明就是一个 任意文件读取+删除 漏洞!
对于别人的漏洞还是要自己分析复现下,copy的东西是方便省力,但效果不可控。像任意文件删除还是很危险的,在生产环境打这种漏洞,系统崩了可就麻烦了。
商务咨询:
0571-87031601
商务邮箱: