subDomainsBrute — 改进渗透测试时暴力枚举子域名的python脚本

更新日志:

  • 2015-4-2  修复了在Linux系统下进度条输出混乱的bug,填充空格以清空原始输出

渗透测试时,前期的信息收集包括主机(服务)发现。 子域名暴力枚举是十分常用的主机查找手段。

我写了一个改进的小脚本,用于暴力枚举子域名,它的改进在于:

  1. 用小字典递归地发现三级域名,四级域名、五级域名等不容易被探测到的域名
  2. 字典较为全面,小字典就包括3万多条,大字典多达8万条
  3. 默认使用114DNS、百度DNS、阿里DNS这几个快速又可靠的公共DNS进行查询,可随时修改配置文件添加你认为可靠的DNS服务器
  4. 自动筛选泛解析的域名,当前规则是: 超过10个域名指向同一IP,则此后发现的其他指向该IP的域名将被丢弃
  5. 整体速度还过得去,在我的PC上,每秒稳定扫描100到200个域名(10个线程)

以下是我扫描baidu.com得到的结果,共发现1521个域名,能找到不少内网域名和IP,效果还是非常不错的。

它甚至可以发现这样的域名: data.test.noah.baidu.com [10.36.166.17]  未经改进的工具通常是探测不到这个域名的。

扫描其他几家公司,情况一样,可以发现不少内网域名、IP(段)、甚至是十分隐蔽的后台。

这就是不做private DNS 和 public DNS隔离的坏处啊,内网的相关拓扑和服务轻易暴露给黑客了。

https://www.lijiejie.com/wp-content/uploads/2015/04/baidu.com_.txt

youku.com    tudou.com   letv.com    renren.com     tencent.com

下载脚本: https://github.com/lijiejie/subDomainsBrute

请先安装依赖的dnspython,在install目录下。

如果你有什么意见、改进,请反馈,谢谢

附运行时截图一张:

subDomainsBrute

《subDomainsBrute — 改进渗透测试时暴力枚举子域名的python脚本》上有69条评论

      1. 早点发出来吧 一直用你这个2级域名爆破 不错 更深层次的都能搞出来 速度快 我还外加了一个PKAV团队的字典在你那个TXT文件里面 速度不错

  1. 菜鸟不会运行啊 怎么安装啊 :D:domadnspython-1.12.0>python setup.pyusage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] …] or: setup.py –help [cmd1 cmd2 …] or: setup.py –help-commands or: setup.py cmd –help

  2. File “subDomainsBrute.py”, line 26 outfile = target + ‘.txt’ if not output else output; self.outfile = open(outfile, ‘w’) # won’t close manually请问会提示这个是什么原因,少了什么东西么?

      1. 我是在linux上运行的,错误原因是invalid syntax我在Windows上运行时提示ImportError: No module named lib.consle_width,我下载了那个文件,但是不知道怎么关联起来…

  3. running installrunning buildrunning build_pyerror: package directory ‘dns’ does not exist少文件?难道我少下了?

  4. 大神你好,我目前在写一个脚本,想调用你的这个subdomainbrute来进行子域名爆破,然后将结果通过awvs进行扫描。请问如果我想通过模块的方式调用,应该怎么做呢?

  5. 看过李学长的脚本,真的很棒,扫subdomain很强,但我想请教一下,如何扫描txt文件里面的一些特定域名?谢谢了。

  6. 线程数是1的时候,会提示:
    Exception in thread 0 (most likely raised during interpreter shutdown):
    请问下这是为什么啊,谢谢了

  7. 您好 这个报错怎么回事 受累看一眼

    python subDomainsBrute.py -full qq.com
    Traceback (most recent call last):
    File “subDomainsBrute.py”, line 9, in
    import gevent
    ImportError: No module named gevent

      1. 环境安装有py27和py36现在发现gevent装到了py36的lib下 如何重新安装到py27目录下 请指教 谢谢
        Requirement already satisfied: dnspython in c:\python36\lib\site-packages
        Requirement already satisfied: gevent in c:\python36\lib\site-packages
        Requirement already satisfied: greenlet>=0.4.10 in c:\python36\lib\site-packages
        (from gevent)

          1. 还有一个问题 问的我都不好意思了。。。
            E:\工具\subDomainsBrute-master>python subDomainsBrute.py -full 360.com
            [+] Validate DNS servers …
            [+] Check DNS Server 223.5.5.5 Found 4
            [+] Found 4 available DNS Servers in total
            [+] Load next level subs …
            [+] Load sub names …
            [ERROR] Names file not exists: ull

  8. mac os x系统,不知道咋回事 希望解答

    ➜ subDomainsBrute git:(master) ✗ ./subDomainsBrute.py baidu.com –full
    Traceback (most recent call last):
    File “./subDomainsBrute.py”, line 10, in
    import gevent
    ImportError: No module named gevent

  9. G:\Github\subDomainsBrute>subDomainsBrute.py waitalone.cn
    [+] Validate DNS servers
    [+] Server 8.8.4.4 Found 0
    [+] 0 available DNS Servers found in total
    [ERROR] No DNS Servers available!

    一直是这种[ERROR] No DNS Servers available! 不知道为什么。 windows和linux都是这样。

  10. 不知道你这扫描域名是否存活是怎么做的,速度确实很快,但是我用相同的字典,用aquatone(太慢)比较,subDomainsBrute只能扫出几个域名,aquatone能扫出八十多个。我的执行命令是python subDomainsBrute.py xxx.com,请问再网络或者配置方面有没有其他要注意的?

  11. 你好,我发现一个问题,公司网址和家里网址两种情况去扫子域名,家里网址得到的子域名很少,公司的比较多,不知道是什么问题

  12. root@xxxx:/opt/Web_tools/subDomainsBrute# python subDomainsBrute.py meicloud.com –full
    SubDomainsBrute v1.2
    https://github.com/lijiejie/subDomainsBrute

    [+] Validate DNS servers
    [+] Server 182.254.116.116 Found 4
    [+] 4 DNS Servers found
    [+] Run wildcard test
    any-sub.meicloud.com 202.104.30.197

    # 想问下在跑这个域名时程序中断的原因。

  13. 我想问下
    File “subDomainsBrute.py”, line 206
    print ‘any-sub.%s\t%s’ % (domain.ljust(30), ips)
    ^
    SyntaxError: invalid syntax
    这个怎么解决呢 大哥

  14. 增加一个排除泛解析ip的功能吧,比如某个大量泛解析到1.1.1.1,设置后所有解析指向1.1.1.1的子域名都不显示,像dnsmap这种都有类似功能

  15. wildcard_test(domain, level=1)
    你好,我感觉这个函数并没有实际意义,不知道设计这个函数的作用是什么?

  16. lijiejie,你好,能否告诉我运行的python版本是多少呢?我在win上运行一直报错,目前我试过2.7和3.8的版本

  17. 想问一下最适合的版本是多少?我的版本3.8报错。
    File “subDomainsBrute.py”, line 206
    print ‘any-sub.%s\t%s’ % (domain.ljust(30), ips)
    ^
    SyntaxError: invalid syntax

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注