go build brute.go
$ ./brute -t chaitin.cn
和同事讨论到用 python 写 dns 爆破太慢,提了几个思路:
- 用 go 优化并发
- 实现简单的 dns 协议,替代系统提供的 dns 解析
- 在同一个 dns 查询请求里尝试放入多条记录(but 这个由于 dns 放大攻击导致大部分 dns 服务器都禁用了,保留了代码,但是默认没启用)
测试结果:
在并发和带宽合理的情况下,每秒的查询数量在 1500 左右。
$ ./brute -t chaitin.cn
Total: 17576
Result: 2
Error: 2 timeout
cost: 13 seconds
问题:
由于用 udp 直接实现了 dns 查询,因此丢包的现象比较严重,如果在意的话可以加上 retry 机制
$ ./brute -h
Usage of ./brute:
-a string
Brute Alphabet (default "abcdefghijklmnopqrstuvwxyz")
-l int
Sub Domain Name Length (default 3)
-o string
Output File (default "output.txt")
-t string
Target You Want To Bruteforce