突破神奇的Cloudflare防火墙的网络安全学习

目录
  • 背景
  • 思考
  • 验证
  • nodejs 访问
  • 深入

背景

最近碰到一个神奇的网站,在浏览器可以打开,但是通过 curl 或者 代码访问就直接 403,我估摸着这肯定是做了UA校验,于是请求的时候把浏览器的 UA 给带上,然后访问发现还是 403,不过这也难不倒我,肯定是还有校验其它的请求头,直接浏览器打开 network,把所有的请求头复制过来并且带上,确保我和浏览器在 http 协议层面的请求完全一样,这样不可能会失败了吧,然而运行完发现还是 403。

放个地址: https://pixabay.com

思考

服务端校验客户端没有什么黑魔法,因为都是通过 TCP 协议通讯,不可能存在浏览器发送一个 HTTP 报文和我发送一个同样的 HTTP 报文服务器能识别出来,既然不是校验的 HTTP 层,那只可能是在 TLS 层校验的,于是祭出wireshark抓包,看看能不能找到 TLS 握手中差异化的东西,众所周知在 TLS 握手时有一个客户端发送给服务端的Client Hello报文,很有可能就是根据它来辨别浏览器和非浏览器请求的,因为在这个报文中,客户端要告诉服务端支持的加密套件,TLS 版本等等信息,而这些信息根据客户端的实现都会有所差异,先抓个正常浏览器请求的报文看看,如下图:

然后再通过 curl 访问抓包,如下图;

可以看到两边的报文确实存在很大的差异,逐一对比排查之后发现很有可能是因为 curl 的请求报文里缺少supported_versions扩展信息导致的 403,浏览器那边在此扩展信息内容如图:

表示支持TLSv1.2TLSv1.3,而且最终握手之后的协议也是切换到了TLSv1.3,在上面两个对比图可以看到,浏览器走的是TLSv1.3,而 curl 走的是TLSv1.2,可能是一定要使用TLSv1.3才能访问成功。

验证

马上 google 了下如何指定 curl 的 TLS 版本,发现只需要加上--tlsv1.3参数就可以了,如下:

$ curl -I --tlsv1.3 'https://pixabay.com/'  \
> -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
> -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49'
HTTP/2 200
date: Fri, 22 Jul 2022 02:40:35 GMT
content-type: text/html; charset=utf-8
cf-ray: 72e8cffc18c73d5a-HKG
cache-control: s-maxage=86400
content-language: en
vary: Accept-Encoding, Cookie, Accept-Language
cf-cache-status: MISS
content-security-policy: frame-ancestors none
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
referrer-policy: strict-origin-when-cross-origin
x-frame-options: DENY
set-cookie: __cf_bm=Cy4a751rDND6kHhu.RzEr5DpqnaxRdpUxaMfNfkya0A-1658457635-0-AS1DaewDqNjWHZ/m74A88bNyEG0EFsZAwmsm/ON5QQEuh8B6XOS7PkSnhGgXPLV+LtEvzOKTy/WWHmwY63uGlD0=; path=/; expires=Fri, 22-Jul-22 03:10:35 GMT; domain=.pixabay.com; HttpOnly; Secure; SameSite=None
server: cloudflare
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400

经过反复验证,发现除了要指定tlsv1.3之外,还需要加上accept-languageuser-agent头,并且一定得是 http2 协议,三个条件缺一不可。

nodejs 访问

上面说到了一定要走 http2 协议,而现在市面上流行的 http client 基本都是只支持 http1.1,所以只能直接从基础库入手了,官方有一个http2的库,一番调教之后也是成功请求了,代码如下:

const http2 = require("http2");
function get(host, path) {
  return new Promise((resolve, reject) => {
    const session = http2.connect(`https://${host}`, {
      minVersion: "TLSv1.3",
      maxVersion: "TLSv1.3",
    });
    session.on("error", (err) => {
      reject(err);
    });
    const req = session.request({
      [http2.constants.HTTP2_HEADER_AUTHORITY]: host,
      [http2.constants.HTTP2_HEADER_METHOD]: http2.constants.HTTP2_METHOD_GET,
      [http2.constants.HTTP2_HEADER_PATH]: path,
      "user-agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50",
    });
    req.setEncoding("utf8");
    let data = "";
    req.on("data", (chunk) => {
      data += chunk;
    });
    req.on("end", () => {
      session.close();
      if (data) {
        try {
          resolve(data);
        } catch (e) {
          reject(e);
        }
      }
    });
    req.on("error", (err) => {
      reject(err);
    });
    req.end();
  });
}
(async function () {
  const data = await get("pixabay.com", "/");
  console.log(data);
})();

深入

虽然已经成功请求了,但是本着探索的精神继续深入发现 cloudflare 官方有一篇博客就是专门介绍这个 TLS 拦截技术的,链接如下:
https://blog.cloudflare.com/monsters-in-the-middleboxes/

其中有一段内容也证明了我的猜想,翻译后如下:

也就是说 cloudflare 会维护一组浏览器的 TLS 指纹,当收到一个 Client Hello 请求时,会检查这组指纹,如果匹配不上,就会拦截这个请求,这样可以拦截掉大部分不是来自浏览器的请求了。

以上就是突破神奇的Cloudflare防火墙的网络安全学习的详细内容,更多关于Cloudflare防火墙的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python爬虫如何应对Cloudflare邮箱加密

    最近写一个小爬虫,需要拿到邮箱信息,发现拿不到,也不是ajax接口.最后查资料发现是被Cloudflare加密起来了,有加密肯定有解密. 参考大佬的原话搞起来就好: 柠之漠然: 这个解密方式就是从那段 js 代码转换过来的 其中最主要的一句话 for (e = ", r = '0x' + a.substr(0, 2) | 0, n = 2; a.length – n; n += 2) e += '%' + ('0' + ('0x' + a.substr(n, 2) ^ r).toString(1

  • 原生防火墙 网络安全防御新趋势

    作者: 淮河水手 出处: 电脑报 面对不断"更新"的病毒和攻击技术,你难道不想了解新的安全技术,装备新的安全产品,以保护自己的爱机.绝密的资料吗?不要担心,"安全新秀"将会为你介绍最新的安全技术.资讯,最新的安全产品,让你永远走在安全的前沿. 对于个人用户来说,主要是依靠基于操作系统的软件网络防火墙(如天网.瑞星等)来保护自己的系统安全,免受黑客和病毒的攻击.但这种传统的安全防御方式有很多令人不满意的地方(如占用过多的系统资源.系统速度变慢.效果不理想等).最近,N

  • PowerShell小技巧之调用CloudFlare的SDK查询网站统计信息

    CloudFlare是举世闻名的CDN服务商,其免费套餐也足以满足普通用户.优化网站加载速度,缓存静态资源,分地域进行内容就近分发,抵御Ddos攻击.总之,很好,很厚道.但是在天朝许多结点被封,本身的DNS被封,和谷歌与FB一样,同是天涯沦落人(其实我们自己才是). 我在查看CloudFlare的SDK时,发现支持Windows平台支持Invoke-WebRequest,也就是PowerShell,就试着调用了下,果然可以. 比如查询网站的统计信息: $body = @{ a = 'stats'

  • Windows Server 2008配置防火墙策略详解

    目录 什么是防火墙 墙和门卫的区别 Windows Server 2008 防火墙 windows 防火墙配置 如何创建一个定制的入站规则? 什么是防火墙 防火墙一般都是指网络防火墙,是一个位于计算机和它所连接的网络之间的软件.计算机流入流出的所有网络通信均要经过网络防火墙.防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行.防火墙还可以关闭不使用的端口.而且它还能禁止特定端口的流出通信.最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信. 讲

  • 3-8 防火墙是不是保证企业网络安全

    企业有防火墙就安全了吗?现在的企业网架构安全吗?当前企业网络安全基础设施存在什么问题?新一代安全代理专用设备将是企业网络安全架构的重要组成部分,也是解决企业网面临上述问题的有效解决方法!  随着互联网飞速发展,越来越多的企业都通过网络开展业务,许多企业甚至感到离开网络,业务就无法正常运行,网络安全的重要性由此可见一斑.因此,企业不惜代价地在网络安全方面投入资金,购买防火墙.电子邮件防毒系统或桌面防毒系统,来阻止病毒泛滥和黑客攻击.在许多企业.甚至系统集成商看来,这样的网络在安全方面可以高枕无忧了

  • windows服务器修改远程登录的端口以及防火墙配置

    目录 一.修改注册表 二.设置防火墙 三.使用2121端口测试 配置环境:Windows Server Enterprise 2008 R2 64bit 一.修改注册表 进入注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]其下的”PortNumber”键值所对应的就是端口号,此处设置为2121 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentC

  • 突破神奇的Cloudflare防火墙的网络安全学习

    目录 背景 思考 验证 nodejs 访问 深入 背景 最近碰到一个神奇的网站,在浏览器可以打开,但是通过 curl 或者 代码访问就直接 403,我估摸着这肯定是做了UA校验,于是请求的时候把浏览器的 UA 给带上,然后访问发现还是 403,不过这也难不倒我,肯定是还有校验其它的请求头,直接浏览器打开 network,把所有的请求头复制过来并且带上,确保我和浏览器在 http 协议层面的请求完全一样,这样不可能会失败了吧,然而运行完发现还是 403. 放个地址: https://pixabay

  • 智能防火墙的技术特征

    防火墙已经被用户普遍接受,而且正在成为一种主要的网络安全设备.防火墙圈定一个保护的范围,并假定防火墙是唯一的出口,然后防火墙来决定是放行还是封锁进出的包.传统的防火墙有一个重大的理论假设-如果防火墙拒绝某些数据包的通过,则一定是安全的,因为这些包已经被丢弃.但实际上防火墙并不保证准许通过的数据包是安全的,防火墙无法判断一个正常的数据包和一个恶意的数据包有什么不同,而是要求管理员来保证该包是安全的.管理员必须告诉防火墙准许通过什么,防火墙则依据设置的规则来准许该包通过,这样管理员就必须承担策略错误

  • 通杀国内一些防火墙技巧

    一直以来都有一个梦想:偶要是能发现些漏洞或BUG什么的该多好啊!于是整天对着电脑瞎弄瞎研究,研究什么呢?研究如何突破防火墙(偶这里指的防火墙是软体型的个人防火墙,硬件的偶也没条件.)嘿嘿,你还别说,还真没白研究,还真给偶发现了大多数防火墙的通病.这个BUG能让我们欺骗防火墙来达到访外的目的,具体情况是怎么样的呢?请看下面的解说! 首先,我要介绍一下Windows系统特性,当一个程序运行时,它不能删除,但却能够改名!而当系统里的被保护程序遭到删除或损坏或改名时系统就会及时调用备份文件给予还原!我再

  • 找出通病 通杀国内软件防火墙的弱点

    一直以来都有一个梦想:要是能发现些漏洞或BUG什么的该多好啊!于是整天对着电脑瞎弄瞎研究,研究什么呢?研究如何突破防火墙(偶这里指的防火墙是软体型的个人防火墙,硬件的偶也没条件.)嘿嘿,你还别说,还真没白研究,还真给偶发现了大多数防火墙的通病.这个BUG能让我们欺骗防火墙来达到访外的目的,具体情况是怎么样的呢?请看下面的解说! 首先,我要介绍一下Windows系统特性,当一个程序运行时,它不能删除,但却能够改名!而当系统里的被保护程序遭到删除或损坏或改名时系统就会及时调用备份文件给予还原!我再讲

  • 防火墙是关键控制还是全网服务

    防火墙无疑是目前网络安全领域认可程度最高.应用范围最广的网络安全技术,根据CCID提供的数据,今年防火墙占整个信息安全产品市场的38.7%,略高于防病毒产品,位居第一.在这一年中,防火墙技术本身有了怎样的发展,又有什么新的思路和亮点呢? 由于防火墙技术已经发展了很长时间,技术已经比较成熟,几年来,其基本的框架和设计思路没有太多的变化,所调整的不过是对一些新应用的支持而已,在防火墙的基础功能上有了一些功能项的扩充.这样就对我们选用防火墙时提出一个问题--各家的防火墙好像都差不多,该有的功能都有

  • cmd命令行大全 dos命令 cmd命令整理

    CMD命令 net use ipipc$ " " /user:" " 建立IPC空链接 net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h: ipc$ 登陆后映射对方C:到本地为H: net use ipipc$ /del 删除IPC链

  • Windows CMD命令大全(值得收藏)

    命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一般Windows 的各种版本都与其兼容,用户可以在Windows 系统下运行DOS,中文版Windows XP 中的命令提示符进一步提高了与DOS 下操作命令的兼容性,用户可以在命令提示符直接输入中文调用文件. 在9x系统下输入command就可以打开命令行.而在NT系统上可以输入cmd来打开,在w

  • 跟我学TCP端口作用,漏洞,操作详析

    在上网的时候,我们经常会看到"端口"这个词,也会经常用到端口号,比如在FTP地址后面增加的"21",21就表示端口号.那么端口到底是什么意思呢?怎样查看端口号呢?一个端口是否成为网络恶意攻击的大门呢?,我们应该如何面对形形色色的端口呢?下面就将介绍这方面的内容,以供大家参考. 21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务. 端口说明:21端口主要用于FTP(File Transfer Protocol,文件传

  • 基于路由器的运政网VPN解决方案

    新乡市运政处及其相应的下属机构分布在新乡市四区八县,采用各自为政.分片负责的方式管理所属片区的运输市场. 近几年来,随着社会经济的不断发展及运输市场的快速增长,跨区的人员流动和车辆交易不断增多,管理信息量大大增加,分片管理的方式不再适合跨区域管理和信息共享的要求.为了解决这个问题,实现市.县.区联网以达到信息共享,我们结合新乡市运管处运政管理系统的要求及我公司的网络情况,提出了基于路由器的运政网VPN(虚拟专用网)解决方案. 1 VPN(虚拟专用网) VPN(虚拟专用网)指的是以公用开放网络(如

  • 代码整洁之道(重构)

    前言 之前也介绍过我们团队的前端项目从零开始经历8个月迭代业务代码10万行(仅为产品长期规划需求的20%),至今仍然在不断迭代的过程. 团队成员除了设计好的架构来管理这种复杂度极高的前端应用,还开始补充设计模式以及重构方面的知识,目的是为了让项目代码在不断迭代的过程中优化项目代码,保持代码的新鲜度,鲁棒性,可维护性- 让后续加入的团队新人也可以快速加入我们的产品开发中 PS:  不管对于何种语言,重构都是软件开发过程中不可或缺的一部分.如果已经了解重构的基础,可以直接跳往至文章后面的重构案例部分

随机推荐