配置Fireprox使用AWS API网关实现IP轮换
在渗透测试评估期间,某些活动需要一定程度的自动化,例如从LinkedIn等网站进行网络爬取以收集可用于社会工程活动的有效员工名单、对登录门户进行密码喷洒攻击,或在测试Web应用程序时进行盲注。然而,从单一源IP地址执行这些活动可能导致在测试过程中被封锁。
为了解决这个问题,我们需要频繁轮换IP以避免被检测。我们可以使用AWS API网关等服务,它通过网关代理我们的流量,而不是直接发送到目标。当通过网关发出请求时,它会从AWS的大型IP池中选择一个IP地址。由于AWS拥有全球基础设施,这些IP对于每个请求很可能都不同。
有许多工具利用AWS API网关;在本文中,我们将探讨Fireprox。这是由Black Hills Information Security的Mike Felch创建的开源工具。Fireprox动态创建临时直通代理,每次通过代理发出请求时,目标服务器看到的IP地址都不同。
目录
- 先决条件
- 创建亚马逊账户
- 配置AWS API网关
- 安装和设置
- 安装Fireprox
- 使用
- 运行FireProx
- 检查IP轮换
- 伪造X-Forwarded-For头
- 资源
创建亚马逊账户
要为Fireprox设置直通代理,我们需要创建一个AWS账户。首先,访问AWS网站并点击"创建AWS账户"。填写账户信息,包括电子邮件地址、强密码和所需的账户名称。
图1和图2 - 显示注册AWS账户的步骤
在下一页,选择账户类型(个人或企业),输入联系信息,并勾选同意AWS客户协议的复选框。
图3 - 显示添加联系信息
之后,输入账单信息并通过电话或短信验证身份。
图4 - 显示添加账单信息
然后,我们选择支持计划 - 基本、开发人员或商业计划。通常,AWS提供免费层级,允许用户试用其服务。三个主要提供是:
- 12个月免费:这些服务在注册AWS后的前12个月内免费使用。之后,将按标准按需付费费率收费。
- 始终免费:只要保持在免费层级限制内,某些AWS服务完全免费。
- 免费试用:某些服务提供较短期限的免费试用,如一个月左右。
对于本文,基本计划已足够。API网关的免费层级每月为REST和HTTP API提供高达100万次API调用。但是,如果您需要更多,可以查看其定价页面获取更多信息 - Amazon API网关定价。
图5 - 显示选择支持计划
完成注册过程后,我们登录并访问"AWS管理控制台"以开始使用AWS服务。
图6和图7 - 显示登录和AWS控制台
配置AWS API网关
创建AWS账户后,导航到AWS控制台上的"服务"磁贴图标。从那里打开"身份和访问管理仪表板(IAM)"。
图8:显示从AWS控制台选择IAM服务
在IAM仪表板中,从侧边菜单选择"用户组"并点击"创建组"。
图9 - 显示IAM仪表板
输入组名并向下滚动到"附加权限策略 - 可选",选择策略类型为AmazonAPIGatewayAdministrator策略,然后点击"创建用户组"。
图10 - 显示创建新组
图11 - 显示选择Amazon API策略
之后,我们将创建一个新用户添加到"FireProx-Testing"组。点击"创建用户"并输入用户名信息。
图12和图13 - 显示创建新用户
对于"设置权限",选择"添加到组"并将其添加到Fireprox-Testing组。然后,在点击"创建用户"之前审查用户名和组。
图14和图15 - 显示设置用户账户权限
成功创建用户后,点击用户查看其信息。
要生成访问密钥,点击"创建访问密钥"。在访问密钥向导中,选择命令行界面(CLI)用例并确认我们理解Amazon关于访问密钥的建议。
图16和图17 - 显示生成访问密钥
如果需要添加描述,可以这样做;这是可选的。要继续,点击"创建访问密钥"。在最后一步,您可以将访问密钥复制到密码管理器或下载为.csv文件。完成后,点击"完成"。
图18和图19 - 显示AWS访问密钥
安装Fireprox
要安装Fireprox工具,从GitHub克隆仓库,并在"fireprox"目录中使用virtualenv为Python3创建虚拟环境。
|
|
图20 - 显示fireprox设置
然后,运行命令source bin/activate执行activate bash脚本的内容。activate脚本通过设置像VIRTUAL_ENV这样的变量指向Fireprox目录来修改环境变量。
它还会修改系统的$PATH变量以优先使用Fireprox虚拟环境中安装的库。
|
|
要验证变量是否正确添加,运行env命令,并检查PATH、VIRTUAL_ENV和VIRTUAL_ENV_PROMPT变量。
图21 - 显示修改后的$PATH变量
图22 - 显示修改后的虚拟环境变量
最后,使用pip安装Fireprox的其余要求,并运行该工具。
|
|
图23 - 显示运行Fireproxy手册页
运行FireProx
要使用Fireprox,我们需要提供之前创建新用户"fireprox-testuser"时生成的访问密钥和秘密密钥,以及我们希望代理的站点的URL。
您可以直接在命令中提供密钥,如"方法1"所示,或将它们添加到环境变量中。或者,您可以使用AWS CLI创建一个配置文件并将密钥添加到其中。
方法1:直接提供
|
|
图24 - 显示使用aws访问密钥直接运行fireprox
方法2:环境变量
使用export命令添加AWS变量。然后,运行Fireprox并指定区域和要代理的URL。
|
|
图25 - 显示添加AWS变量
图26 - 显示使用AWS变量运行Fireprox
创建API后,返回控制台查看新创建的网关。
图27 - 新创建的API网关
方法3:AWS配置文件
我们可以创建一个AWS配置文件,这是一个包含不同账户或目的的一组配置的文件。配置文件包括访问密钥ID和秘密访问密钥,并指定默认区域。
要创建配置文件,首先安装AWS CLI,然后使用aws configure命令创建配置文件。提供访问密钥ID、秘密密钥以及将创建API网关的区域。
|
|
图28 - 显示配置aws配置文件
默认情况下,配置文件将命名为"default"。aws配置文件通常位于Linux上的~/.aws/config。
图29 - 显示aws配置文件的位置
创建后,使用以下命令再次运行该工具,它将从~/.aws/config获取凭据。
|
|
图30 - 使用aws配置文件运行fireprox
💡–profile_name选项不起作用,因此请在不使用它的情况下运行命令。
检查IP轮换
使用免费层级,我们获得100万次请求;如果您好奇当我们通过API网关发送请求时IP如何变化,您可以编写一个快速的bash脚本,向创建的URL发送10个请求。
|
|
图31 - 显示Bash脚本
如下所示,返回的IP是唯一的。
图32 - 显示API网关的IP地址
伪造X-Forwarded-For头
在向目标URL发送请求时,我观察到我的云VM的源IP地址显示在目标服务器的X-Forwarded-For头值中,而不是API网关的IP地址。
我使用Burp Suite Collaborator检查发送请求中X-Forwarded-For头的值。
|
|
查看协作器请求,您可能会看到源IP来自AWS池,但如果您点击其中一个请求并检查发送到目标目的地的头,您将在X-Forwarded-For头中看到您的源IP。
图33和图34 - 显示X-Forwarded-For头的值
为了逃避检测,我们可以通过向curl命令添加此自定义头来屏蔽我们的源IP地址:“X-My-X-Forwarded-For: 127.0.0.1”。
|
|
图35 - 显示请求中的自定义X-My-X-Forwarded-For头
完整脚本
|
|
我们已经配置了Fireprox并学会了如何伪造X-Forwarded-For头。我们现在可以将其与各种工具一起使用,以自动化我们的请求,而不用担心被封锁。
今天就到这里。感谢您的阅读!
资源
- Mike Bond的AWS直通代理
- Nate Fair的逃避外部网络安全控制的工具
- Mike Felch的使用FireProx悄悄对ADFS进行密码喷洒
- James Gallagher的使用Fireprox击败速率限制