在渗透测试评估期间,某些活动需要一定程度的自动化,例如从 LinkedIn 等网站抓取网页以收集可用于社会工程活动、密码喷洒登录门户或测试时盲注的有效员工姓名列表网络应用程序。但是,从单个源 IP 地址执行这些活动可能会导致在测试期间被拦截。
为了克服这个问题,我们需要足够频繁地轮换 IP 以避免检测。我们可以使用 AWS API Gateway 等服务,它通过网关代理我们的流量,而不是直接将其发送到目标。当通过网关发出请求时,它会从 AWS 的大型池中选择一个 IP 地址。由于 AWS 拥有全球基础设施,因此每个请求的这些 IP 可能会有所不同。
有许多工具可以利用 AWS API Gateway;在本博客中,我们将研究Fireprox。它是由Black Hills Information Security的Mike Felch创建的开源工具。Fireprox 会动态创建临时直通代理,每次通过代理发出请求时,目标服务器的 IP 地址都会有所不同。
创建亚马逊账户
要为 Fireprox 设置直通代理,我们需要创建一个 AWS 帐户。首先,请访问AWS 网站:https://aws.amazon.com/并单击"创建 AWS 账户"。填写帐户信息,包括电子邮件地址、强密码和所需的帐户名。


在下一页上,选择账户类型(个人或企业),输入联系信息,然后选中复选框以同意 AWS 客户协议。

之后,输入账单信息并通过电话或短信验证您的身份。

然后,我们选择支持计划 - 基本、开发人员或商业计划。一般来说,AWS 提供免费套餐,允许用户试用其服务。3 个主要产品是:
•**12 个月免费:**注册 AWS 后的前 12 个月内可以免费使用这些服务。之后,您将需要按照标准的即用即付费率付费。
•始终免费:只要您不超出免费套餐限制,某些 AWS 服务就完全免费。
•**免费试用:**某些服务提供持续时间较短的免费试用,例如一个月左右。
基本计划对于这个功能来说已经足够了。API Gateway 的免费套餐每月为 REST 和 HTTP API 提供多达 100 万次 API 调用。

完成注册过程后,我们登录并访问" AWS管理控制台"即可开始使用AWS服务。


配置AWS API网关
创建 AWS 账户后,导航至 AWS 控制台上的"服务 "磁贴图标。从那里,打开"身份和访问管理仪表板(IAM) "。

在 IAM 仪表板中,从侧面菜单中选择"用户组 ",然后单击"创建组"。

输入组名称并向下滚动到"附加权限策略 - 可选 "以选择策略类型AmazonAPIGatewayAdministrator策略,然后单击"创建用户组"。


之后,我们将创建一个新用户并将其添加到"FireProx-Testing"组中。单击"创建用户"并输入用户名信息。


对于"设置权限 ",选择"将用户添加到组 "并将其添加到Fireprox-Testing组。然后,在单击"创建用户"之前检查用户名和组。


创建用户成功后,点击该用户即可查看其信息。
要生成访问密钥,请单击"创建访问密钥"。在访问密钥向导中,选择命令行界面 (CLI) 用例并确认我们了解 Amazon 对于访问密钥的建议。


如果您想添加描述,您可以这样做;这是可选的。要继续,请单击"创建访问密钥"。在最后一步中,您可以将访问密钥复制到密码管理器或将其下载为 .csv 文件。完成后,单击"完成"。


安装 Fireprox
要安装 Fireprox 工具,从https://github.com/ustayready/fireprox克隆存储库,并在" fireprox "目录中使用*irtualenv
创建 Python3 的虚拟环境。
$ git clone https://github.com/ustayready/fireprox$ cd fireprox
#create virutal environmentvirtualenv -p python3 .

然后,运行命令source bin/activate
来执行activate bash脚本的内容。activate 脚本通过将VIRTUAL_ENV
等变量设置为指向 Fireprox 目录来修改环境变量。
它还修改系统的$PATH
变量,以优先考虑安装在 Fireprox 虚拟环境中的库。
- source bin/activate
要验证变量是否已正确添加,请运行env
命令,并检查PATH
、 VIRTUAL_ENV
和VIRTUAL_ENV_PROMPT
变量。


最后,使用pip
,并运行该工具。
sudo pip install -r requirements.txt
python fire.py

