久久久久在线观看_又色又爽又黄的免费视频播放_一区中文字幕_日韩电影在线播放

今日頭條 焦點資訊 營銷之道 企業(yè)報道 淘寶運營 網(wǎng)站建設 軟件開發(fā) 400電話
  當前位置: 首頁 » 資訊 » 軟件開發(fā) » 正文

PHP弱類型詳解

放大字體  縮小字體 發(fā)布日期:2018-02-26  來源:企業(yè)800網(wǎng)  作者:新格網(wǎng)  瀏覽次數(shù):194  【去百度看看】
核心提示:最近做ctf題目會經(jīng)常碰到PHP弱類型的題目,本文主要和大家分享PHP弱類型總結,希望能幫助到大家。

最近做ctf題目會經(jīng)常碰到PHP弱類型的題目,本文主要和大家分享PHP弱類型總結,希望能幫助到大家。

知識介紹:

php中有兩種比較的符號 == 與 ===

<?php$a = $b ;$a===$b ;
?>

=== 在進行比較的時候,會先判斷兩種字符串的類型是否相等,再比較
== 在進行比較的時候,會先將字符串類型轉化成相同,再比較

如果比較一個數(shù)字和字符串或者比較涉及到數(shù)字內容的字符串,則字符串會被轉換成數(shù)值并且比較按照數(shù)值來進行

php不會嚴格檢驗傳入的變量類型,也可以將變量自由的轉換類型。

比如 在$a == $b的比較中

$a = null; $b = false; //為真  
$a = ''; $b = 0; //同樣為真

另外,如果一個數(shù)值和字符串進行比較的時候,會將字符串轉換成數(shù)值

<?phpvar_dump("admin"==0);  //truevar_dump("1admin"==1); //truevar_dump("admin1"==1) //falsevar_dump("admin1"==0) //truevar_dump("0e123456"=="0e4456789"); //true ?>

1 、觀察上述代碼,"admin"==0 比較的時候,會將admin轉化成數(shù)值,強制轉化,由于admin是字符串,轉化的結果是0自然和0相等。

2 、"1admin"==1 比較的時候會將1admin轉化成數(shù)值,結果為1,而“admin1“==1 卻等于錯誤,也就是"admin1"被轉化成了0。

3 、"0e123456"=="0e456789"相互比較的時候,會將0e這類字符串識別為科學技術法的數(shù)字,0的無論多少次方都是零,所以相等。
應當注意的是: 當一個字符串欸當作一個數(shù)值來取值,其結果和類型如下:如果該字符串沒有包含 '.' ,'e' , 'E',并且其數(shù)值值在整形的范圍之內 該字符串被當作int來取值,其他所有情況下都被作為float來取值,該字符串的開始部分決定了它的值,如果該字符串以合法的數(shù)值開始,則使用該數(shù)值,否則其值為0。

繞過類型
md5繞過(Hash比較缺陷)

<?php  if (isset($_GET['Username']) && isset($_GET['password'])) {      $logined = true;      $Username = $_GET['Username'];      $password = $_GET['password'];
  
       if (!ctype_alpha($Username)) {$logined = false;}
       if (!is_numeric($password) ) {$logined = false;}
       if (md5($Username) != md5($password)) {$logined = false;}
       if ($logined){
     echo "successful";
       }else{
            echo "login failed!";
         }
     }
 ?>

題目大意是要輸入一個字符串和數(shù)字類型,并且他們的md5值相等,就可以成功執(zhí)行下一步語句

介紹一批md5開頭是0e的字符串 上文提到過,0e在比較的時候會將其視作為科學計數(shù)法,所以無論0e后面是什么,0的多少次方還是0。md5('240610708') == md5('QNKCDZO')成功繞過!
==南郵ctf bypass again==
打開后看到代碼:

if (isset($_GET['a']) and isset($_GET['b'])) {if ($_GET['a'] != $_GET['b'])if (md5($_GET['a']) == md5($_GET['b']))die('Flag: '.$flag);elseprint 'Wrong.';
}

源碼要求提交兩個不相等的值使他們的md5值嚴格相等。md5()函數(shù)要求接收一個字符串,若傳遞進去一個數(shù)組,則會返回null,即var_dump(md5(array(2))===null);值為bool(true)

可以向$_GET數(shù)組傳入兩個名為a、b的不相等的數(shù)組,從而導致md5()均返回空,于是得到flag。 構造url:http://chinalover.sinaapp.com/web17/index.php?a[]=0&b[]=1 json繞過

<?phpif (isset($_POST['message'])) {    $message = json_decode($_POST['message']);    $key ="*********";
    if ($message->key == $key) {
        echo "flag";
    } 
    else {
        echo "fail";
    }
 } else{
     echo "~~~~";
 }
?>

輸入一個json類型的字符串,json_decode函數(shù)解密成一個數(shù)組,判斷數(shù)組中key的值是否等于 $key的值,但是$key的值我們不知道,但是可以利用0=="admin"這種形式繞過

最終payload message={"key":0}。

strcmp漏洞繞過

<?php
     $password="***************"
      if(isset($_POST['password'])){ 
         if (strcmp($_POST['password'], $password) == 0) {             echo "Right!!!login success";n             exit();
         } else {             echo "Wrong password..";
         } ?>

strcmp是比較兩個字符串,如果str1<str2 則返回<0 如果str1大于str2返回>0 如果兩者相等 返回0

我們是不知道$password的值的,題目要求strcmp判斷的接受的值和$password必需相等,strcmp傳入的期望類型是字符串類型,如果傳入的是個數(shù)組會怎么樣呢

我們傳入 password[]=xxx 可以繞過 是因為函數(shù)接受到了不符合的類型,將發(fā)生錯誤,但是還是判斷其相等

payload: password[]=xxx

相關推薦:

php弱類型語言中關于類型判斷的實例分析

PHP弱類型安全問題總結

PHP弱類型變量是如何實現(xiàn)的

以上就是PHP弱類型詳解的詳細內容,更多請關注php中文網(wǎng)其它相關文章!

 
關鍵詞: php,詳解,類型
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 違規(guī)舉報 ]  [ 關閉窗口 ]

 
0條 [查看全部]  相關評論

 
網(wǎng)站首頁 | 關于我們 | 聯(lián)系方式 | 使用協(xié)議 | 版權隱私 | 網(wǎng)站地圖 | 排名推廣 | 廣告服務 | 積分換禮 | 網(wǎng)站留言 | RSS訂閱 | 吉ICP備11001726號-6
企業(yè)800網(wǎng) · 提供技術支持