vue3與vue2的區別
好吧這題是我不配 看了網上大佬的WP
payload1:*,1 大佬的解法,好像直接將原始碼猜出來了 select $_GET['query'] || flag from flag
payload2:select
1
;
set
sql_mode
=
pipes_as_concat;select
1
||flag
from
Flag
payload3:1;set sql_mode=PIPES_AS_CONCAT;select 1
之前沒有接觸過這類題目,涉及到堆疊注入和sql_mode規則的設定
補充知識
sql_mode:是一組mysql支援的基本語法及校驗規則 PIPES_AS_CONCAT:將“||”視為字串的連線操作符而非或運算子,這和Oracle資料庫是一樣的,也和字串的拼接函式Concat相類似
當 sql_mode 設定了 PIPES_AS_CONCAT 時,|| 就是字串連線符,相當於CONCAT() 函式
當 sql_mode 沒有設定 PIPES_AS_CONCAT 時 (預設沒有設定),|| 就是邏輯或,相當於OR函式
解釋一下payload2
select 1查詢,將sql_mode規則設定成 PIPES_AS_CONCAT,||符號就是將select 1和select flag from Flag的結果拼接起來
payload1: *,1
字串或前面的數字結果為1則返回1,為0則返回0,效果跟直接*一樣,本題相當於直接查詢flag
關於MYSQL的sql_mode解析與設定
ONLY_ FULL_ GROUP_B:如果在SELECT中的列,沒有在GROUP BY中出現,那麼將 認為這個SQL是不合法的,因為列不在GROUP BY從句中,因為這個設定的存在,我們對於group by的用法只能是類似於select * from users group by id ;
並且只能展示group by的欄位,要是帶有其他欄位便會報錯。
對這種狀態進行修改:
set sql_mode=(select replace (@@sql_mode,'ONLY_FULL_GROUP_BY','')); 可以使用該語句來將空格替換掉only_full_group_by
STRICTTRANS
NOZERODATE:在嚴格模式,不要將 '0000-00-00'做為合法日期。你仍然可以用IGNORE選項插入零日期。在非嚴格模式,可以接受該日期,但會生成警告。
ERRORFORDIVISIONBYZERO:在嚴格模式,在INSERT或UPDATE過程中,如果被零除(或MOD(X,0)),則產生錯誤(否則為警告)。如果未給出該模式,被零除時MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作結果為NULL。
NOAUTOCREATE_USER:防止GRANT自動建立新使用者,除非還指定了密碼。
ANSIQUOTES:啟用ANSIQUOTES後,不能用雙引號來引用字串,因為它被解釋為識別符。
PIPESASCONCAT:將"||"視為字串的連線操作符而非或運算子,這和Oracle資料庫是一樣是,也和字串的拼接函式Concat想類似。
參考文章:https://www.cnblogs.com/ophxc/p/12879732.html#
https://www.cnblogs.com/chrysanthemum/p/11729891.html