漏洞原理:
Content-Range
在 Tomcat 的HTTP PUT请求中主要用于实现大文件的分块传输。在文件上传未完成的情况下,内容会被临时存储在Tomcat的工作目录:$CATALINA_BASE/work/Catalina/localhost/ROOT
。
该漏洞的核心在于不完整PUT请求上传时的文件名处理机制:文件路径中的分隔符/
会被转换为.
。例如:访问/xxxxx/session
会被解析为.xxxxx.session
条件苛刻
该漏洞的利用前提条件非常苛刻,必须要满足以下三点才可以达到真正的利用(多数网站不会满足这些条件):
- 开启File文件会话存储
- 将DefaultServlet的readonly配置为false
- lib文件夹中要有Commons Collections 3.2.1.jar包
漏洞复现
目前网上的复现教程和视频基本都是“弹个计算器”,而前两天刚好在B站上看到某个靶场部署了该漏洞的环境,一是省了本地部署环境的麻烦,二是该环境靶场要求最终获得administrtor的NTLM hash作为flag提交才算完成挑战,当时看到只有3个人成功获得hash,看来还是有点难度的,试试看吧~
-
由于靶场是无法通过远程3389登录Windows,因此就算弹出计算器,你也无法看到
-
另外一个比较苛刻的地方是,该靶标环境不出网,无回显
OK,按照网上所有复现教程所说的那样,生成payload,然后两步提交:
困难1
看似是成功了,但是弹计算器是毫无意义的,换成whoami
命令的话,同样是500错误,并无法看到whoami的信息,那么我们只能考虑上传木马了。
但是问题在于我们无法得知Web目录的具体路径(当然你可以根据Tomcat的默认路径去不断猜),但我们知道Tomcat的默认页面是index.jsp,那么就可以通过下面这条命令去遍历C盘中的index.jsp文件,一旦查找到,就可以将我们要写的内容写入到指定的文件中:
for /r C:\ %i in (index.jsp) do @echo "test" > "%~dpi\example.jsp"
通过以上命令生成Payload,然后发送,接着访问 http://10.10.10.3/example.jsp 看看:
bingo!既然成功找准网站目录,接下来就可以上传我们可爱的“木马”了,蚁剑启动:
困难2
成功连接,上传神器mimikatz,运行:
额…,mimikatz是交互式命令,无论是单独运行mimikatz还是按照上面的方式运行,都没有任何结果回显,后经过询问,有同事贴心告诉了以下命令:
mimikatz "privilege::debug" "lsadump::lsa /patch" exit > 1.txt
成功将结果输出到了1.txt,查看内容:
我擦~
mimikatz提不了权,这咋整?又是一番Google和各种搜索,尝试了reg save大法、lsass大法均以失败告终。
既然蚁剑都能连接,那冰蝎和哥斯拉是不是也能连接呢?毕竟这两个工具的功能更强大一些,利用蚁剑分别上传冰蝎和哥斯拉的jsp shell,经过测试,冰蝎死活连不上,而哥斯拉是可以正常连接的(不知道是不是我的冰蝎环境有问题?):
经过一阵摸索和折腾,最终发现哥斯拉的PetitPotam功能可以利用提权功能以system权限运行命令:
既然这样,那就好办了,一种是导出System和SAM文件,然后利用mimiktaz进行查看(这种方式我没尝试):
# 导出SAM文件和SYSTEM文件
esentutl.exe /y /vss C:\Windows\System32\config\System /d system
esentutl.exe /y /vss C:\Windows\System32\config\SAM /d sam
# 导入mimikatz
sadump::sam /sam:sam /system:system
还有更简单的方法,那就是直接利用PetitPotam功能运行mimikatz命令lsadump::sam
来直接获取NTLM hash:
提交flag,搞定~
参考资料
https://forum.butian.net/article/674
https://blog.csdn.net/qq_55202378/article/details/140419202
https://googles.plus/2022/02/07/li-yong-certutil-jin-xing-shen-tou-ce-shi/