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 日
添加新评论

已有 2 条评论
  1. Saul Goodman Saul Goodman

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

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

996.icu 996.icu