DNS迭代穷举脚本

在普通的DNS穷举中,如果使用字典进行穷举,会发现没有哪个字典能穷举完所有的域名,国外安全研究者在常年累月的DNS记录收集中发现,很多域名有大量的短主机名,并且很易记,通常为4个字符或更少,所以有了以下脚本:

#!/usr/bin/env ruby
#
## Brute code stolen form: #

@domain = 'microsoft.com'

def result?(sub)  
    results = %x(dig +noall #{sub}.#{@domain} +answer)  
    if results != ""      
        puts "============================"      
        puts "FOUND: \t#{sub}"      
        puts "============================"      
        puts "#{results}"      
        puts "============================"  
    end
      1 == 2
end

def crack_yielding(chars)  
    crack_yield(chars){ |p|      
        return p if result?(p)  
    }
end

def crack_yield(chars)  
    chars.each { |c| yield c }  
    crack_yield(chars) { |c|      
        chars.each do |x|          
            yield c + x
        end
    }
end

chars = ('a'..'z').to_a(0..9).each {|x| chars << x.to_s} 

crack_yielding(chars)

gist: https://gist.github.com/mubix/9107284

它能正常运行,但是速度比较慢,所以进行了改进。

#!/usr/bin/env ruby

#
## Brute code stolen form: #

def result?(sub)  
    puts sub    
    1 == 2
end

def crack_yielding(chars)  
    crack_yield(chars){ |p|      
        return p if result?(p)  
    }
end

def crack_yield(chars)  
    chars.each { |c| yield c }  
    crack_yield(chars) { |c|         
        chars.each do |x|          
            yield c + x
          end  
    }
end

chars = ('a'..'z').to_a(0..9).each {|x| chars << x.to_s} 

crack_yielding(chars)

开始使用

ruby brutelist.rb | parallel -j100 dig +noall {}.microsoft.com +answer

工作回显如下所示:

c.microsoft.com. 2 IN CNAME c.microsoft.akadns.net.

c.microsoft.akadns.net. 499 IN A 65.55.58.184

e.microsoft.com. 3599 IN A 191.234.1.50

g.microsoft.com. 2798 IN CNAME g.msn.com.

g.msn.com. 99 IN CNAME g.msn.com.nsatc.net.

g.msn.com.nsatc.net. 148 IN A 131.253.34.154

i.microsoft.com. 779 IN CNAME i.toggle.www.ms.akadns.net.

i.toggle.www.ms.akadns.net. 44 IN CNAME i.g.www.ms.akadns.net.

i.g.www.ms.akadns.net. 225 IN CNAME i.microsoft.com.edgesuite.net.

i.microsoft.com.edgesuite.net. 116 IN CNAME a1475.g.akamai.net.

a1475.g.akamai.net. 16 IN A 23.45.65.26

a1475.g.akamai.net. 16 IN A 23.45.65.33

m.microsoft.com. 3599 IN CNAME origin.mobile.ms.akadns.net.

origin.mobile.ms.akadns.net. 299 IN A 65.55.186.235

s.microsoft.com. 3599 IN CNAME reroute.microsoft.com.

reroute.microsoft.com. 3599 IN A 65.55.58.201

reroute.microsoft.com. 3599 IN A 64.4.11.37

cs.microsoft.com. 81 IN CNAME wedcs.trafficmanager.net.

wedcs.trafficmanager.net. 7 IN CNAME wedcseus.cloudapp.net.

wedcseus.cloudapp.net. 8 IN A 137.116.48.250

...

[via room362]

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2014-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

Openflow细节理解之—Buffer_id篇

OpenFlow消息中buffer_Id是什么? Openflow中buffer_id分别在三类消息中定义,并且起到的作用均是不同的。 ✔ Packetin消息...

3725
来自专栏码神联盟

【原创】浅谈网络协议

网络绝杀秘籍:OSI和TCP/IP是很基础但又非常重要的网络基础知识,理解得透彻对我们来说非常有帮助。一起来和小编复习下吧..... OSI七层模型: ...

3027
来自专栏我是东东强

TCP分段与IP分片的区别与联系

我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段(Segmentation),在接收时进行重组,同样IP数据报在长度超过一定值时...

2922
来自专栏QQ会员技术团队的专栏

告知你不为人知的 UDP:疑难杂症和使用

本文承接《告知你不为人知的UDP:连接性和负载均衡》文章的下文,本文主要从UDP疑难杂症、UDP协议与TCP协议高效性的对比以及UDPd的使用场合这三个方面描述...

5.4K4
来自专栏即时通讯技术

网络编程懒人入门(四):快速理解TCP和UDP的差异

对于即时通讯开者新手来说,在开始着手编写IM或消息推送系统的代码前,最头疼的问题莫过于到底该选TCP还是UDP作为传输层协议。本文延续《网络编程懒人入门》系列文...

922
来自专栏take time, save time

三十天学不会TCP,UDP/IP网络编程-TraceRoute的哲学

新年快乐,继续来部分粘贴复制我的这一系列文章啦,如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,欢迎去gitbook(https://www...

3839
来自专栏Java编程

什么是框架?

张大胖立志走上Java之路, 听了大神Bill的指点, 先学了Java SE, 把集合、线程、反射、IO、泛型、注解之类的基础知识学了一遍, 在Bill的严厉督...

3757
来自专栏desperate633

TCP/IP之ICMP协议差错报告报文(5种)网络探询报文(2组)例外情况ICMP报文封装到IP数据报中传输ICMP的应用举例: Traceroute

在互联网传输过程中,IP数据报难免会出现差错,通常出现差错,处理方法就是丢弃,但是一般,出现差错后,会发送ICMP报文给主机,告诉它一些差错信息,以及对当前的网...

1122
来自专栏互联网技术栈

OSI七层模型及对应协议

为数据链路层提供物理连接,在其上串行传送比特流,即所传送数据的单位是比特。此外,该层中还具有确定连接设备的电气特性和物理特性等功能。

4253
来自专栏Samego开发资源

简洁的UDP协议通讯 | PHP&&C | socket

3008

扫码关注云+社区

领取腾讯云代金券