MENU

通过zmap和zgrab2扫描cloudflare的反向代理

cloudflare对于来自中国的流量一直由到美国的各个colo而不是周边国家,之前在censys和shodan发现很多返回cloudflare错误页面但是不属于cloudflare的ip,通过/cdn-cgi/trace可以看出这些ip正在反向代理cloudflare随后做了一个通过censys/shodan api抓取反代ip并进行http验证的项目用于一些特殊需求,但这个方法会抓取大量无效ip,最近有ssl需求于是便研究了一下如何自己扫描.

准备

  • 一个用于扫描的vps
  • 一份ip列表
  • 一个使用cloudflare代理的http和https都能正常访问的网站(下面称之为检测站
  • 脑子

如果条件允许,vps使用中国内陆的,如果只扫周边国家(如香港/澳门/台湾/日本)使用一般vps就好,大概率是不会收到abuse的,系统选择ubuntu18+,当然也可以选择其它系统,下面操作可自行调整
ip列表可以在ipv4.fetus.jp找到,如果准备扫全球可以不要,这里只介绍按区域扫描.
检测站的作用是扫描https时使用的,可以不是自己的,但是里面需要有一个独一无二的关键词用来确保https返回的内容过滤
脑子是必需品,如果没有请关闭本页面.

整个扫描顺序是zamp扫开80的ip->zgrab2扫http返回内容->根据内容过滤不属于cloudflare的ip->zgrab2扫描https返回内容->根据内容过滤https不正常反代的ip

安装zmap和zgrab2

zmap只需要通过apt update && apt install zmap -y安装即可
zgrab2需要自己编译,首先安装golang

wget https://go.dev/dl/go1.19.3.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
export PATH=$PATH:/usr/local/go/bin

然后拉取zgrab2的代码进行编译,其中第一行安装git和make,如果机器已自带可以省略.

apt install git make -y
git clone https://github.com/zmap/zgrab2.git
cd zgrab2
make
cp zgrab2 /usr/local/bin

扫描和过滤http反代

以扫描中国的http反代为例

apt install jq -y
wget https://ipv4.fetus.jp/cn.txt
zmap -w /root/cn.txt -p 80 | zgrab2 http | grep "cf_ray"| jq '.ip' | xargs -i echo "{},blog.ni-co.moe" 
 > cf80.txt

jq的用途是处理json数据
这里将zamp扫描和zgrab2扫描http放在一起了,zamp扫描到的ip直接传递给zgrab2进行扫描,zgrab2的扫描结果通过grep进行过滤,将返回内容带有关键词cf_ray的返回结果通过jq提取ip然后传递给xargs拼接域名保存.
其中拼接的域名是检测站的域名

扫描和过滤https反代

通过http扫描后得到所有http正常的反代ip列表,然后对这些ip进行https检测

cat cf80.txt | zgrab2 tls | grep "GTS CA 1P5" | jq '.ip' > cf.txt

先解释下这里为什么grep用的是GTS CA 1P5,zgrab2返回的json里面除了正文还包含头部信息和证书信息,我的这个站点使用的是gts证书,所以通过证书信息也可以在一定程度上确定https是正确反代的,如果要100%保证正确,还是需要在检测站的正文里添加一句独一无二的字符串,然后使用此字符串作为特征进行过滤.
当上面的命令执行完之后cf.txt内就是http/https反代正常的ip了
用途不进行叙述了.

注意

  • ip并不一定永远可用,所有者有可能对其进行更改
  • 如果网站使用这些反代ip那么将得不到用户的真实ip
  • 部分ip在使用一段时间之后可能会出现Edge IP Restricted,这是cloudflare的规则,没有解决办法,只能不用这个ip
  • 使用这些ip的网站可能会被cloudflare清退
最后编辑于: 2022 年 11 月 16 日
添加新评论

已有 15 条评论
  1. 呜呜呜 呜呜呜

    INFO[0000] started grab at 2023-11-27T05:03:36+01:00
    INFO[0000] finished grab at 2023-11-27T05:03:36+01:00
    {"statuses":{},"start":"2023-11-27T05:03:36+01:00","end":"2023-11-27
    T05:03:36+01:00","duration":"23.207634ms"}
    怎么结束这么快呀

    1. @呜呜呜去除zgrab2命令看前面zmap命令是不是有什么错误,如果前面是cat则看列表是否是空的

  2. 你好 你好

    我有一个优选的IP,本地测速能到500M,但是我把保函这个IP地址的IP段放进去跑,跑出来的结果里边没有那个IP

    1. @你好可以直接用zgrab看下返回内容

  3. 你好 你好

    2:10 95% (7s left); send: 26636914 done (207 Kp/s avg); recv: 27605 295 p/s (212 p/s avg); drops: 1.64 Kp/s (1.57 Kp/s avg); hitrate: 0.10%
    Jul 15 13:32:08.620 [WARN] monitor: Dropped 775 packets in the last second, (205845 total dropped (pcap: 205845 + iface: 0))
    2:11 96% (6s left); send: 26636914 done (207 Kp/s avg); recv: 27605 0 p/s (210 p/s avg); drops: 775 p/s (1.57 Kp/s avg); hitrate: 0.10%
    Jul 15 13:32:09.621 [WARN] monitor: Dropped 739 packets in the last second, (206585 total dropped (pcap: 206585 + iface: 0))
    2:12 97% (5s left); send: 26636914 done (207 Kp/s avg); recv: 27605 0 p/s (208 p/s avg); drops: 739 p/s (1.56 Kp/s avg); hitrate: 0.10%
    2:13 97% (4s left); send: 26636914 done (207 Kp/s avg); recv: 27900 294 p/s (209 p/s avg); drops: 2 p/s (1.55 Kp/s avg); hitrate: 0.10%

    扫描的时候一直有这个警告弹出

    1. @你好使用-B限制速度或增加ram和cpu

  4. 你好 你好

    博主你好,你这个扫描方案又没有,进一步升级的方案

  5. lazysheep lazysheep

    大佬我的提示
    Jun 22 15:27:53.209 [INFO] zmap: output module: csv
    Jun 22 15:27:53.210 [INFO] csv: no output file selected, will use stdout
    0:00 0%; send: 0 0 p/s (0 p/s avg); recv: 0 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hitrate: 0.00%
    zgrab2: command not found
    这是啥原因@(小乖)

    1. @lazysheepzgrab2: command not found

  6. 叶

    大佬问一下怎么扫全球呢?

  7. 大佬,为何扫中国区,443,80端口,都只有江西的ip可用,其他地区的ip扫不出来@(小乖)

    1. @zhanyuan很正常,不是每个人都会反向代理cloudflare,而且考虑到扫描流量经过gfw可能会被过滤以及域名未备案的阻断,少或者没有都是正常的.

  8. Saul Goodman Saul Goodman

    这样是不是也是不安全的,毕竟流量会经过反代的服务器(谁也不知道反代服务器会做什么,比如既然无法解密TLS,统计路径信息等)

    1. @Saul Goodmanhttp不排除被统计和修改的可能,https的话没有办法知道内容和path

996.icu 996.icu