通过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清退
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"}
怎么结束这么快呀
去除zgrab2命令看前面zmap命令是不是有什么错误,如果前面是cat则看列表是否是空的
我有一个优选的IP,本地测速能到500M,但是我把保函这个IP地址的IP段放进去跑,跑出来的结果里边没有那个IP
可以直接用zgrab看下返回内容
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%
扫描的时候一直有这个警告弹出
使用-B限制速度或增加ram和cpu
博主你好,你这个扫描方案又没有,进一步升级的方案
大佬我的提示
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
这是啥原因@(小乖)
zgrab2: command not found
大佬问一下怎么扫全球呢?
去掉-w参数
大佬,为何扫中国区,443,80端口,都只有江西的ip可用,其他地区的ip扫不出来@(小乖)
很正常,不是每个人都会反向代理cloudflare,而且考虑到扫描流量经过gfw可能会被过滤以及域名未备案的阻断,少或者没有都是正常的.
这样是不是也是不安全的,毕竟流量会经过反代的服务器(谁也不知道反代服务器会做什么,比如既然无法解密TLS,统计路径信息等)
http不排除被统计和修改的可能,https的话没有办法知道内容和path