本文转自先知社区: 作者:r0fus0d
前段时间,突然对ipv6这块的资产收集感兴趣,分享下实践出的技巧和方案。
最简单的方法购买提供ipv6地址的vps
比如vultr,购买时选择启用ipv6地址即可
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地址,因为如果只能通过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
必须要配置为true
导入clash配置,再次测试访问
到了这一步,还是不够,因为目前是基于域名的ipv6访问,如果要直接访问ipv6地址,你会发现还是访问不了,那么该如何做呢
首先,在浏览器中访问ipv6地址,需要在前后加括号,例如 http://[2409:8c0c:310:314::100:38]/#/login
在burp中的代理配置,需要改成socks5代理,不能是upstream proxy servers
现在在浏览器中访问ipv6地址,就可以了
运营商一般会分配 /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地址呢
经过进一步查询,得知AAAA类型的解析记录,可以实现IPv6的解析
使用dig进行查询
dig -t AAAA [域名] dig -t AAAA +short [域名]
使用 dnsx 进行查询
echo ip.sb | dnsx -silent -aaaa echo ip.sb | dnsx -silent -aaaa -resp-only dnsx -aaaa -o output.txt -l input.txt
目前各大搜索引擎基本都是支持ipv6的语法的,hunter好像不支持,可惜
fofa
https://fofa.info/
is_ipv6=true && country="CN" && port="80" && protocol="http"
quake
https://quake.360.net/
is_ipv6:"true" && body:"登录"
zoomeye
https://www.zoomeye.org/
ip:"2600:3c00::f03c:91ff:fefc:574a"
asnmap
https://github.com/projectdiscovery/asnmap
echo hackerone.com | ./asnmap -json -silent | jq
有些asn信息会有ipv6地址范围
ipv6掩码计算器
https://jennieji.github.io/subipv6/
fi6s
https://github.com/sfan5/fi6s
apt install gcc make git libpcap-dev git clone https://github.com/sfan5/fi6s.git cd fi6s make BUILD_TYPE=release
./fi6s -p 80 2001:da8:9000:e013::199:4/115 --randomize-hosts 0
/fi6s -p 80,8000-8100 2001:db8::/120
实际测试速度很快,但是掩码小于/112的情况下,扫描结果数会直线下降,就很难扫出结果
naabu
https://github.com/projectdiscovery/naabu
echo "2001:da8:9000:e013::199:4/118" | naabu -iv 6 -p 80 -rate 4000 -retries 3 -c 30 -silent -si 60
扫描速度比fi6s慢很多,但是漏报率低,精准度高.
https://zu1k.com/posts/tutorials/http-proxy-ipv6-pool/
https://v2ex.com/t/833075
https://blog.yllhwa.com/2022/09/05/利用IPV6绕过B站的反爬/
本文作者:合天网安实验室
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/194570.html