前言
前段时间,突然对ipv6这块的资产收集感兴趣,分享下实践出的技巧和方案。
1. 如果目标有 ipv6 资产,你如何访问
获得ipv6地址
最简单的方法购买提供ipv6地址的vps
vultr
比如vultr,购买时选择启用ipv6地址即可
aws
aws的机器默认没有ipv6地址分配,要按如下步骤来开启
- vpc添加ipv6 CIDR
- vpc子网分配ipv6 CIDR块
- 创建ec2机器时选择自动分配ipv6 ip
这个时候ip a就可以看到ipv6地址了
但是到这一步你会发现获取到了ipv6地址,但无法访问任何ipv6站点,这是因为这个vpc的路由表默认没有ipv6出口路由,手动配置如下
华为云
华为云和aws的步骤类似,现在vpc的subnet中开启ipv6功能,然后在创建ecs时选择分配ipv6地址
阿里云
类似,vpc配置开启ipv6,创建ecs时选择ipv6的子网,创建完毕需要开通ipv6公网带宽
然后在开启的机器上运行以下命令,获取ipv6地址
wget https://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/ipv6/rhel/ecs-utils-ipv6
chmod +x ./ecs-utils-ipv6
./ecs-utils-ipv6
开启ipv6公网带宽
如何让客户端访问ipv6站点
临近饭点,老吴问我如何让自己机器访问ipv6地址,因为如果只能通过vps进行访问,那一些图形化操作无法实现。
想了想,确实有道理,简单分析下,如果要让客户端访问到ipv6机器,那么要么客户端获取公网ipv6地址,要么走一些ipv6代理服务,比如https://proxyline.net/zh-hant/ipv6/。
获取公网ipv6地址不太可行,ipv6代理服务没必要,能自建干嘛要买。看网上文章里讲socks5,不用管客户端是ipv4还是ipv6协议,只要服务端是ipv6协议就可以让客户端畅通无阻的在ipv6环境下进行通讯。
那么我可以复用之前的clash代理池设计,只要节点端可以通ipv6,应该就可以了。
先看能不能访问
- ipv6.ip.sb
- ip.sb
正常来讲,无法访问。
下面配置一个aws服务器起ssr
先按照开始的教程为aws配置ipv6子网,确保机器可以通ipv6
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
起ssr服务
apt-get update
apt-get install -y shadowsocks-libev
systemctl status shadowsocks-libev
vim /etc/shadowsocks-libev/config.json
{
"server":["::0","0.0.0.0"],
"server_port":60001,
"method":"chacha20-ietf-poly1305",
"password":"1234567890",
"mode":"tcp_and_udp",
"fast_open":false
}
service shadowsocks-libev restart
# service shadowsocks-libev start
service shadowsocks-libev status
ps ax | grep ss-server
ss -tnlp
这里密码我随便设置了,如果生产环境不要用弱口令
启动ssr后,写一下clash配置
mixed-port: 64277
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
ipv6: true
external-controller: 127.0.0.1:9090
routing-mark: 6666
hosts:
profile:
store-selected: false
store-fake-ip: true
dns:
enable: false
listen: 0.0.0.0:53
ipv6: true
default-nameserver:
- 114.114.114.114
- 8.8.8.8
enhanced-mode: fake-ip # or redir-host (not recommended)
fake-ip-range: 198.18.0.1/16 # Fake IP addresses pool CIDR
nameserver:
- 114.114.114.114 # default value
- 8.8.8.8 # default value
- tls://dns.rubyfish.cn:853 # DNS over TLS
- https://1.1.1.1/dns-query # DNS over HTTPS
- dhcp://en0 # dns from dhcp
# - '8.8.8.8#en0'
proxies:
- name: "1.14.5.14"
type: ss
server: 1.14.5.14
port: 60001
cipher: chacha20-ietf-poly1305
password: "1234567890"
proxy-groups:
- name: "test"
type: load-balance
proxies:
- 1.14.5.14
url: 'http://www.gstatic.com/generate_204'
interval: 2400
strategy: round-robin
rules:
- DOMAIN-SUFFIX,google.com,test
- DOMAIN-KEYWORD,google,test
- DOMAIN,google.com,test
- GEOIP,CN,test
- MATCH,test
- SRC-IP-CIDR,192.168.1.201/32,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- DOMAIN-SUFFIX,ad.com,REJECT
1.14.5.14是我这台aws的地址,60001是监听端口。这不是重点,重点在于2行ipv6: true
ipv6: true
dns:
enable: false
listen: 0.0.0.0:53
ipv6: true
必须要配置为true
导入clash配置,再次测试访问
到了这一步,还是不够,因为目前是基于域名的ipv6访问,如果要直接访问ipv6地址,你会发现还是访问不了,那么该如何做呢
- 首先,在浏览器中访问ipv6地址,需要在前后加括号,例如 http://[2409:8c0c:310:314::100:38]/#/login
- 在burp中的代理配置,需要改成socks5代理,不能是upstream proxy servers
现在在浏览器中访问ipv6地址,就可以了
2. 如果你ipv6地址被封了,如何更改
云服务器ipv6地址绑定(vultr可行,aws不可行)
运营商一般会分配 /64 甚至 /60 的地址,有相当多的 ipv6 可以用
我们可以访问完一次,用命令直接改一下本机对应的 ipv6 地址就好了,譬如只改地址后 64 bits
ip a 查看,vultr给了如下的ipv6地址
2401:c080:1400:6787:5400:4ff:fe3b:622b/64
2401:c080:1400:6787::/64
# 添加路由
ip route add local 2401:c080:1400:6787::/64 dev enp1s0
# 为了能够绑定任意 IP,我们需要开启内核的 ip_nonlocal_bind 特性:
sysctl net.ipv6.ip_nonlocal_bind=1
# NDP
# 类似于 IPv4 中 ARP 协议的作用,IPv6 中需要使用 ND 协议来发现邻居并确定可用路径。我们需要开启一个 ND 代理:
# 安装 ndppd
apt install ndppd
# 编辑 /etc/ndppd.conf 文件:
vim /etc/ndppd.conf
route-ttl 30000
proxy enp1s0 {
router no
timeout 500
ttl 30000
rule 2401:c080:1400:6787::/64 {
static
}
}
# 启动 ndppd
systemctl start ndppd
# 接下来你可以验证一下了,用 curl --interface 指定出口 IP:
curl --interface 2401:c080:1400:6787::1 ipv6.ip.sb
curl --interface 2401:c080:1400:6787::2 ipv6.ip.sb
curl --interface 2401:c080:1400:6787::3 http://icanhazip.com/
后来在看massdns项目的时候发现作者在freebind项目里实现了类似的需求
- https://github.com/blechschmidt/freebind
测试下,先在机器上安装
git clone https://github.com/blechschmidt/freebind.git
cd freebind
apt install libnetfilter-queue-dev
make install
# 添加路由
ip -6 route add local 2a00:1450:4001:81b::/64 dev enp1s0
# 访问测试
freebind -r 2a00:1450:4001:81b::/64 wget -qO- ipv6.wtfismyip.com/text
那么网站方如何防御呢?
一种应对方式是直接 ban /64,/56乃至 /48
现在我们有了ipv6条件,那么接下来要找目标
如何获得目标的ipv6地址呢
3. 如何收集目标ipv6资产
域名AAAA查询
经过进一步查询,得知AAAA类型的解析记录,可以实现IPv6的解析
使用dig进行查询
dig -t AAAA [域名]
dig -t AAAA +short [域名]
使用 dnsx 进行查询
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
0
通过搜索引擎查找
目前各大搜索引擎基本都是支持ipv6的语法的,hunter好像不支持,可惜
fofa
- https://fofa.info/
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
1
quake
- https://quake.360.net/
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
2
zoomeye
- https://www.zoomeye.org/
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
3
ASN查找
asnmap
- https://github.com/projectdiscovery/asnmap
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
4
有些asn信息会有ipv6地址范围
ipv6地址扫描
ipv6掩码计算器
- https://jennieji.github.io/subipv6/
fi6s
- https://github.com/sfan5/fi6s
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
5
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
6
实际测试速度很快,但是掩码小于/112的情况下,扫描结果数会直线下降,就很难扫出结果
naabu
- https://github.com/projectdiscovery/naabu
curl ipv6.ip.sb
# 能够正确获取到ipv6地址,这个机子就可以用
7
扫描速度比fi6s慢很多,但是漏报率低,精准度高.
Source & Reference
- https://zu1k.com/posts/tutorials/http-proxy-ipv6-pool/
- https://v2ex.com/t/833075
- https://blog.yllhwa.com/2022/09/05/利用IPV6绕过B站的反爬/
还没有评论,来说两句吧...