从0到1的渗透靶机复盘(1)——java-rce、软连接覆盖、maven-rce横移链
靶机来自 MazeSec(迷踪安全):https://maze-sec.com/about/
靶机名:Pom
作者 :Sublarge
AI 总结
这篇复盘记录了一台 Linux 靶机从信息收集到 root 提权的完整过程。整体思路是:先通过 nmap / rustscan 发现异常端口 55555,再使用 openssl 连接 SSL 服务拿到初始 shell;随后进行本地信息收集,利用密钥文件解出 SSH 密码,稳定登录后通过 sudo -l 分析权限,依次借助 Java 执行、软链接覆盖和 Maven 插件命令执行完成横向移动与提权。
核心知识点包括:端口扫描与服务识别、异常端口利用、socat shell 原理、Linux 本地枚举、密钥文件解密、sudo 权限分析、Java 代码执行、软链接利用,以及 Maven 命令执行提权。
这是我通关的第一台靶机,今天来好好复盘一下,毕竟很多东西我完全不知道,都是ai的。
复盘就不说主机发现了,毕竟真实环境也不会在同网段吧。
靶机ip:10.216.75.62
信息收集
拿到靶机第一步肯定是信息收集扫端口,目前对我来说nmap扫端口的功能就够了,但是我习惯用rustscan调用nmap的脚本深度扫一下,然后用ai工具总结一下。(总觉得会发现多一点东西),还有就是以后会遇到有敲门等功能,rustscan的多线程是很有可能直接敲开的(但是好像必须是顺序敲门,这也是敲门策略的大忌,但是不排除就是有人这么设置吧,毕竟最大的漏洞就是人),ok不扯了。
1 | nmap -p- 10.216.75.62 #-p-表示全端口扫描,也可以 -p 指定端口,例如:nmap {ip} -p 22 |

看到除了22端口外(22是ssh默认端口,所以靶机都会开的),还开了80、55555端口,这个55555就很不正常,应该有什么特殊的东西。55555我们暂时没有任何信息,所以没办法入手,所以只能去web端口看一看。
是一个Spring Boot 框架的默认错误页面
也是什么都没有,那这时候一般就会去扫一遍目录了。
扫了目录也没有什么有用的东西,这个时候基本就线索断了。
那么我们只能寄希望于55555端口了。但是我们根本不知道这是什么,所以回去进行进一步探测。
我们用rustscan扫一下,他是会自动调用nmap脚本深入探测的。
1 | rustscan -a 10.216.75.62 -p 55555 --ulimit 5000 -- -A -sC -sV |
输出很多,我们用ai总结一下。
这里顺便打个广告,自己写的小工具,调用llm-api自动总结上一条命令。终端命令-what,(随意开发的,也就vibe了一两天,有什么建议都可以提提issues,点点star)
效果大概这样:
我们直接按照ai给的建议来建立ssl连接。
1 | openssl s_client -connect 10.216.75.62:55555 -quiet |

直接就弹回来一个shell了。成功拿到user-flagflag{user-f823e147843dd5b23f0ac9d243ae12fb}
复盘-shell来源
这里好奇为什么能直接获得一个shell呢。
我们ps看一下当前的进程(前面一些没用的就不看了):
我们看到这一行
1 | 2438 mav1234 0:00 socat -d -d OPENSSL-LISTEN:55555,cert=/home/mav1234/.local |
有一个进程以mav1234的身份在用socat监听55555端口,应该是一个定时任务cert=/home/mav1234/.local是用于验证的证书
所以我们用openssl向该端口发起连接请求,就会弹回来一个mav1234的shell了。
- 这里其实就是反弹shell的逆向过程,我们主动连接靶机,这就要求靶机上开放了特定端口有这个服务。而我们平时选择反弹shell就是因为,它不需要靶机开放什么服务,是靶机去主动连接我们
获得shell之后的信息收集
我们通常获得了基础的shell之后就要进一步的信息收集,因为在shell之外很多信息是收集不到或者不方便的。
最普遍的就是看看:
sudo -l:是否有一些特定的sudo权限ls -l /home:看看有哪些用户,判断是否会要横向,但是一般都是要的ls -al /opt:Optional Application Software (可选应用软件),除了apt等系统软件之外,很多自己安装的软件都会在这个目录下,比如手动安装的Google Chrome、TeamViewer、MongoDB、PostgreSQL、Discord、VS Code等,都可能出现在这里。靶机作者也经常把入口放在这里。- 还有就是
/etc/passwd/etc/shadow这些常规的文件了
其他就是得随机应变了,这些都没有思路的话再去深入的探索
我们这边先看一下家目录还一个文件。
1 | sh-5.2$ cat journel |
有秘密,应该是提示,找一下。
找到了meta文件和pem文件,
meta是元数据,pem是证书,公钥私钥等文件。
猜测应该是meta用pem解密会得到什么东西。
我们还是可以用openssl来解密。
得到MvxPf8yCB8lxXk5A,猜测是ssh密码,我们尝试ssh登录稳定一下shell(因为这样ssl连接的shell很不稳定,用起来不方便)

登录成功。
再信息收集一下
看到有3个用户,并且我们有另外一个用户的java权限。那很明显就是用java横向了。相当于任意java代码执行了。
先写一个java的一句话木马,
1 | -bash-5.2$ cat Exploit.java |
1 | sudo -u qc2000 /usr/bin/java -cp /tmp Exploit |

这里就横向成功了,但是这里要注意的是,不要放在自己家目录,因为qc2000可能会没有权限访问,所以会报错找不到class文件。
接着看一下sudo权限。
1 | bash-5.2$ sudo -l |
有一个ln命令的权限,应该就是打软连接,首先想到的是连接ssh公钥之类的。
但是就算是有链接,不管是硬链接还是软连接,如果源文件没有权限,那链接文件也一样看不了。那就不是这么打的了。
这里有一个点,那就是这个ln命令/home/terra536/ln。这是家目录的ln,而不是/usr/bin下面的
我们是不是可以尝试修改这个命令呢。
- 写一个shell脚本
- 用
/home/terra536/ln打把shell脚本给链接到自己上面(用-f参数强制覆盖原来内容) - 然后我们运行
/home/terra536/ln就相当于在运行shell脚本了,而且是以terra536的身份运行的
开始
1 | qc2000@Pom:/tmp$ chmod +x /tmp/hacker.sh |
最后就是maven的插件命令执行提权,因为我们有maven的root权限,只需要用maven执行对应的命令就好,反弹shell或者直接给其他用户无密码执行所有命令的权限,写进/etc/sudoers(这里是一种演示,还有很多其他插件,大家可以去学习一下。并且演示这种也是需要一个最小pom.xml文件的)
1 | bash-5.2# sudo /usr/bin/mvn exec:exec -Dexec.executable=/bin/sh -Dexec.args="-c 'echo \"terra536 ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers'" |
