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弱型別安全問題總結PHP型別
- Java中建立泛型型別的例項Java泛型型別
- PHP漏洞挖掘思路+例項 第二章PHP
- php例項化物件的例項方法PHP物件
- 例項操作mysql varchar型別求和MySql型別
- 在例項中呼叫 Invoke 型別的類型別
- PHP 用 Enum 限定引數型別PHP型別
- 從反序列化到型別混淆漏洞——記一次 ecshop 例項利用型別
- PHP程式碼審計03之例項化任意物件漏洞PHP物件
- PHP審計之class_exists與任意例項化漏洞PHP
- 原始碼 | 靜態工廠返回宣告的返回型別的子型別的例項原始碼型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- php class中public,private,protected,static的區別,以及例項PHP
- AWS EC2 例項型別命名規則型別
- CRLF Injection漏洞的利用與例項分析
- Swift-Optional Binding引發的值型別與引用型別的思考Swift型別
- 製作PHP的RPM包例項PHP
- 可變引數例項
- 神奇的JavaScript弱等價型別轉換JavaScript型別
- PHP 完整表單例項PHP單例
- PHP+jQuery開發簡單的翻牌抽獎例項PHPjQuery
- php語法同java語法的基本區別(例項專案需求,php才能熟)PHPJava
- 阿里雲伺服器計算網路增強型例項和通用網路增強型例項區別?阿里伺服器
- PHP static 關鍵字和 self 關鍵字例項化的區別PHP
- PostgreSQL:所有支援的資料型別及建表語句例項SQL資料型別
- 類例項物件的class型別卻不屬於該類,何解?物件型別
- DCS分散式快取服務例項型別介紹分散式快取型別
- C#out引數的簡單例項C#單例
- php7+的php-fpm引數配置,注意事項PHP
- 由Ghost漏洞引發的“血案”
- Redis中一個String型別引發的慘案Redis型別
- 將外掛類路徑轉為型別,並建立例項。型別
- PHP+Ajax手機移動端發紅包例項PHP
- PHP類方法的型別提示PHP型別