Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
tko-subs — 一个可帮助检测并接管具有失效DNS记录的子域的工具 | Kitploit
工具/GitHubGitHub/anshumanbh/tko-subs
漏洞分析渗透测试云安全子域名枚举DNS 分析
GitHubanshumanbh/tko-subs

tko-subs

一个可帮助检测并接管具有失效DNS记录的子域的工具

查看仓库
7761375年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

tko-subs

该工具允许:

  • 检查子域名是否可被接管,因为其具有:

    • 一个指向CMS提供商(Heroku, Github, Shopify, Amazon S3, Amazon CloudFront等)的悬空CNAME,可以被接管。
    • 一个指向不存在的域名的悬空CNAME。
    • 一个或多个错误/拼写错误的NS记录,指向一个可以被攻击者接管的名称服务器,从而获得子域名DNS记录的控制权。
  • 通过提供标识符 -takeover 实际接管这些子域名。目前,仅支持接管Github Pages和Heroku应用,默认情况下接管功能是关闭的。

  • 通过providers-data.csv文件指定您自己的CMS提供商并进行检查。在该文件中,您需要指定CMS名称、其CNAME值、要查找的字符串以及是否仅通过HTTP工作。请看其中的示例。

免责声明:不要做混蛋!

无需多言,请非常小心地使用此工具。作者不会对任何后果负责。默认情况下,此工具不允许接管子域名。如果您想这样做,只需指定-takeover标志。

先决条件

我们需要安装GO。拥有GO后,只需输入 go get github.com/anshumanbh/tko-subs 即可下载工具。工具下载后,输入 tko-subs -h。

接下来我们需要获取以下信息:

  • Github的个人访问令牌 - 确保此令牌具有创建仓库、引用、内容等权限。您可以在此处创建令牌 - https://github.com/settings/tokens
  • Heroku用户名和API密钥
  • Heroku应用名称 - 您可以按照此处的说明在Heroku上创建一个静态应用,并在其主页上显示任意内容 - https://gist.github.com/wh1tney/2ad13aa5fbdd83f6a489。创建该应用后,在标志中使用该应用名称(见下文)。我们将使用该应用来接管域名(指向另一个Heroku应用的悬空CNAME)。

注意 - 仅当您想要接管子域名时才需要这些值。默认情况下不需要。

构建所需的Go包。

root@kitploit:~
go get github.com/bgentry/heroku-go
go get github.com/gocarina/gocsv
go get github.com/google/go-github/github
go get github.com/olekukonko/tablewriter
go get golang.org/x/net/publicsuffix
go get golang.org/x/oauth2
go get github.com/miekg/dns

如何运行?

安装好所有内容后,cd进入目录并输入: tko-subs -domains=domains.txt -data=providers-data.csv -output=output.csv

如果您还想进行接管,命令为: tko-subs -domains=domains.txt -data=providers-data.csv -output=output.csv -takeover -githubtoken=<github-token> -herokuusername=<heroku-username> -herokuapikey=<heroku-api-key> -herokuappname=<heroku-app-name>

如果只想检查单个域名,输入: tko-subs -domain <domain-name>

如果只想检查多个域名,输入: tko-subs -domain <domain-name-1>,<domain-name-2>

默认情况下:

  • domains 标志设置为 domains.txt
  • data 标志设置为 providers-data.csv
  • output 标志设置为 output.csv
  • takeover 标志未设置,因此默认不进行接管
  • domain 标志未设置,因此它将始终检查 domains.txt 文件中提到的所有域名。如果指定了 domain 标志,则仅检查该域名并忽略 domains.txt 文件(即使存在)
  • threads 标志设置为 5

因此,直接运行 tko-subs 将使用上述默认值运行。

providers-data.csv 的格式是什么?

name,cname,string,http

  • name: 提供商名称(例如 github)
  • cname: 用于将网站映射到提供商内容的CNAME(例如 github.io)
  • string: 针对未认领子域名返回的错误消息(例如 "There isn't a GitHub Pages site here")
  • http: 是否使用http(而非默认的https)连接站点(true/false)

输出格式是什么?

Domain,CNAME,Provider,IsVulnerable,IsTakenOver,Response

  • Domain: 被检查的域名
  • CNAME: 域名的CNAME
  • Provider: 发现该域名正在使用的提供商
  • IsVulnerable: 是否发现该域名存在漏洞(true/false)
  • IsTakenOver: 该域名是否被接管(true/false)
  • Response: 用于检查子域名的消息

如果发现死DNS记录,则 Provider 留空。 如果发现异常名称服务器,则 Provider 和 CNAME 留空。

底层原理?

这将遍历 subdomains.txt 文件中的所有域名(使用GoRoutines并发执行),并:

  • 检查它们是否有异常权威名称服务器;如果有,我们标记该域名为易受攻击。
  • 检查它们是否有悬空CNAME记录(即死DNS记录);如果有,我们标记该域名为易受攻击。
  • 如果子域名通过了这两项测试,它会尝试curl获取响应,然后检查该响应是否与providers-data.csv文件中提到的任何数据提供商字符串匹配。
  • 如果响应匹配,我们标记该域名为易受攻击。
  • 接下来,根据是否指定了takeover标志,它将尝试接管易受攻击的子域名。
  • 例如,要接管一个Github Page,代码将:
    • 创建一个仓库
    • 在该仓库中创建一个分支 gh-pages
    • 将 CNAME 和 index.html 上传到该仓库的 gh-pages 分支。其中,CNAME 包含需要接管的域名。index.html 包含文本 This domain is temporarily suspended,该文本将在域名被接管后显示。
  • 类似地,对于Heroku应用,代码将:
    • 将悬空域名添加到您的Heroku应用(您将在.env文件中提供其名称)
  • 就这样!

未来工作

  • 从用户或.env文件中获取CMS名称和正则表达式,然后自动将其挂接到工具中以便能够找到。 已完成
  • 添加对更多CMS的接管
  • 添加更多CMS提供商

致谢

  • 感谢Luke Young (@TheBoredEng) 在go-github库方面提供的帮助。
  • 感谢Frans Rosen (@fransrosen) 帮助我理解某些接管所需的技术细节。
  • 感谢Mohammed Diaa (@mhmdiaa) 花时间实现提供商数据功能并推动代码进展。
  • 感谢high-stakes 进行了亟需的代码更新。

变更日志

5/27

  • 添加了新的Dockerfile,减小了镜像大小
  • 添加了示例domains.txt文件用于测试
  • mhmdiaa 添加了死DNS接管的逻辑。更新了文档。非常感谢!

11/6

  • high-stakes 提交了一个PR,包含大量新代码,修复了几个bug并使代码更简洁

9/22

  • 添加了检查单个域名的可选标志
  • 使安装和运行更容易

6/25

  • 通过实现goroutines使代码更快
  • 不再使用Golang的net包的LookupCNAME函数进行检查,而是直接使用dig,因为这样可以同时获得死DNS记录。更大的攻击面!!
下载工具