如果REST端点(http://example.com)读取p
查询参数并将其传递给另一个端点:
http_get("http://example.com/api2?p=".$_GET['p']);
我将能够通过在p
:http://example.com?p=a%26admin=true之后追加内容来利用该漏洞,这将导致它向http://example.com/api2?p=a&admin=true发出请求(服务器将%26
解码为&
),如果/api2
端点读取admin
参数,则会导致攻击。
但是,如果我在$_GET['p']
上使用D11
,它将将&
转换为&
,这将打破攻击,除非api2读取amp;admin
(在实践中不太可能)。
这是否意味着&
逃逸到&
中将有效防止攻击?那么,为什么此页&HPP_TEST
呢?
发布于 2018-11-17 09:20:40
HTTP参数污染是为了绕过服务器或WAF中的参数验证而操作URL的过程。例如,它是通过再次添加一个参数来完成的,即将查询字符串foo=1&bar=2
添加到foo=1&bar=2&bar=bad-value
。
请注意,受污染的URL仍然是有效的URL,甚至可能是这样的,例如,使用具有相同字段名的多个输入字段的web表单。因此,任何类型的HTTP参数污染保护都需要知道实际需要什么样的URL或参数。
HTML净化器的用例完全不同:在某些服务器生成的HTML中包含之前,先对用户提供的HTML进行净化。HTML净化器不知道应用程序上下文中的有效URL应该是什么样子,因此无法帮助防止HTTP参数污染。
但是使用它实际上会使问题变得更糟:例如,如果URL的查询字符串有参数foo=1&bar=2
,将其转换为foo=1&bar=2
将导致D3
,这将导致提取参数amp;bar=2
而不是预期的bar=2
。
发布于 2018-11-17 10:55:13
OWASP警告寻找&HPP_TEST
的原因是它是客户端 hpp漏洞的症状。您所描述的攻击针对服务器端 hpp。这是两件完全不同的事情。
那么什么是客户端hpp呢?考虑一下,如果我给您发送了一个链接,如:
www.example.com?name=avery%26action=delete
。
现在,站点将为该链接生成html。例如,它可能有依赖于参数的标记。如果该站点不容易受到攻击,它可能会返回一些无害的东西,例如
View
但是,如果该站点易受攻击,它可能会返回html,例如:
View
View
所以所发生的是服务器被操纵来创建一个有额外参数的链接。现在,如果您像往常一样使用www.example,您可能会单击该链接,发现您被欺骗而删除了自己的数据。OWASP基本上是警告您检查您的服务器是否从URL参数创建这种类型的HTML。
至于使用HTML净化器作为一种防止服务器端hpp攻击的方法是否安全,我会说,是的,它将适用于您的一个情况,但它并不是一个很好的解决方案,因为它意味着您将永远无法创建任何需要多个参数的函数。最好是正确的URL编码和输入验证。
https://security.stackexchange.com/questions/197877
复制相似问题