靶机下载地址: https://www.vulnhub.com/entry/warzone-3-exogen,606/
# 确认攻击目标
攻击机 KALI: 192.168.0.135 (由于设置成了 DHCP、可能多变)
靶机 WARZONE3:桥接于 192.168.0.1 的网卡,ip 未知
1 )确定靶机 ip 地址和开放的端口
由已至内网靶机所在主机 MAC 地址自动扫描靶机 ip
sudo arp-scan -l | grep 'a0' | awk '{print $1,$2}' | cut -d ' ' -f 1 | uniq
开靶机前后各扫描一次,得到靶机 ip 192.168.0.186

2 )扫描靶机上开放的端口及详细信息
sudo nmap -sVC -T4 -Pn --open -p- 192.168.0.187 --min-rate=5000

nmap 参数说明
- sV 表示扫描服务及版本信息
- sC 表示以默认的脚本进行扫描
- T4 表示控制扫描的速度
- Pn 表示不用 ping 去扫描机器
–open 表示只扫描开放的端口
- p- 表示扫描所有的端口
–min-rate 设置最小的扫描速度
检索到的有效服务如下所示:
21 ftp:可尝试进行匿名登陆下载文件
22 ssh:可尝试 ssh 爆破与一些对应版本漏洞利用
4444 krb 524 :未知端口
# FTP 匿名访问
打开 ftp://192.168.0.186/ 进行 ftp 信息收集
有一个文件夹 pub、里边有一个 jar 文件和一个 txt 文件

将 ftp 服务器里的这两个文件都下载到本地,可以在 ftp 命令行中使用 lcd 来控制本地的目录
note.txt 中提示 token 是 username 的 SHA 256 值,并且有一个邮箱是 alienum@exogenesis,即用户为 alienum

# java 代码审计
将下载后的 jar 文件,用 jd-gui 打开后查看源代码

RE 有四个量,分别是 token,option,cmd,value,以及一些继承序列化和转变为字符串、get set 方法等

Token 由 value 和 role 组成

在 Starter 即主函数中找到了一个判断角色,当角色为 astronaut 时允许进入

先将这个 jar 文件执行一下,弹出来一个登陆框,随意输入信息之后报错,识别不到 url 地址为 warzone.local

改变本地 hosts 文件,修改其 DNS 解析地址为靶机 ip

并同时将已知用户 alienum 的 SHA 256 值计算出来,此 SHA 256 值根据提示内容来说就应该是 alienum 用户的 TOKEN 值

也可以根据 terminal 的命令来计算,在 kali 下输入如下命令即可计算 SHA 256
echo -n "alienum" | shasum -a 256

6c72561d26722d88896b520da9651aa24e9ae6eca82e6c8e68af720cf21377ec
再次用 alienum 用户和他的 token 登陆发现爆了错误

在看到 java 源代码的时候,知道它执行了以个 CMd 的命令,现在我们已经可以绕过登陆并且又了 token 的值,可以写一个 java 文件执行任意命令,拿出 IDEA 其他的两个文件不变,主函数改为下面的代码

1 | package alien; |
执行之后 shell 成功反弹,拿到了 exomorph 的权限

# java 脚本解密 AES
1 | 标准化tty就不多说了 |
此用户下有两个文件,cat 发现乱码,file 检查文件属性,strings 查看内容

得到了一个密码,和一个 jar 文件,将 jar 文件拉到本地导入到 jd-gui

CrypoException 是一个普通的类

Cryptor 是一个 AES 加密文件,加密过程中会调用这个里边的方法

Main 函数定义要加密的 key,以及加密后的文件的路径

现在就用来写一个解密文件,用来将我们得到的密码 $:2Czq$(解密
1 | 先定义解密函数,通过如下方法来调用 |

再来修改主函数,密钥维持不变,修改当前的解密文件内容和解密后的文件保存路径,并且调用解密方法,最后将我们解密后的内容查看
1 | package alienum; |

运行此文件之后,即可以在自己设置的目录下找到我们的解密文件,但是这个解密之后的 txt 文件不能用 cat 来查看会显示乱码,用 file 命令确定是一个 data 类型后,用 strings 查看得到了解密后的文件内容
minotaur:m1nom1no…
scylla:scyscy…
echidna:ech1ech1…
cyclops:cyccyc…
anunnaki:nak1nak1…
anunnaki:nak1nak2…
anunnaki:nakinaki…

# sshpass 连接靶机
得到了一串用户名和密码的组合,可能是 ssh 的用户和密码
cat aliens.txt | cut -d ':' -f 1 > user.txt
cat aliens.txt | cut -d ':' -f 2 > pass.txt

检查一下用户名和密码文件是否正确


hydra -L user.txt -P pass.txt ssh://192.168.31.53 -f -t 32 -I -vV


用 ssh 成功连接到了靶机中

第一次登陆成功之后,第二次就可以用 sshpass 在命令行输入密码直接连接
sshpass -p nak1nak1.. ssh anunnaki@192.168.0.186

# java 代码分析
检索服务器文件,看到提示文件与一个 gpg 的加密文件,info.txt 提示要用–batch 来解密 gpg 文件,否则不会让输入密码

然而直接解密是可以弹出来输入密码的界面的,输入 ssh 爆破出来的密码 nak1nak1… 可以成功解密 gpg 为 jar 文件

同样的下载到本地,用 jd-gui 打开,开始阅读源码,Cryptor.class 里边定义了一个加、解密方法

Main.class 中设有盐值,并且在条件判断正确时为打印 passwd

Recources.class 里边是一些加密的字符串

编写 java 代码,进行解密,代码内容如下
1 | import java.security.NoSuchAlgorithmException; |

运行代码,成功解密出来了密码为 ufo_phosXEN

判断一下这个密码属于哪个用户,发现就是 root 用户的

-> 成功拿到了 root 权限