开始挑战第二十九关(Protection with WAF) 

0x1查看源码

(1)login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面(其他信息看备注)

0x2 foreach循环

(1)第一方式 foreache($qs_array as $val)

  这里的$qs_array就是需要遍历的数组名,每次循环时,$qs_array数组的当前元素的值被赋值给$val,并且数组的会逐次向后移动一步,即下次循环得到另一个元素;

(2)第二方式 foreache($qs_array as  $key => $val)

      第二种和第二种不同的是多了一个key,key代表键值也是下标(比如:name[0]='张三'中的[0]就是下标值),在这样的循环下,不仅要将当前元素赋予$val,也要把当前的键职赋值给$key

0x3小结

  来看看第二种格式,第二种格式除了能像第一种格式一样得到数组内元素的值外,还能得到元素的索引值,并保存到$key变量中,如果数组的索引值未经过人工设定,则返回系统默认的设定值。

          根据其中代码逻辑,WAF 会检测 id 是否为数字,如果不是一律转向 hacked.php。但是程序 没有考虑当 id 多次赋值的情况,它只对第一次的 id 进行了测试,如果传入多个 id,(如id=1&id=1&id=.....)那么后 面的 id 则存在注入漏洞。

0x4开始测试

 (1) 传入多个ID参数,利用1=1进行测试(最开始已用单引号测试)

(2)order by 猜解字段,正确为3个

(4)union select联合查询

(5)获取数据库,表名

(6)获取字段名

(7)获取数据