日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP是弱类型还是强类型,php弱类型比较(松散比较) | CN-SEC 中文网

發布時間:2025/3/15 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP是弱类型还是强类型,php弱类型比较(松散比较) | CN-SEC 中文网 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總結一下關于php(拍h片)弱類型相關知識的梳理。

前言

php有八種類型

標量類型:整數型integer,浮點型float,字符串類型string,布爾類型boolen

復合類型:對象 object,數組array

特殊類型:空null,資源resource

我們要知道php是一種弱類型的語言,它不同于C/Go/java等。

那么首先,說一下php中兩個比較符號。

在這里要說明一下,==在這里是判斷兩邊的值是否相等,等號兩邊為相同的值的時候,直接判斷值是否相等,如果類型不一樣,則先轉換為相同的類型,再判斷轉換后的值是否相等。

(若是等號兩邊是數值和字符串比較,則字符串會轉換為數值,字符串轉為數值這里很有意思了,大家可以用var_dump去嘗試一下不同的類型轉換)

(比如像這樣多嘗試嘗試)

其中為什么第11行為true呢,這里是php中的hash缺陷,如果hash值是以0e開頭的,進行比較時候會變成0乘以10的多少次方,結果還是為0

(ps:如果MD5運算后為0e開頭的字符串,是不是可以繞過強制(string)轉換后的MD5比較呢)

提醒:0,"0",null,false,array()都是為空。

===,則是判斷的是否全等,不僅要值相等,而且類型也要一致。

而在有些語言中(比如Go),要比較的兩個變量類型須相等并且Go沒有隱式類型轉換,要比較的兩個變量必須類型完全一樣,類型別名都也不行。

這里便可以先從一個簡單的題目入手(題目來自攻防世界)。

is_numeric() 函數

用于檢測變量是否為數字或數字字符串(感覺說明這個函數,大家就沒有生詞了)。

然后就是一個很簡單的弱類型比較了,大家隨便輸一下符合兩個邏輯的就行了。

有了這些準備以后,我們可以進階的再看一個題目(題目來自于BUUCTF)。

我們邁過第一關以后會看到這個頁面,F12得到了提示。

$a = $GET['a'];$b = $_GET['b'];if($a != $b && md5($a) == md5($b)){// wow, glzjin wants a girl friend.

知識補充

md5( string $str [, bool $raw_output = false ] ) : string

計算字符串的 MD5 散列值,md5函數告訴我們我們傳入的參數應該是string類型的,但如果我們傳入一個數組,它不會報錯,也不會解析其值,導致兩個數組的中無論什么值MD5都相同(出同樣的錯誤是不是也是一樣的呢)。

然后我們便可以傳入兩個數組來進行繞過了。

到了第三關,便和第二關大同小異了。

如果我們遇到強制類型轉換比如再傳參的參數前面有一個(string)類型轉換,那怎么辦,那邊要用的MD5強碰撞了(記得以前看過一個cissp的題目講的也是碰撞出MD5,也解釋MD5的不安全性)。

這里我們大多可能要用一下工具(fastcoll)

講完了MD5我們再將另一個,sha(題目來自于bugku,web29各種繞過)。

知識補充

sha1( string $str [, bool $raw_output = false ] ) : string

——計算字符串的 sha1 散列值,測試sha1()函數和md5()函數"殊途同歸"。

這里還有很多可以利用的函數,比如 json_decode() {傳入json形式的數據,類Python中的字典},不可否認的是任何函數的繞過都需要相關的邏輯判斷。

{json_decode()把接送格式的字符串解碼成了數組,而通過相應的邏輯判斷我們便可的繞過}

下面我們會介紹與弱類型相呼應的php函數。

unserialize函數問題

知識補充

對單一的已序列化的變量進行操作,將其轉換回 PHP 的值。

key和value是我們可以通過POST數據傳入的值,我們把它傳入bool值,unserialize函數解析為了數組,下面又因為使用的是 ==,根據php弱類型,bool值跟任何字符串都相等。

故判斷成立輸出了OK。

strpos函數問題

知識補充

strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int

返回 needle 在 haystack 中首次出現的數字位置。

問題的出現依然是出現了0=="admin"的弱類型比較的問題。

php中的哲學問題

(代碼中還有哲學問題?)

因為以前老師問過我們這個問題,為什么呢,用一句模糊的話來說"無限接近就是相等"。

in_array()函數問題

知識補充

in_array( mixed $needle , array $haystack [, bool $strict = false ] ) : bool

— 檢查數組中是否存在某個值,若第三個參數strict為默認的false,則使用松散比較。

這是便我們嘗試對比的結果了。

相關題目(php審計題目):

首先我們發現in_array()并沒有使用第三個參數,所以為默認值,可以進行松散比較。我們只要再*.php前面加上一個在range(1,24),比如23a.php。

array_search()問題

array_search ( mixed $needle , array $haystack [, bool $strict = false ] ) : mixed

— 在數組中搜索給定的值,如果成功則返回首個相應的鍵名,與in_array()函數類似。

strcmp()函數問題

知識補充

比較兩個字符串(區分大小寫)

strcmp(string1,string2)

返回值:

? 0 - 如果兩個字符串相等

? <0 - 如果 string1 小于 string2

? >0 - 如果 string1 大于 string2

測試缺陷的方法和MD5函數類似,我們不給予這個函數string類型,而是給它array類型的值。

發現它依然是給出警告,但依然判斷為ture,打印出了ok。(題目來自南京郵電大學網絡攻防訓練平臺-pass check)

<?php $pass1=***********;//被隱藏起來的密碼if(isset($pass)){if(@!strcmp($pass,$pass1)){echo "flag:nctf{*}";}else{echo "the pass is wrong!";}}else{echo "please input pass!";}?>/*wp:<?php $k[]=1;var_dump(!strcmp($k, "flag"));printf("n");?>*/

switch相關的問題

如果switch的case是數字類型的判斷的時候。switch會將參數轉換為int類型。

不要慌張,繼續加油哈。

end

本文始發于微信公眾號(雷石安全實驗室):php弱類型比較(松散比較)

總結

以上是生活随笔為你收集整理的PHP是弱类型还是强类型,php弱类型比较(松散比较) | CN-SEC 中文网的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。