Exploiting server-side parameter pollution in a query string

Target: log in as the administrator and delete carlos.

1、防止API漏洞

在设计API时,确保在一开始就考虑到安全性

要确保:

  • 保护API文档如果你的API文档不打算公开的话
  • 确保文档及时更新以便于合法的测试者能够充分进行API攻击面测试
  • 设置HTTP方法的允许列表
  • 验证每个请求或响应所期望的内容类型
  • 使用通用错误消息来避免泄露可能对攻击者有用的信息。
  • 对API的所有版本使用保护措施,而不仅仅是当前的生产版本。
  • 允许列出可以由用户更新的属性,并阻止列出不应该由用户更新的敏感属性。

2、服务器端参数污染

当网站将用户输入嵌入到服务器端请求中,而没有进行适当的编码时,就会发生服务器端参数污染。这意味着攻击者可能能够操纵或注入参数,这可能使他们能够,例如:

  • 覆盖现有参数。
  • 修改应用程序行为。
  • 访问未经授权的数据。

您可以测试任何用户输入的任何类型的参数污染。例如,查询参数、表单字段、标头和URL路径参数都可能容易受到攻击。

3、测试查询字符串中的服务器端参数污染

在输入中放置像#、&和=这样的查询语法字符,并观察应用程序如何响应。

考虑存在以下场景 :

应用程序允许根据用户名搜索其他用户。当你搜索一个用户时,你的浏览器会发出以下请求:

GET /userSearch?name=peter&back=/home

为了检索用户信息,服务器用以下请求查询一个内部API:

GET /users/search?name=peter&publicProfile=true

4、截断查询字符串

可以使用url编码的#字符尝试截断服务器端请求。

为了帮助您解析响应,您还可以在#字符之后添加一个字符串。
例如,您可以将查询字符串修改如下:

GET /userSearch?name=peter%23foo&back=/home

前端将尝试访问以下URL:

GET /users/search?name=peter#foo&publicProfile=true

注:

必须对#字符进行url编码。否则前端应用程序会将其解释为片段标识符,而不会传递给内部API。

查看响应,寻找查询是否被截断的线索。

例如,如果响应返回用户peter,则服务器端查询可能已被截断。

如果返回Invalid name错误消息,则应用程序可能已将foo视为用户名的一部分。

这表明服务器端请求可能没有被截断。

如果您能够截断服务器端请求,那么就不需要将publicProfile字段设置为true。您可以利用这一点来返回非公共用户配置文件。

5、注入无效参数

可以使用url编码的&字符来尝试向服务器端请求添加第二个参数。

例如,您可以将查询字符串修改如下:

GET /userSearch?name=peter%26foo=xyz&back=/home

这会导致以下服务器端对内部API的请求:

GET /users/search?name=peter&foo=xyz&publicProfile=true

查看响应以获取有关如何解析附加参数的线索。

例如,如果响应没有改变,这可能表明参数被成功注入,但被应用程序忽略了。

为了建立一个更完整的图像,您需要进一步测试。

6、注入有效参数

如果能够修改查询字符串,那么可以尝试向服务器端请求添加第二个有效参数。

有关如何识别可以注入查询字符串的参数的信息,请参阅查找隐藏参数一节。

例如,如果您已经确定了email参数,您可以将其添加到查询字符串中,如下所示:

G

你可能感兴趣的:(Burpsuit,burpsuit,web安全)