menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 010-tools chevron_right 09-迭代暴力破解域名工具.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    09-迭代暴力破解域名工具.md
    4.36 KB / 2021-07-17 00:01:32
        # 迭代暴力破解域名工具
    
    原文:[http://www.room362.com/blog/2014/02/19/iterative-dns-brute-forcing/](http://www.room362.com/blog/2014/02/19/iterative-dns-brute-forcing/)
    
    翻译原则:没有原则,只是还原了文章的大概意思。
    
    对于域名的暴力破解你肯定有一个包含多个主机名的文件。在我之前的文章中提到过一些方法是用 XARGS 或者 PARALLEL(译者注:需要的自己翻作者的 Blog)。但是众所周知的是即使是字典也不太可能 “All in one”(译者注:作者这么说是瞧不起天朝的黑客们了么?),但是近些年我在做 DNS 记录收集的时候注意到一个事情,就是大多数的域名都有大量比较短的主机名,因为很容易被记住,通常是四个字符或者更少。
    
    我肯定你已经知道我即将做什么了,我想破解最多四个字符中所有可能的主机名(译者注:其实有这样的工具,比如 dnsmap、dnsenum 等)。【这段不翻译了,没意思,主要是作者没有写出想要的代码】。最后我偶然在 gist 上发现一个脚本:[https://gist.github.com/petehamilton/4755855](https://gist.github.com/petehamilton/4755855)完美解决了我的需求。
    
    为了解决我实际的需求我修改了这个脚本(仅仅是使用了 yield 方法)并且最后也是这么做的(记住 DNS 记录没有大小写之分)。
    
    注意:除非你按 CTRL-C,否则脚本不会停止运行,它会查找更长的主机名。
    
    ```
    #!/usr/bin/env ruby
    
    #
    ## Brute code stolen form: https://gist.github.com/petehamilton/4755855
    #
    
    @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)
    
    ```
    
    上面的脚本能够工作,但是很慢,我通过下面的方法加快了执行速度。
    
    ```
    #!/usr/bin/env ruby
    
    #
    ## Brute code stolen form: https://gist.github.com/petehamilton/4755855
    #
    
    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)
    
    ```
    
    它仅仅是打印所有的可能
    
    ```
    a
    b
    c
    d
    e
    f
    ...
    
    ```
    
    然后通过管道输送给 parallel 和 dig
    
    ```
    ruby brutelist.rb | parallel -j100 dig +noall {}.microsoft.com +answer
    
    ```
    
    译者注:parallel 是 Linux 下并发执行的程序
    
    最后得到下面的结果:
    
    ```
    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
    ...
    
    ```
    
    破解愉快(愉快个蛋),你可以在我的 gists 页面找到上面的两个脚本:
    
    > Domain version: https://gist.github.com/mubix/9107284
    > 
    > Parallel version: https://gist.github.com/mubix/9107276	
    
    links
    file_download