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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

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

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

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

前言

php有八種類型

標(biāo)量類型:整數(shù)型integer,浮點(diǎn)型float,字符串類型string,布爾類型boolen

復(fù)合類型:對象 object,數(shù)組array

特殊類型:空null,資源resource

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

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

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

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

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

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

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

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

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

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

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

is_numeric() 函數(shù)

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

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

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

我們邁過第一關(guān)以后會(huì)看到這個(gè)頁面,F12得到了提示。

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

知識補(bǔ)充

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

計(jì)算字符串的 MD5 散列值,md5函數(shù)告訴我們我們傳入的參數(shù)應(yīng)該是string類型的,但如果我們傳入一個(gè)數(shù)組,它不會(huì)報(bào)錯(cuò),也不會(huì)解析其值,導(dǎo)致兩個(gè)數(shù)組的中無論什么值MD5都相同(出同樣的錯(cuò)誤是不是也是一樣的呢)。

然后我們便可以傳入兩個(gè)數(shù)組來進(jìn)行繞過了。

到了第三關(guān),便和第二關(guān)大同小異了。

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

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

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

知識補(bǔ)充

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

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

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

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

下面我們會(huì)介紹與弱類型相呼應(yīng)的php函數(shù)。

unserialize函數(shù)問題

知識補(bǔ)充

對單一的已序列化的變量進(jìn)行操作,將其轉(zhuǎn)換回 PHP 的值。

key和value是我們可以通過POST數(shù)據(jù)傳入的值,我們把它傳入bool值,unserialize函數(shù)解析為了數(shù)組,下面又因?yàn)槭褂玫氖?==,根據(jù)php弱類型,bool值跟任何字符串都相等。

故判斷成立輸出了OK。

strpos函數(shù)問題

知識補(bǔ)充

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

返回 needle 在 haystack 中首次出現(xiàn)的數(shù)字位置。

問題的出現(xiàn)依然是出現(xiàn)了0=="admin"的弱類型比較的問題。

php中的哲學(xué)問題

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

因?yàn)橐郧袄蠋焼栠^我們這個(gè)問題,為什么呢,用一句模糊的話來說"無限接近就是相等"。

in_array()函數(shù)問題

知識補(bǔ)充

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

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

這是便我們嘗試對比的結(jié)果了。

相關(guān)題目(php審計(jì)題目):

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

array_search()問題

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

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

strcmp()函數(shù)問題

知識補(bǔ)充

比較兩個(gè)字符串(區(qū)分大小寫)

strcmp(string1,string2)

返回值:

? 0 - 如果兩個(gè)字符串相等

? <0 - 如果 string1 小于 string2

? >0 - 如果 string1 大于 string2

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

發(fā)現(xiàn)它依然是給出警告,但依然判斷為ture,打印出了ok。(題目來自南京郵電大學(xué)網(wǎng)絡(luò)攻防訓(xùn)練平臺(tái)-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相關(guān)的問題

如果switch的case是數(shù)字類型的判斷的時(shí)候。switch會(huì)將參數(shù)轉(zhuǎn)換為int類型。

不要慌張,繼續(xù)加油哈。

end

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。