利用HPP参数污染攻破Sqlilabs第29关:Protection with WAF
很多人玩到29关发现根本没有WAF,其实是有的,在第29关的目录下可以找到一个login.php文件,这才是这关的真正页面。
这关不看源码很难攻破,所以先来分析源码,查看源码会发现里面有两个奇怪的函数,whitelist函数判断id参数的值是不是纯数字,如果不是则导向失败黑入页面,而javaimplementation函数则是把参数拆解:
通关的秘密就在javaimplementation函数里,这个函数在url中找到第一个名为id的参数后就直接返回数值,而返回的数据则交由whitelist进行安全判断,但是很明显,由于$val的取值方式存在问题,这个函数存在参数污染漏洞。
关键点就在于,如果我们传入参数 idx11&id=1,$id可以正确的获取值,而javaimplementation函数返回的将是idx的值,因此,我们可以通过利用javaimplimentation函数的参数污染漏洞巧妙地构造出以下语句成功进行注入:
http://127.0.0.1/sqli-labs/Less-29/login.php?idx11&id=1' and updatexml(1,concat(0x7e,database()),0) and '1'='1