Web安全-SQL注入:常用函数及子句等

说明

本文为以下博客的配餐
Web安全-SQL注入:MySQL注入天书(0)
Web安全-SQL注入:sqlmap布尔型盲注payload解析
Web安全-SQL注入:为什么拿不到os-shell

%23和–+

注意–+是两个减号一个加号
%23其实就是URL编码后的 #
即SQL语句中的注释符
两者都可在字符型注入中用于处理后面的单引号

有拼接SQL语句的PHP代码如下

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

payload传入

1' ORDER BY 4 %23

数据库执行的是

SELECT * FROM users WHERE id='1' ORDER BY 4 #' LIMIT 0,1

ORDER BY

格式

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

其中的field1也可用表示第几列的数字来替换,从1开始,表示按第1列排序,见示例
示例
在这里插入图片描述在这里插入图片描述

用途
执行ORDER BY num报错可以判断表中列数小于num
在这里插入图片描述在这里插入图片描述

UNION

格式

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
# 不加ALL或加DISTINCT不选重复
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

用于查询多张表中相同列的数据,返回到同一个结果集中
示例
在这里插入图片描述
用途
使用ORDER BY 判断出表中列数后可以使用UNION从INFORMATION_SCHEMA数据库中选出信息,在浏览器中可以看到

扫描二维码关注公众号,回复: 9425890 查看本文章

INFORMATION_SCHEMA是“数据库的数据库”,其用于存储数据库名、表名、列的数据类型、访问权限等,其SCHEMATA表中有当前所有的数据库信息,表中schema_name字段存放所有的数据库名

GROUP_CONCAT

格式

SELECT GROUP_CONCAT(column_name) FROM table_name;

将查询到的所有列值拼接到一起返回
示例
在这里插入图片描述

AllStudentNo
10010501,10030408,10040412,11010202,11020413,12010403,12020306,12020705,12030409,13010304,13020307,13030410,13030411

用途
当网页只显示一个值时可以先拼接到一起然后再使其显示此值
比如爆数据库名时需要

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA;

SCHEMA_NAME是INFORMATION_SCHEMA数据库中SCHEMATA表中的一个字段,存放所有数据库名

这样虽然可以选出来所有的数据库名,但网页往往只能显示一个值
在这里插入图片描述
所以换用

SELECT GROUP_CONCAT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA;

可以一次性爆出所有数据库名
在这里插入图片描述

DISTINCT

SELECT DISTINCT 列名 FROM 表名;

返回表中此列名下不同的值
在这里插入图片描述

COUNT

SELECT COUNT(列名) FROM 表名;

返回指定列下值的数目
在这里插入图片描述

CAST

CAST (my_data AS data_type);

将my_data转化为指定数据类型
在这里插入图片描述

IFNULL

IFNULL(expression_1,expression_2);

如果表达式1结果不为空则返回表达式1的结果,否则返回表达式2的结果
在这里插入图片描述
在这里插入图片描述

MID

MID(my_str, start[,length]);

从某表某列中的数据提取指定长度的字符串(从start位置开始(最小值为1)后length长度的字符串)
在这里插入图片描述

SUBSTR

SUBSTR(my_str, start[,length]);

同MID,用于截取字符串

在这里插入图片描述

LEFT

LEFT(my_str, num)

返回字符串前num个字符
在这里插入图片描述

ORD

ORD('inject');
//值为'i'的ASCII值105

返回字符串第一个字符的ASCII值
在这里插入图片描述

ASCII

ASCII('inject');
//值为'i'的ASCII值105

返回字符串第一个字符的ASCII值
在这里插入图片描述

LIMIT

SELECT * FROM tablename limit i,n;

返回索引从 i 开始的 n 条数据

REGEXP

my_str REGEXP 'regex_expression';

根据SELECT的不同
返回数据或布尔值
如查找所有姓张,后面两个字的学生

在这里插入图片描述
检查当前用户是否可能为root
在这里插入图片描述
在这里插入图片描述

IF

IF(expr,v1,v2)

如果表达式为真则返回v1,为假则返回v2
在这里插入图片描述

LENGTH

LENGTH(my_str)

返回字符串长度
在这里插入图片描述

GROUP BY

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

根据一个或多个列的值对结果集进行分组
在这里插入图片描述
在这里插入图片描述

RAND

RAND()

产生一个0到1之间的伪随机数

在这里插入图片描述传入int型参数时以其作为种子,相同参数产生的伪随机数相同
在这里插入图片描述

CONCAT

CONCAT(str1, str2, ...)

拼接字符串
在这里插入图片描述

FLOOR

FLOOR(num)

向下取整
在这里插入图片描述

LOAD_FILE

LOAD_FILE('/this/is/an/example');

读取文件并将其内容作为字符串返回

INTO OUT_FILE

SELECT * INTO OUT_FILE('/this/is/an/example') FROM tablename;

将表中所有行写入指定文件,也可与 LINES TERMINATED BY 搭配写入自定义内容

发布了61 篇原创文章 · 获赞 11 · 访问量 4863

猜你喜欢

转载自blog.csdn.net/weixin_43249758/article/details/104105327