由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
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证书,还使用其他技术来收集子域
由于主动子域枚举是必不可少的,有两种方法可以做到这一点:
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 返回更多可能存在的上下文结果。
在生成排列组合时,用户很可能会遇到{{word}}
的值已经在输入中出现的情况。
例如:如果输入是api.scanme.sh
,字典 mywords.txt 中包含单词api。它可能产生如下结果:
api-api.scanme.sh
api.api.scanme.sh
apiapi.scanme.sh
alterx可以检测到这种极不可能的子域,并默认避免创建它们。
{{word}}
)-pp
"word=mywords.txt"
主要有 4 种安装 alterx 的方法
使用 go 从源安装
$ go install -v github.com/projectdiscovery/alterx/cmd/[email protected]
使用 pdtm
安装
$ pdtm -i alterx
使用 Docker
安装
$ docker pull projectdiscovery/alterx:latest
从github发行版本中下载: https://github.com/projectdiscovery/alterx/releases?ref=blog.projectdiscovery.io
alterx -h 命令显示 alterx 帮助页面,其中包含所有标志和每个标志的描述
Alterx接受任何有效的Url、hostnames、FQDN作为输入。
使用stdin输入运行Alterx(其实就是前面有一个命令和alterx用管道符相连)
用文件中的输入运行Alterx
使用-es标志的实时估算
Alterx DSL几乎类似于核模板变量,其中特定域(输入)的每个部分都使用一个变量表示,用户可以使用这些变量编写自己的模式
问:假设用户想为给alterx的每个输入添加后缀-2023
。
例如:输入是api.scanme.sh
,而用户希望是api-2023.scanme.sh
。
答:参考上面的默认变量表,我们可以用以下DSL格式(又称模式)表示所需的输出,{{sub}}-{{year}}.{{suffix}}
。
我们可以通过将模式作为输入传递给-p
标志来运行它,如下图所示:
由于 alterx 像所有其他 pd 工具一样支持 stdin 输入,因此它可以与 subfinder & dnsx 链接,如下图所示
在测试上述命令时,发现有44个子域名没有出现在被动子域列举结果中
提示:
虽然alterx主要是为了生成DSL和变量的排列而开发的,但它可以用于其他目的,例如:
当然pd团队还在添加新的功能,具体进度见:
https://github.com/projectdiscovery/alterx/issues/5
总之,Alterx是一个强大的主动子域列举工具,其具有可定制的模式和其他功能,比传统的暴力方法有更加显著的优势。基于alterx模式的方法返回更少的结果,同时不会遗漏任何潜在的子域名,这使得它比传统的方法更有效率
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
加入安全交流群
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读