PHP弱型別引發的漏洞例項
【非原創】
我們知道PHP 是一門弱型別語言,不必向 PHP 宣告該變數的資料型別,PHP 會根據變數的值,自動把變數的值轉換為正確的資料型別,但在這個轉換過程中就有可能引發一些安全問題。
型別轉換
- 會先進行型別轉換,再進行對比
- 會先比較型別,如果型別不同直接返回false,參考如下
注意:
-
當一個字串被當作一個數值來取值,其結果和型別如下:如果該字串沒有包含’.',’e',’E'並且其數值值在整形的範圍之內,該字串被當作int來取值。其他所有情況下都被作為float來取值,該字串的 開始部分 決定了它的值,如果該字串以合法的數值開始,則使用該數值, 否則其值為0 。
-
在進行比較運算時,如果遇到了 0e 這類字串,PHP會將它解析為 科學計數法
- 在進行比較運算時,如果遇到了 0x 這類字串,PHP會將它解析為 十六進位制 。
例項: DedeCMS(20180109)任意使用者密碼重置
部落格: http://blog.nsfocus.net/dedecms-20180109/
函式鬆散性
switch()
如果switch是數字型別的case的判斷時,switch會將其中的引數轉換為int型別。
例項:HDwikiSQL隱碼攻擊
實際執行的語句:
$type = 'hot';
in_array()
in_array(search,array,type): 如果給定的值 search 存在於陣列 array 中則返回 true( 類似於==)。如果第三個引數設定為 true,函式只有在元素存在於陣列中且資料型別與給定值相同時才返回 true( 類似於=== )。如果沒有在陣列中找到引數,函式返回 false。
例項:免費開源相簿Piwigo SQL隱碼攻擊
is_number()
is_numeric在做判斷時候,如果攻擊者把payload改成十六進位制0x…,is_numeric會先對十六進位制做型別判斷,十六進位制被判斷為數字型為真,就進入了條件語句,如果再把這個代入進入sql語句進入mysql資料庫,mysql資料庫會對hex進行解析成字串存入到資料庫中,如果這個欄位再被取出來二次利用,就可能造成二次注入漏洞。
strcmp()
strcmp(string1,string2):比較括號內的兩個字串string1和string2,當他們兩個相等時,返回0;string1的大於string2時,返回>0;小於時返回
md5()
string md5 ( string $str [, bool $raw_output = false ] )
md5()需要是一個string型別的引數。但是當你傳遞一個array時,md5()不會報錯,只是會無法正確地求出array的md5值,返回null,這樣就會導致任意2個array的md5值都會相等。
以上就是常見的利用PHP弱型別產生的一些安全問題,在CTF、PHP程式碼審計中也會遇到這種利用弱型別來繞過邏輯判斷,進而引發更大問題的漏洞。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4662/viewspace-2814224/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php弱型別PHP型別
- PHP弱型別在實戰中導致的漏洞總結PHP型別
- 淺談PHP弱型別安全PHP型別
- PHP漏洞挖掘思路+例項PHP
- 另類PHP安全漏洞:利用弱型別和物件注入進行SQLiPHP型別物件SQL
- PHP弱型別安全問題總結PHP型別
- PHP弱型別變數是如何實現的PHP型別變數
- Java中建立泛型型別的例項Java泛型型別
- PHP漏洞挖掘思路+例項 第二章PHP
- PHP 用 Enum 限定引數型別PHP型別
- php 的函式引數值型別限定PHP函式型別
- php的函式引數值型別限定PHP函式型別
- 例項操作mysql varchar型別求和MySql型別
- 在例項中呼叫 Invoke 型別的類型別
- php例項化物件的例項方法PHP物件
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- 【MySQL】bit 型別引發的故事MySql型別
- 強資料型別和弱資料型別資料型別
- 簡易型PDA的開發例項
- 從反序列化到型別混淆漏洞——記一次 ecshop 例項利用型別
- js獲取事件的型別程式碼例項JS事件型別
- PHP審計之class_exists與任意例項化漏洞PHP
- PHP程式碼審計03之例項化任意物件漏洞PHP物件
- 原始碼 | 靜態工廠返回宣告的返回型別的子型別的例項原始碼型別
- 用例項講解Variant型別在VB、C#、VC中的引數傳遞型別C#
- 神奇的JavaScript弱等價型別轉換JavaScript型別
- 判斷瀏覽器型別的程式碼例項瀏覽器型別
- MongoDB+PHP聯合開發例項MongoDBPHP
- php class中public,private,protected,static的區別,以及例項PHP
- Swift-Optional Binding引發的值型別與引用型別的思考Swift型別
- CSRF的防禦例項(PHP)PHP
- PHP處理XML的例項PHPXML
- javascript引用型別資料使用程式碼例項JavaScript型別
- AWS EC2 例項型別命名規則型別
- CRLF Injection漏洞的利用與例項分析
- PHP呼叫Webservice例項PHPWeb
- js判斷移動端型別或者瀏覽器型別程式碼例項JS型別瀏覽器
- java多型例項Java多型