PHP弱型別(一)

2021-10-13 15:39:43 字數 2172 閱讀 5319

1.== 與 ===:

php在使用雙等號(==)時,不會嚴格檢驗傳入的變數型別,在以下**中:
<

?php

var_dump

(false==0

);//執行結果bool(true)

var_dump

(false

=='');

//執行結果bool(true)

var_dump

(false

=='0');

//執行結果bool(true)

var_dump(0

=='0');

//執行結果bool(true)

var_dump(0

=='1abc');

//執行結果bool(false)

var_dump(1

=='1abc');

//執行結果bool(true)

var_dump(0

=='abc1');

//執行結果bool(true)

字串轉換成數值,即為0;

當字串為字母與數字組合時,該字串的開始部分決定了它的值,如果該字串以合法的數值開始,(字串沒有包含』.』,『e』,'e』並且其數值值在整形的範圍之內,該 符串被當作int來取值,其他所有情況下都被作為float來取值)則使用該數值,否則其值為0。

這是一道簡單的ctf題:

既要保證變數num不為數字,又要滿足其等於1
所以payload:?num=1***(***為任意字母)

2.hash比較缺陷:

php中,hash演算法,如md5,sha1演算法,在進行加密時,會產生0e開頭,後面為數字的加密結果,當與數字比較時,會被解析成0×10^n,會被判斷與0相等。

<

?php

$username = $_post[

'username'];

$password = $_post[

'password'];

$userinfo=

getuserpass

($username)

;//當userinfo中的密碼以0e開頭,隨意構造password即可成功

if($userinfo[

'password'

==md5

($password)

)else

常見此類md5加密字串:
240610708: 0e462097431906509019562988736854

qlthndt: 0e405967825401955372549139051580

qnkcdzo: 0e830400451993494058024219903391

pjnpdwy: 0e291529052894702774557631701704

nwwkitq: 0e763082070976038347657360817689

noopcjf: 0e818888003657176127862245791911

mmhuwuv: 0e701732711630150438129209816536

mauxxqc: 0e478478466848439040434801845361

ihkfrns: 0e256160682445802696926137988570

常見此類sha1加密字串:
10932435112: 0e07766915004133176347055865026311692244

aarozmok: 0e66507019969427134894567494305185566735

aak1stfy: 0e76658526655756207688271159624026011393

aao8zkzf: 0e89257456677279068558073954252716165668

aa3off9m: 0e36977786278517984959260394024281014729

php 弱型別總結

最近ctf比賽,不止一次的出了php弱型別的題目,藉此想總結一下關於php弱型別以及繞過方式 php中有兩種比較的符號 與 a b a b 在進行比較的時候,會先判斷兩種字串的型別是否相等,再比較 在進行比較的時候,會先將字串型別轉化成相同,再比較 如果比較乙個數字和字串或者比較涉及到數字內容的字串...

php 弱型別比較

php中 是弱等於,不會比較變數型別 是強等於,會先比較變數型別。0e 開頭跟數字的字串 例如 0e123 會當作科學計數法去比較,所以和0相等 0x 開頭跟數字的字串 例如 0x1e240 會被當作16進製制數去比較 布林值true和任意字串都弱相等。當比較的一方是字串時,會先把其轉換為數字,不能...

php 弱型別總結

0x01 前言 最近ctf比賽,不止一次的出了php弱型別的題目,藉此想總結一下關於php弱型別以及繞過方式 0x02 知識介紹 php中有兩種比較的符號 與 1 2 a b 3 a a a b 4 在進行比較的時候,會先判斷兩種字串的型別是否相等,再比較 在進行比較的時候,會先將字串型別轉化成相同...