Taken
使用AWS未关联的弹性IP接管子域,并提供有效的子域接管概念验证(POC)。
通过子域接管可以做什么 -
- 窃取Cookie,如果Cookie的域属性设置为被劫持的子域。
- 发起CORS请求,如果Access-Control-Allow-Origin设置为被劫持的子域。
- OAuth重定向获取授权码,如果被劫持的子域位于白名单中。
- 利用CSP策略进行XSS,如果CSP策略将该子域加入白名单。
- 点击劫持,如果X-Frame-Options将该子域加入白名单。
- 伪造邮件,如果SPF记录将该子域加入白名单。
自动化思路如下
- 获取子域。
- 进行反向查询,仅保存AWS IP。
- 每分钟重启EC2实例,每次重启后公网IP会轮换。将其与已有的子域IP列表匹配,即可获得有效的子域接管POC。
- 一旦接管子域,立即通过电子邮件通知。
引用
If you use this software in your Research papers, articles etc.
@software{Agrawal_Taken_AWS_Subdomain_2020,
author = {Agrawal, Vaibhav},
month = oct,
title = {{Taken: AWS Subdomain TakeOver at Scale}},
url = {https://github.com/In3tinct/Taken},
version = {1.0},
year = {2020}
}
先决条件
使用的技术/框架
构建工具
功能
- 收集子域并进行反向查询,仅定位AWS IP。
- 通过重启EC2实例轮换IP,直到匹配列表中的某个IP。
- 匹配后,将该IP/主机添加到白名单文件中,避免再次轮换,并发送电子邮件通知。
详细使用步骤
- 创建一个t2.medium实例(攻击机),免费24*365。
- 在一个或多个区域创建5-10个t3a.nano实例,可能成本最低(数量越多机会越大,但费用也会增加,大约10台机器每月60美元),需要5分钟,安全组仅开放给您的公网IP。
- 创建AWS API密钥以启停实例。
- SSH登录到您的攻击机。
- 安装邮件通知工具SSMTP。
https://www.digitalocean.com/community/questions/how-to-send-emails-from-a-bash-script-using-ssmtp
- 安装subfinder和sublist3r.py工具用于收集子域。(或您想要的任何其他工具,但需要将其添加到子域收集脚本中)
按照以下步骤进行设置
https://github.com/aboul3la/Sublist3r
https://github.com/projectdiscovery/subfinder
- 克隆Taken仓库并打开一个screen会话以运行子域收集脚本。
如果您不了解如何使用screen会话 - https://linuxize.com/post/how-to-use-linux-screen/
- 创建一个包含所有目标域名的文本文件,将其保存为"alldomains"放在同一目录中,然后运行子域收集脚本。该脚本使用subfinder和sublist3r.py。它将生成一个或多个域名的所有子域列表,每行格式为"subdomain:IP"。这些数据后续用于匹配和通知。
- 打开另一个screen会话,并在该会话中导出AWS凭证。
导出AWS密钥:
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE 您的AWS账户的访问密钥。
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 您的AWS账户的秘密访问密钥。
在另一个screen会话中运行接管脚本。您也可以为每个区域分别运行不同的screen会话(参见下面的截图)。
理由 - AWS中的每个区域都有不同的关联IP子网。要瞄准位于美国的公司,他们很可能在美国的某个区域运行资产,但也可能在其他区域如爱尔兰、法兰克福等地拥有资产。因此,与其在一个区域运行10台实例,不如在总部所在的区域运行5台,另外5台放在不同区域。
Screen会话示例-
邮件通知 -

接管子域后下一步 -
SSH登录到该主机,创建一个简单的HTML文件并启动Python服务器,即可获得一个可运行的POC。
(我计划在下一个版本中自动化此过程)
批量运行
我爬取了HackerOne和Bugcrowd上的所有公开项目以及前500家SaaS/Forbes公司,收集了它们的子域并开始攻击。
在24小时内,我成功接管了3个子域。共在3个不同区域运行10台实例。成功率高度依赖于运行的实例数量。
由于使用该脚本,24小时内可轮换约1440个IP,因此10台实例在24小时内可覆盖约14400个IP。
参考
用于收集子域的工具。
https://github.com/projectdiscovery/subfinder
https://github.com/aboul3la/Sublist3r
贡献
未来扩展
- 使用同一脚本创建EC2实例。
- 增加使用AWS Beanstalk自动部署HTTP服务。
许可证
GNUV3 © [In3tinct]