基于WAF的一个错误
这一关要点进login.php才是题目,如果点进index.php就是第一关一样了。这题是基于http污染
漏洞描述
HTTP参数污染漏洞(HTTP Parameter Pollution)简称HPP,由于HTTP协议允许同名参数的存在,同时,后台处理机制对同名参数的处理方式不当,造成“参数污染”。攻击者可以利用此漏洞对网站业务造成攻击,甚至结合其他漏洞,获取服务器数据或获取服务器最高权限。
原理
浏览器在跟服务器进行交互的过程中,浏览器往往会在get/post请求中带上参数,这些参数以名称-值的形式出现,通常在一个请求中同一个名称参数只会出现一次,但在http协议中是允许出现多次的。
例如:
http://www.baidu.com?name=a&name=b,
百度解析的name值为-- a
雅虎解析的name值为-- b
谷歌解析的name值为-- a b
解析:不同的服务器针对同一个名称出现多次的情况处理方式也不一样,有的服务器取第一个值name=a,有的服务器取第二个值name=b,也有的服务器两个参数都取 name=a,b。这种特性在绕过一些服务器的逻辑盘点时非常有用。
hpp漏洞与web服务器环境,服务端使用的脚本有关,如下是不同web服务器对于出现多个参数是的选择:
这关可以看一下对于login页面的过滤,这里他是写了一个正则来只匹配数字,如果有数字以外的输入就跳到hacked页面。
但是他这里只对第一个参数进行匹配,匹配第一个参数第3个字符起最多匹配30个字符。没有对第二个参数进行过滤,那么可以构造两个参数来绕过过滤。具体要看是什么样的脚本和服务器的配置。
由于我这里是php+apache,服务器解析的是第二个参数,那可以直接在第二个参数上面注入。