靶机下载地址: 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 权限
