使用AWS API网关配置Fireprox实现IP轮换

本文详细介绍如何利用Fireprox工具和AWS API网关实现IP轮换,避免在渗透测试中被目标网站封锁。内容包括AWS账户创建、API网关配置、Fireprox安装使用及X-Forwarded-For头部伪装等技术细节。

配置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地址在目标服务器上显示为不同。

目录

  • 先决条件
    • 创建Amazon账户
    • 配置AWS API网关
  • 安装和设置
    • 安装Fireprox
  • 使用
    • 运行FireProx
    • 检查IP轮换
    • 伪造X-Forwarded-For头部
  • 资源

创建Amazon账户

要为Fireprox设置直通代理,我们需要创建一个AWS账户。首先,访问AWS网站并单击"创建AWS账户"。填写账户信息,包括电子邮件地址、强密码和所需的账户名称。

图1和图2 - 显示注册AWS账户的步骤

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

图3 - 显示添加联系信息

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

图4 - 显示添加账单信息

然后,我们选择支持计划 - 基本、开发人员或商业计划。通常,AWS提供一个免费层,允许用户试用其服务。3个主要提供是:

  • 12个月免费:这些服务在您注册AWS后的前12个月内免费使用。之后,将按标准即用即付费率收费。
  • 始终免费:只要您保持在免费层限制内,一些AWS服务完全免费。
  • 免费试用:一些服务提供较短期的免费试用,如一个月左右。

对于本文,基本计划就足够了。API网关的免费层每月为REST和HTTP API提供高达100万次API调用。但是,如果您需要更多,可以查看其定价页面获取更多信息 - Amazon API Gateway定价。

图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创建虚拟环境。

1
2
3
4
$ git clone https://github.com/ustayready/fireprox
$ cd fireprox
#创建虚拟环境
virtualenv -p python3 .

图20 - 显示fireprox设置

然后,运行命令source bin/activate以执行activate bash脚本的内容。activate脚本通过设置像VIRTUAL_ENV这样的变量指向Fireprox目录来修改环境变量。

它还会修改系统的$PATH变量以优先考虑在Fireprox虚拟环境中安装的库。

1
source bin/activate

要验证变量是否正确添加,运行env命令,并检查PATH、VIRTUAL_ENV和VIRTUAL_ENV_PROMPT变量。

图21 - 显示修改的$PATH变量

图22 - 显示修改的虚拟环境变量

最后,使用pip安装Fireprox的其余要求,并运行该工具。

1
2
sudo pip install -r requirements.txt
python fire.py

图23 - 显示运行Fireproxy手册页

运行FireProx

要使用Fireprox,我们需要提供之前创建新用户"fireprox-testuser"时生成的访问和秘密密钥,以及我们希望通过代理的站点的URL。

您可以直接在命令中提供密钥,如"方法1"所示,或将它们添加到环境变量中。或者,您可以使用AWS CLI创建配置文件并将密钥添加到其中。

方法1:直接提供

1
python fire.py --access_key ACCESS_KEY --secret_access_key SECRET_ACCESS_KEY --region us-east-2 --command create --url TARGET_URL

图24 - 显示直接使用aws访问密钥运行fireprox

方法2:环境变量

使用export命令添加AWS变量。然后,运行Fireprox并指定区域和要代理的URL。

1
2
3
export AWS_ACCESS_KEY_ID=ACESS_KEY
export AWS_SECRET_ACCESS_KEY=SRECRET_KEY
python fire.py --region Your-Region --command create --url https://TARGET_URL

图25 - 显示添加AWS变量

图26 - 显示使用AWS变量运行Fireprox

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

图27 - 新创建的API网关

方法3:AWS配置文件

我们可以创建一个AWS配置文件,这是一个包含不同账户或目的的一组配置的文件。配置文件包括访问密钥ID和秘密访问密钥,并指定默认区域。

要创建配置文件,首先安装AWS CLI,然后使用aws configure命令创建配置文件。提供访问密钥ID、秘密密钥以及将创建API网关的区域。

1
2
3
4
5
6
7
#安装AWS
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

#配置配置文件
aws configure

图28 - 显示配置aws配置文件

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

图29 - 显示aws配置文件的位置

创建后,再次运行以下命令的工具,它将从~/.aws/config获取凭据。

1
python fire.py --command create --url https://icanhazip.com 

图30 - 使用aws配置文件运行fireprox

💡–profile_name选项不起作用,因此请在没有它的情况下运行命令。

检查IP轮换

使用免费层,我们获得100万次请求;如果您好奇当我们通过API网关发送请求时IP如何变化,您可以编写一个快速的bash脚本,向创建的URL发送10次请求。

1
2
3
4
5
6
#!/bin/bash

for i in $(seq  10); do
    # 发送GET请求到icanhazip.com
  curl "https://fireprox_URL"
done

图31 - 显示Bash脚本

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

图32 - 显示API网关的IP地址

伪造X-Forwarded-For头部

在向目标URL发送请求时,我观察到我的云VM的源IP地址显示在目标服务器的X-Forwarded-For头部的值中,而不是API网关的IP地址。

我使用Burp Suite Collaborator检查发送请求中X-Forwarded-For头部的值。

1
2
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。

图33和图34 - 显示X-Forwarded-For头部的值

为了逃避检测,我们可以通过将此自定义头部添加到我们的curl命令中来掩盖我们的源IP地址"X-My-X-Forwarded-For: 127.0.0.1"。

1
curl -H "X-My-X-Forwarded-For: 127.0.0.1" https://FIREPROXURL.amazonaws.com/fprox/

图35 - 显示请求中的自定义X-My-X-Forwarded-For头部

完整脚本

1
2
3
4
5
6
#!/bin/bash

for i in $(seq  10); do
    # 发送GET请求到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直通代理 by Mike Bond
  • 用于逃避外部网络安全控制的工具 by Nate Fair
  • 使用FireProx静默密码喷洒ADFS by Mike Felch
  • 使用Fireprox击败速率限制 by James Gallagher
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计