一、PHP弱類型 is_numeric()
輸入:127.0.0.1/BWVS/bug/php/code.php?
#?1、源代碼分析
如果num不是數字,那么就輸出num,同時如果num==1,就輸出flag。即num要是字符串又要是數字
#?2、函數分析:
is_numeric()函數:函數用于檢測變量是否為數字或數字字符串。如果指定的變量是數字和數字字符串則返回 TRUE,否則返回 FALSE,注意浮點型返回空值,即 FALSE。
立刻想到PHP的弱類型比較,構造payload:?num=1shu
#?3、payload解析:
1shu不是數字或數字字符串則返回false,!false為ture 輸出num。php弱類型會自動將第一位為數字的字符串為該數字的值,否則為值0。所以1shu會被解析為1==1。成功返回flag
#?二、strcmp函數缺陷
#?1、理論知識
1、strcmp(str1,str2)函數用來字符串的比較,當str1 < str2時 返回小于0 ,str1 > str2時返回>0的數,str1 == str2時返回 等于0
2、但是他不能判斷數組,直接返回flase
所以可以直接構造payload: ?password[]=1 查看源代碼 /bug/php/md5.php
#?2、代碼分析
<?phpinclude_once('../../bwvs_config/sys_config.php');require_once('../../header.php');$password=$_GET['password'];if(strcmp('21232f297a57a5a743894a0e4a801fc3',$password)){ //當password==21232f297a57a5a743894a0e4a801fc3 時相等 為falseecho 'password is false ! ! ! ! !';}else{echo 'flag is here!!<br>';echo 'flag{挑戰成功}';}?><?php
require_once('../info.php');
?>
發現當password為這串字符串時,即?password=21232f297a57a5a743894a0e4a801fc3時,也能得到flag