声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
Alterx是什么
Alterx是一个使用模式的快速和可定制的子域名字典生成器,Alterx适合于主动子域名枚举
这涉及到使用被动子域名枚举结果的排列组合来创建一个单词表。alterx 使用一套用户可以自定义的模式,而不是在工具本身中硬编码模式。这使得 alterx 比其他现有的工具更有效率和效果。为了更好地理解 alterx,我们需要知道什么是主动子域名枚举,
主动子域名枚举
主动子域枚举通常是子域枚举的第二步,我们通过主动与目标互动来找到特定目标/域的子域。
这通常涉及到用一个包含子域前缀(例如:blog、admin、dashboard
等)的字典对一个域(例如:scanme.sh
)进行暴力强化(这里是指暴力出来的域名有blog.scanme.sh
, admin.scanme.sh
,dashboard.scanme.sh
),像dnsx、puredns等工具可以用于此目的。
活跃的子域名枚举是否值得?
许多人(包括之前的我),对将主动子域名枚举纳入其信息搜集这个流程感到矛盾。这主要是由于以下原因
-
噪音过多 -
得到结果很难 -
暴力强化的过程需要花费很多时间
虽然他们并非完全错误,但他们错过了一些有价值/重要的子域,这些子域不太可能反映在被动子域枚举中
而这其中最突出的原因是通配符SSL证书。这并不广为人知,但SSL证书(CT日志)是被动子域枚举源使用的最重要的来源之一。而这正是主动子域枚举变得至关重要的原因。让我们通过一个例子来理解这一点:
假设John购买了一个wildCard SSL证书 (例如:*example.com
在这种情况下,他可以托管无限的子域 (例如: blog.example.com
,secret.example.com
等),而无需为每个子域购买新的SSL证书,每次John需要一个子域,他可以只添加一个DNS记录,并为所有这些子域使用通配符SSL证书。
虽然这不会以任何方式影响他,但这些托管的子域是不太可能立即反映在被动子域枚举结果中,因为被动源 (例如:censys) 现在只包含通配符证书数据,但不实际的子域名(例如:secret.example.com
)
如果我们不想错过像secret.example.com
这样的子域名,那么我们就需要主动的子域名枚举。
附注:被动源不仅依赖于SSL证书,还使用其他技术来收集子域
为什么选择 Alterx
由于主动子域枚举是必不可少的,有两种方法可以做到这一点:
-
带有默认字典的暴力破解子域(例如:dns-Jhaddix.txt: https://github.com/danielmiessler/SecLists/blob/master/Discovery/DNS/dns-Jhaddix.txt
) -
通过生成被动子域名枚举结果的排列组合,生成该目标/组织特有的字典。
我们可以很快看出第二种方法比第一种方法的概率更高,但这并不意味着不需要第一种方法。相反,这两种方法需要相辅相成。
有很多工具可以生成子域名排列,例如:gotator、altdns、goaltdns、regulator 等,但 alterx 的不同之处在于其可以编写自定义模式。
编写自定义模式
大多数现有的工具都有硬编码的模式,也就是说,如何生成排列组合的模式/策略是硬编码的。如果一个目标遵循一个特定的惯例,就不可能定制这些工具,除非它是自己编写的。
// Consider a target returns following results from passive sub enum
auth.scanme.sh
auth-private.scanme.sh
auth-secure.scanme.sh
auth-staging.scanme.sh
通过观察上述领域,我们可以知道它遵循一种特定的模式,这在alterx DSL中可以表示为{{sub}}-{{word}}.{{suffix}}
。
用户可以使用下面的bash程序按照上述模式生成所有被动子域枚举结果的排列组合。
cat passive.txt | alterx -p "{{sub}}-{{word}}.{{suffix}}" -pp "word=words.txt"
虽然这是一个几乎所有工具都利用的简单模式,但用户可以在外面找到这样的模式。由于没有固定的方法来命名子域,这通常取决于注册/托管子域的人,但他们也会有意无意地遵循一种模式。这使得 alterx 非常强大,因为现在用户可以用简单的语法生成复杂的模式,并获得一个有限的字典,更有可能有效和高效地返回结果。
alterx还提供了一套默认但可定制的模式,以及基于广为人知/使用的模式的有效载荷,并定期更新。
## 更加详细地可以参考文末链接
patterns:
# Dash based patterns ex: api-dev.scanme.sh
- "{{word}}-{{sub}}.{{suffix}}" # dev-api
- "{{sub}}-{{word}}.{{suffix}}" # api-dev
# Dot based patterns ex: dev.api.scanme.sh
- "{{word}}.{{sub}}.{{suffix}}"
- "{{sub}}.{{word}}.{{suffix}}"
# Iteration based
- "{{sub}}{{number}}.{{suffix}}"
# replace current subdomain name
- "{{word}}.{{suffix}}"
# No Seperator (ex: devtest.scanme.sh)
- "{{sub}}{{word}}.{{suffix}}"
# add region perfix
- "{{region}}.{{sub}}.{{suffix}}"
# clusterbomb words and numbers
# - "{{word}}{{number}}.{{suffix}}"
目标感知排列
Alterx有一个标志-en , -enrich,它通过提取字母和数字单词并将其添加到特定的有效载荷中来丰富有效载荷。例如:如果下面的子域被作为输入给alterx,它会提取像staging,qa,managed这样的词并将它们添加到{{word}}
值中。
qa.scanme.sh
managed.scanme.sh
qa-staging.scanme.sh
通过这样做,alterx 返回更多可能存在的上下文结果。
今天暂时写到这里,明天继续
参考
https://github.com/projectdiscovery/alterx/blob/main/permutations.yaml
原文始发于微信公众号(迪哥讲事):Alterx:定制化子域名枚举(上)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论