[SUCTF 2019]Easy SQL
阿新 • • 發佈:2020-10-13
日常and or
一圈測試之後發現,and or && from都過濾了,很奇怪 || 這個沒有過濾。
接著嘗試,試試堆疊注入。
可以,接著看錶
發現flag
嘗試desc
經測試,Flag被過濾了。
想過之前碰到一個預處理的,嘗試之後發現限制了輸入長度。
concat char 都不行,prepare被過濾
突然想到and or &&都被過濾了,唯獨留了 ||,可能有什麼貓膩
查了一下mysql ||這個符號。
結果發現oracle || 還有連線的作用
但這裡是或
所以嘗試一下有沒有辦法能把 || 改成oracle那樣的連線符
然後就沒有然後了,不會了,看了wp,發現還有個sql_mode這個東西
關於sql_mode: 它定義了 MySQL 應支援的 SQL 語法,以及應該在資料上執行何種確認檢查,其中的PIPES_AS_CONCAT將 || 視為字串的連線操作符而非 “或” 運算子。
具體說明:https://www.cnblogs.com/piperck/p/9835695.html
還有就是這個模式下進行查詢的時候,使用字母連線會報錯,使用數字連線才會查詢出資料,因為這個 | | 相當於是將select 1
和select flag from flag
的結果拼接在一起。
看了關鍵的查詢程式碼是 :
select $post['query']||flag from Flag
官方給的 payload 是
1;set sql_mode=PIPES_AS_CONCAT;select 1
拼接一下就是
select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
關於 *,1
拼接一下就是
select *,1||flag from Flag
select *,1 from Flag
可以,腦洞清奇,記下來了。