如何测试REST API

REST API是url的集合,HTTP在其中调用URI,作为响应,它提供JSON或XML数据。REST API与基于UI的应用程序不同。REST API只是一个端点。为了成功地对REST API执行攻击,我们必须收集关于端点、良好数据、消息和参数的信息。参数不是标准的,它可能是URL的一部分,也可能是一个常量头。

REST api容易受到常见和众所周知的OWASP攻击,如注入、CSRF、跨站点脚本、XMLExternalEntity等。

Hackazon应用在android应用中集成了REST API模块。用户可以在android模拟器中安装android应用程序并设置代理。要捕获REST流量,用户可以使用ZAP代理工具。

下面,您可以看到ZAP代理和Android模拟器中的代理设置。

设置代理之后,用户可以开始浏览应用程序以捕获REST数据。

从手动或自动扫描开始,使用代理工具收集完整请求非常重要,因为基于REST API的应用程序可能无法提供实际的攻击面。根据收集到的请求,将确定攻击面,例如常量id、作为URL一部分传递的id、令牌、方法等。

使用ZAP代理手动测试restapi

Hackazon移动应用程序在某些表单中使用了REST api。下面的屏幕截图显示了应用程序正在使用REST API从应用程序获取订单。

这个请求有两个参数“page”和“per_page”。“per_page”参数很容易被盲目SQL注入。下面的示例演示了REST API中基于时间的盲sql注入。在第一个请求中,我们注入了(从(选择(睡眠(5))a中选择*)#.它将导致服务器延迟5秒。

在第二个请求中,我们注入了10秒的延迟。正如所强调的,我们在响应中得到了10秒的延迟。因此,我们可以得出结论,该参数容易受到盲目sql注入的影响。

SQL盲注

网址:http://192.168.1.108/api/category?page=1&per_page=2参数名称:每页攻击值:

  • 1000;%20选20睡20(5)#
  • 1000; % 20选择% 20睡眠% 20 (10);#
  • 1000;%20选20睡20(15)#

请求1

反应1

请求2

反应2

请求3

反应3

结果

Hackazon应用程序具有用户配置文件更新RESTAPI,易受盲目sql注入的攻击。此api使用PUT方法更新用户的配置文件。

为了识别盲sql注入,首先我们注入了一个单引号(')。结果,sql查询变得不平衡,应用程序抛出了一个错误500(内部服务器错误),堆栈跟踪如请求和响应[]和[]所示。为了平衡一个查询,我们注入了两个单引号(“”),并且成功提交了用户配置文件。

SQL注入

网址:http://192.168.202.131/api/user/1方法:PUT参数名称:first_name攻击值:

  • 测试”
  • 测试”

请求1

反应1

请求2

反应2

跨站点脚本

网址:http://192.168.1.108/api/user/1方法:输入参数名称:first_name攻击值:

用户配置文件页面容易受到跨站脚本攻击。我们在参数值“first_name”中注入了一个脚本标记。结果,我们从服务器得到了一个回显。但是,应用程序不会执行脚本,因为它没有使用任何HTML组件。但是,注入的脚本将在浏览器中执行。

请求1

反应1

在web浏览器中生成配置文件页

使用AppSpider (DAST)测试REST API

测试REST API是一项非常具有挑战性的任务。大多数DAST工具需要训练模式来测试REST api,因为api使用的是复杂的JSON、XML或gwt结构,而不是普通的查询字符串参数。AppSpider具有测试识别JSON、XML、gwt或AMFs参数及其值的能力。因此,不需要任何预培训课程来测试这些模块。此外,AppSpider接受各种预先记录的流量。

例如,我们使用Burp代理工具来记录流量。在burp代理中记录应用程序流量,并将项目保存在XML数据中。

现在,打开AppSpider并创建一个Scan Configuration。单击next按钮。

检查“记录的流量”,因为我们将提供前面创建的xml文件,然后单击next按钮。

单击“添加文件”按钮。导入创建的burp xml文件并单击“单击此处查看文件内容”。

选中“限制扫描到记录的流量”选项。

点击“保存并开始”按钮,AppSpider将开始扫描。

AppSpider将花费几分钟时间完成扫描,并根据发现的漏洞生成报告。

AppSpider已完成扫描。它在漏洞扫描期间发现了3个SQL注入和26个反射。

AppSpider已生成一个HTML报告。

AppSpider在的“每页”上发现SQL注入http://192.168.1.108/api/category页通过扩展攻击流量可以看到攻击请求。

在另一个例子中,AppSpider在“page”参数上发现了另一个SQL注入http://192.168.1.108/api/product页通过扩展攻击流量可以看到漏洞的更多细节。