运行 FireProx
要使用 Firefox,我们需要提供之前在创建新用户"fireprox-testuser"时生成的访问密钥和密钥,以及我们希望通过其代理的站点的 URL。
您可以直接在命令中提供密钥,也可以将它们添加到环境变量中。或者,您可以使用 AWS CLI 创建配置文件并向其中添加密钥。
方法一:
python fire.py --access_key ACCESS_KEY --secret_access_key SECRET_ACCESS_KEY --region us-east-2 --command create --url TARGET_URL

方法二:环境变量
使用导出命令添加 AWS 变量。然后,运行 Fireprox 并指定要代理的区域和 URL。
export AWS_ACCESS_KEY_ID=ACESS_KEYexport AWS_SECRET_ACCESS_KEY=SRECRET_KEY
python fire.py --region Your-Region --command create --url https://TARGET_URL


创建API后,返回控制台可以看到新创建的网关。

方法 3:AWS 配置文件
我们可以创建一个AWS配置文件,它是一个包含一组用于不同帐户或目的的配置的文件。配置文件由访问密钥 ID 和秘密访问密钥组成,并指定默认区域。
要创建配置文件,请先安装 AWS CLI,然后使用aws configure
命令创建配置文件。提供访问密钥 ID、密钥以及要创建 API 网关的区域。
#Install AWScurl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/install
#Configure the profileaws configure

默认情况下,配置文件将被命名为"default"。在 Linux 上,aws 配置文件通常位于~/.aws/config
。

创建后,使用以下命令再次运行该工具,它将从~/.aws/config
获取凭证。
python fire.py --command create --url https://icanhazip.com

💡 --profile_name
选项不起作用,因此请在没有它的情况下运行命令。
检查 IP 轮换
通过免费套餐,我们收到了 100 万个请求;如果您好奇当我们通过 API Gateway 发送请求时 IP 如何变化,您可以编写一个快速 bash 脚本,向创建的 URL 发送 10 个请求。


如下所示,返回的 IP 是唯一的。

伪造 X-Forwarded-For 标头
在向目标 URL 发送请求时,我观察到我的云虚拟机的源 IP 地址在X-Forwarded-For
标头的值中显示给目标服务器,而不是 API 网关的 IP 地址。
我使用 Burp Suite Collaborator 检查发送请求中X-Forwarded-For
标头的值。
python fire.py --region us-east-2 --command create --url https://6ip78y7rtz4ig5o5x7sjnye45swgl.oastify.com
curl https://FIREPROXURL.amazonaws.com/fprox/
查看请求,您可能会看到源 IP 来自 AWS 池,但如果您单击其中一个请求并检查发送到目标目的地的标头,您将在X-Forwarded-For
中看到您的源 IP X-Forwarded-For
标头。


为了规避检测,我们可以通过将此自定义标头添加到我们的curl命令中来屏蔽我们的源IP地址" X-My-X-Forwarded-For: 127.0.0.1
"。
curl -H "X-My-X-Forwarded-For: 127.0.0.1" https://FIREPROXURL.amazonaws.com/fprox/

完整脚本
#!/bin/bash
for i in $(seq 10); do
# Send GET request to icanhazip.com curl -H "X-My-X-Forwarded-For: 127.0.0.1" "https://FIREPROX_URL.amazonaws.com/fireprox/"done
我们已经配置了 Fireprox 并学习了如何伪造X-Forwarded-For`标头。我们现在可以将它与各种工具一起使用来自动化我们的请求,而不必担心被拦截。
资源
•AWS 直通代理 作者:Mike Bond[1]
•用于规避外部网络安全控制的工具,作者:Nate Fair[2]
•使用 FireProx 喷洒 ADFS 密码 作者:Mike Felch[3]
•使用 Fireprox 克服速率限制 作者:James Gallagher[4]
References
[1]
AWS 直通代理作者:Mike Bond: https://bond-o.medium.com/aws-pass-through-proxy-84f1f7fa4b4b
[2]
用于逃避外部网络安全控制的工具,作者:Nate Fair: https://www.sprocketsecurity.com/resources/evading-external-network-security-controls
[3]
使用 FireProx 悄悄地喷洒 ADFS 密码 作者:Mike Felch: https://www.youtube.com/watch?v=eZh9HDWmYIQ
[4]
使用 Fireprox 克服速率限制作者:James Gallagher: https://jamesonhacking.hashnode.dev/defeating-rate-limiting-with-fireprox
免费获取网络安全优质学习资料与干货教程

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。