CTF-攻防世界-supersqli(sql注入)


題目

 

解題過程

試了一下單引號,發現存在注入,數據庫類型是MariaDB

第一反應是工具跑一下>_<,跑出數據庫名稱:supersqli

繼續跑表名,沒跑出來,嘗試了下執行sql,也木有任何返回。。。

看了一下當前用戶是root,但不是dba,難道是木有權限。。。

再回到頁面試了下,發現有過濾關鍵字,這應該就是工具沒跑出表來的原因。

 把繞過的方法挨個試了一遍,發現可以堆疊注入,查出兩個表名來,但是不能select數據出來(因為關鍵字過濾了。。)

查詢表中的字段,flag在1919810931114514這張表中

 

 

 

查詢表中數據的方法我沒想到,百度了一下,有兩種:1.頁面默認查的是words表,將1919810931114514的表名和words交換;2.利用mysql的預處理。

預處理語句輸入如下:

1';use supersqli;set @sql=concat('s','elect * from `1919810931114514`');PREPARE pre FROM @sql;EXECUTE pre;--+

這里很巧妙的用concat繞過了關鍵字的檢查(這個思路厲害了,好好學習~^_^~)

 

知識點總結

1. MySQL表名為純數字時(表名和保留字沖突時也是加反引號),要加反引號:show columns from `1919810931114514`

2. MySQL 官方將 prepare、execute、deallocate 統稱為 PREPARE STATEMENT,也就是預處理語句

3. 字符拼接函數可以考慮用來繞過關鍵字檢查

 

如需轉載,請注明出處,這是對他人勞動成果的尊重。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM