version():mysql版本
user():用户名
database():数据库名
@@datadir:读取数据库路径
@@version_compile_os:操作系统版本
concat(str1,str2,…):没有分割符地连接字符串,显示数据(数据合并)
group_concat(str1,str2,…):连接一个组的所有字符串,并以逗号分割每一条数据,显示数据
into outfile:写文件{select ‘需要写的文件’ into outfile ‘目录下’}
select ‘123123’ into outfile ‘d://study/1.txt’;(将123123添加至d盘study中新建1.txt文件中)
group_concat(列名):会把这一列中所有的内容在一行中以,隔开输出
select load_file(读文件路径);
length() =>计算字符串长度
hex() =>字符转换为16进制
@@basedir MYSQL获取安装路径
概览
group_concat(str1,str2,…):连接一个组的所有字符串,并以逗号分割每一条数据,显示数据
mid()函数:从一个字符串中截取出指定数量的字符
mid(string,start,length)
string(必需)规定要返回其中一部分的字符串。
start(必需)规定开始位置(起始值是 1)。
length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本。
substr()函数:函数返回字符串的一部分。
substr(string,start,length)
string(必需)规定要返回其中一部分的字符串。
start(必需)规定在字符串的何处开始。
length(可选)规定被返回字符串的长度。
left()函数:取字符的多少位字符
left(string,length)
string(必需)规定要返回其中一部分的字符串
length(可选)规定被返回字符串的前length长度的字符
load_file()函数:导出文件
Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。
substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。*注意:这里的pos位置 是从1开始的,不是数组的0开始
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
concat:用于将两个字符串连接起来,形成一个单一的字符串。返回结果为连接参数产生的字符串。
详解
UPDATEXML
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,了解Xpath语法
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
改变XML_document中符合XPATH_string的值
而我们的注入语句为:
updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出
ERROR 1105 (HY000): XPATH syntax error: ‘:root@localhost’
extractvalue()
extractvalue():从目标XML中返回包含所查询值的字符串
extractvalue (XML_document, XPath_string)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
payloaod:
and extractvalue(null,concat(0x7e,(select @@datadir),0x7e));
extractvalue注入的原理:依旧如同updatexml一样,extract的第二个参数要求是xpath格式字符串,而我们输入的并不是。所以报错。
ASCII(s)
ASCII(s)
返回字符串 s 的第一个字符的 ASCII 码。
返回 CustomerName 字段第一个字母的 ASCII 码:
SELECT ASCII(CustomerName) AS NumCodeOfFirstChar FROM Customers;
CHAR_LENGTH(s)
CHAR_LENGTH(s)
返回字符串 s 的字符数
返回字符串 RUNOOB 的字符数
SELECT CHAR_LENGTH(“RUNOOB”) AS LengthOfString;
CHARACTER_LENGTH(s)
CHARACTER_LENGTH(s)
返回字符串 s 的字符数
返回字符串 RUNOOB 的字符数
SELECT CHARACTER_LENGTH(“RUNOOB”) AS LengthOfString;
CONCAT(s1,s2…sn)
CONCAT(s1,s2…sn)
字符串 s1,s2 等多个字符串合并为一个字符串
合并多个字符串
SELECT CONCAT(“SQL “, “Runoob “, “Gooogle “, “Facebook”) AS ConcatenatedString;
CONCAT_WS(x, s1,s2…sn)
CONCAT_WS(x, s1,s2…sn)
同 CONCAT(s1,s2,…) 函数,但是每个字符串直接要加上 x,x 可以是分隔符
合并多个字符串,并添加分隔符:
SELECT CONCAT_WS(“-“, “SQL”, “Tutorial”, “is”, “fun!”)AS ConcatenatedString;
FIELD(s,s1,s2…)
FIELD(s,s1,s2…)
返回第一个字符串 s 在字符串列表(s1,s2…)中的位置
返回字符串 c 在列表值中的位置:
SELECT FIELD(“c”, “a”, “b”, “c”, “d”, “e”);
FIND_IN_SET(s1,s2)
FIND_IN_SET(s1,s2)
返回在字符串s2中与s1匹配的字符串的位置
返回字符串 c 在指定字符串中的位置:
SELECT FIND_IN_SET(“c”, “a,b,c,d,e”);
FORMAT(x,n)
FORMAT(x,n)
函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入。
格式化数字 “#,###.##” 形式:
SELECT FORMAT(250500.5634, 2); – 输出 250,500.56
INSERT(s1,x,len,s2)
INSERT(s1,x,len,s2)
字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
从字符串第一个位置开始的 6 个字符替换为 baiduu:
SELECT INSERT(“google.com”, 1, 6, “baidu”); – 输出:baiduu.com
LOCATE(s1,s)
LOCATE(s1,s)
从字符串 s 中获取 s1 的开始位置
获取 b 在字符串 abc 中的位置:
SELECT LOCATE(‘st’,’myteststring’); – 5
LEFT(s,n)
LEFT(s,n) 返回字符串 s 的前 n 个字符
返回字符串hello 中的前两个字符
SELECT LEFT(‘hello’,2) – he
LEFT(s,n)
LEFT(s,n)
返回字符串 s 的前 n 个字符
返回字符串 abcde 的前两个字符:
SELECT LEFT(‘abcde’,2) – ab
LOCATE(s1,s)
LOCATE(s1,s)
从字符串 s 中获取 s1 的开始位置
返回字符串 abc 中 b 的位置:
SELECT LOCATE(‘b’, ‘abc’) – 2
LPAD(s1,len,s2)
LPAD(s1,len,s2)
在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len
将字符串 xx 填充到 abc 字符串的开始处:
SELECT LPAD(‘abc’,5,’xx’) – xxabc
MID(s,n,len)
MID(s,n,len)
从字符串 s 的 start 位置截取长度为 length 的子字符串,同 SUBSTRING(s,n,len)
从字符串 HELLO 中的第 2 个位置截取 3个 字符:
SELECT MID(“HELLO”, 2, 3) AS ExtractString; –ELL
POSITION(s1 IN s)
POSITION(s1 IN s)
从字符串 s 中获取 s1 的开始位置
返回字符串 abc 中 b 的位置:
SELECT POSITION(‘b’ in ‘abc’) – 2
REPEAT(s,n)
REPEAT(s,n) 将字符串 s 重复 n 次
将字符串HELLO重复三次:
SELECT REPEAT(‘HELLO’,3)
REPLACE(s,s1,s2)
REPLACE(s,s1,s2)
将字符串 s2 替代字符串 s 中的字符串 s1
将字符串 abc 中的字符 a 替换为字符 x:
SELECT REPLACE(‘abc’,’a’,’x’) –xbc
REVERSE(s)
REVERSE(s)
将字符串s的顺序反过来
将字符串 abc 的顺序反过来
SELECT REVERSE(‘abc’) – cba
RIGHT(s,n)
RIGHT(s,n)
返回字符串 s 的后 n 个字符
返回字符串 HELLO 的后两个字符:
SELECT RIGHT(‘HELLO’,2)
RPAD(s1,len,s2)
RPAD(s1,len,s2)
在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len
将字符串 xx 填充到 abc 字符串的结尾处:
SELECT RPAD(‘abc’,5,’xx’) – abcxx
STRCMP(s1,s2)
STRCMP(s1,s2)
比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
比较字符串:
SELECT STRCMP(“A”, “A”); – 0
SUBSTR(s, start, length)
SUBSTR(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
从字符串 ASDF 中的第 2 个位置截取 3个 字符:
SELECT SUBSTR(“ASDF”, 2, 3) AS ExtractString; – SDF
SUBSTRING(s, start, length)
SUBSTRING(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
从字符串 ASDF 中的第 2 个位置截取 3个 字符:
SELECT SUBSTRING(“ASDF”, 2, 3) AS ExtractString; – SDF
SUBSTRING_INDEX(s, delimiter, number)
SUBSTRING_INDEX(s, delimiter, number)
返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。
如果 number 是正数,返回第 number 个字符左边的字符串。
如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。
SELECT SUBSTRING_INDEX(‘ab’,’‘,1) – a
SELECT SUBSTRING_INDEX(‘ab’,’‘,-1) – b
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(‘abcde’,’‘,3),’‘,-1) – c
AVG(expression)
AVG(expression)
返回一个表达式的平均值,expression 是一个字段
返回 Products 表中Price 字段的平均值:
SELECT AVG(Price) AS AveragePrice FROM Products;
CEIL(x)
CEIL(x) | 返回大于或等于 x 的最小整数
SELECT CEIL(1.5) – 返回2
CEILING(x)
CEILING(x) | 返回大于或等于 x 的最小整数
SELECT CEIL(1.5) – 返回2
COUNT(expression)
COUNT(expression)
返回查询的记录总数,expression 参数是一个字段或者 * 号
返回 Products 表中 products 字段总共有多少条记录:
SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;
FLOOR(x)
FLOOR(x) | 返回小于或等于 x 的最大整数
小于或等于 1.5 的整数:
SELECT FLOOR(1.5) – 返回1
附
几个关于floor报错原理的解释