ctf中弱型別比較
php弱型別比較
php中其中兩種比較符號:
==:先將字串型別轉化成相同,再比較
===:先判斷兩種字串的型別是否相等,再比較
字串和數字比較使用==時,字串會先轉換為數字型別再比較
var_dump
('a'==0
);//true,此時a字串型別轉化成數字,因為a字串開頭中沒有找到數字,所以轉換為0
var_dump
('123a'
==123);
//true,這裡'123a'會被轉換為123
var_dump
('a123'
==123);
//false,因為php中有這樣乙個規定:字串的開始部分決定了它的值,如果該字串以合法的數字開始,則使用該數字至和它連續的最後乙個數字結束,否則其比較時整體值為0。
舉例:var_dump
('123a1'
==123);
//true
var_dump
('1233a'
==123);
//false
注:<、>、<=、>=都存在和==相同的弱型別,原理相同!!!
xctf_******_php
<
?php
show_source
(__file__)
;include
("config.php");
$a=@$_get[
'a']
;$b=@$_get[
'b'];if
($a==
0 and $a)if(
is_numeric
($b))if
($b>
1234)?
>
(1)這裡包含了config.php
(2)url接收引數a和b的值
(3)如果$a等於0 and a,輸
出a,輸出
a,輸出
flag1
(4)如果b是數
字或者字
符串那麼
退出當前
指令碼(5
)如
果b是數字或者字串那麼退出當前指令碼 (5)如果
b是數字或者
字串那
麼退出當
前指令碼(
5)如果
b>1234,輸出fla
g2所以
,這裡我
們既要保
證輸
出flag2 所以,這裡我們既要保證輸出
flag2所
以,這裡
我們既要
保證輸出
a,b ,又
要保
證b,又要保證
b,又要保證
b是數字,那麼就用到php的弱型別比較了
那麼a=d&b=2222a
執行後:
if
(true and true)if
(is_numeric
(2222a))if
(2222a>
1234){
echo $flag2;
php 弱型別比較
php中 是弱等於,不會比較變數型別 是強等於,會先比較變數型別。0e 開頭跟數字的字串 例如 0e123 會當作科學計數法去比較,所以和0相等 0x 開頭跟數字的字串 例如 0x1e240 會被當作16進製制數去比較 布林值true和任意字串都弱相等。當比較的一方是字串時,會先把其轉換為數字,不能...
php弱型別比較
題目 1.開啟頁面,進行 審計,發現同時滿足 a 0 和 a 時,顯示flag1。2.php中的弱型別比較會使 abc 0為真,所以輸入a abc時,可得到flag1,如圖所示。abc可換成任意字元 3.is numeric 函式會判斷如果是數字和數字字串則返回 true,否則返回 false,且p...
往事重提 php弱型別之比較
php是弱型別語言,比如 變數 v的值為 0 false null 未定義 if v echo true 都會輸出true,所以這些條件都為假,這在其他一些語言中是不能容忍的。於是我們在日常開發中也慢慢的習慣了這種弱型別。以至於我們在判斷字串相等時,也會直接忽略了0的存在直接比較,比如 v arra...