1. 程式人生 > >WEB安全 魔術引號及註入類型

WEB安全 魔術引號及註入類型

sybase 建議 同時 寬字節註入 4.0 寬字節 and cookie 文本文

一、魔術引號

1. magic_quotes_gpc 變量

什麽是魔術引號

Warning
本特性已自 PHP 5.3.0 起廢棄並將自 PHP 5.4.0 起移除。
當打開時,所有的 ‘(單引號),"(雙引號),\(反斜線)和 NULL 字符都會被自動加上一個反斜線進行轉義。這和 addslashes() 作用完全相同。

一共有三個魔術引號指令:

magic_quotes_gpc 影響到 HTTP 請求數據(GET,POST 和 COOKIE)。不能在運行時改變。在 PHP 中默認值為 on。 參見 get_magic_quotes_gpc()。
magic_quotes_runtime 如果打開的話,大部份從外部來源取得數據並返回的函數,包括從數據庫和文本文件,所返回的數據都會被反斜線轉義。該選項可在運行的時改變,在 PHP 中的默認值為 off。 參見 set_magic_quotes_runtime() 和 get_magic_quotes_runtime()。
magic_quotes_sybase 如果打開的話,將會使用單引號對單引號進行轉義而非反斜線。此選項會完全覆蓋 magic_quotes_gpc。如果同時打開兩個選項的話,單引號將會被轉義成 ‘‘。而雙引號、反斜線 和 NULL 字符將不會進行轉義。 如何取得其值參見 ini_get()。

2. addslashes() 函數

addslashes — 使用反斜線引用字符串

說明 ?

string addslashes ( string $str )
返回字符串,該字符串為了數據庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(‘)、雙引號(")、反斜線(\)與 NUL(NULL 字符)。

一個使用 addslashes() 的例子是當你要往數據庫中輸入數據時。 例如,將名字 O‘reilly 插入到數據庫中,這就需要對其進行轉義。 強烈建議使用 DBMS 指定的轉義函數 (比如 MySQL 是 mysqli_real_escape_string(),PostgreSQL 是 pg_escape_string()),但是如果你使用的 DBMS 沒有一個轉義函數,並且使用 \ 來轉義特殊字符,你可以使用這個函數。 僅僅是為了獲取插入數據庫的數據,額外的 \ 並不會插入。 當 PHP 指令 magic_quotes_sybase 被設置成 on 時,意味著插入 ‘ 時將使用 ‘ 進行轉義。

PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默認是 on, 實際上所有的 GET、POST 和 COOKIE 數據都用被 addslashes() 了。 不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。 遇到這種情況時可以使用函數 get_magic_quotes_gpc() 進行檢測。

參數 ?

str
要轉義的字符。

返回值 ?

返回轉義後的字符。

3. 繞過方式

GBK編碼下使用寬字節註入:%df

二、註入類型

1. 數字型註入:

demo代碼:    $sql = "select * from news where id=$id"
傳入後:     $sql = "select * from news where id=1"
繞過方式:   直接註入
繞過代碼:   $sql = "select * from news where id=1 union select 1,2,3"


2. 字符型註入:

demo代碼:   $sql = "select * from news where id=‘$name’"
傳入後:   $sql = "select * from news where id=‘xiaodi’"
繞過方式:   閉合前後單引號
繞過方式:   $sql = "select * from news where id=‘xiaodi‘ union select 1,2,3 and ‘1‘=‘1’"


3. 搜索型註入:

demo代碼:   $sql = "select * from news where name like ‘%$username%‘ order by name"
傳入後:    $sql = "select * from news where name like ‘%xiaodi%‘ order by name"
繞過方式:    閉合%正則符號和單引號
繞過方式:    $sql = "select * from news where name like ‘%xiaodi%‘ union select 1,2,3 and ‘%‘=‘%‘ order by name"

end.

WEB安全 魔術引號及註入類型