在線結算、在線支付、自動到帳、自動上貨、網購批發 專注服務中小企業 會員中心 | 設為首頁 | 加入收藏 | 繁體中文
服務熱線:400-6966-014 點擊這里給我發消息
網站首頁軟件購買軟件動態軟件下載常見問題網絡加速器快速備案My18高防云My18收銀寶全網推廣合作商招賢納士關于我們媒體報道
欄目導航
新聞搜索
熱門點擊
聯系我們
  • 網址:www.apysv.club
  • 郵箱:[email protected]
  • 電話:4006966014
  • 地址:山東省東營市東營區西二路471號北海嘉園C座305號

  • 首頁新聞中心  
     
    php中md5()的安全問題
    來源:轉載 點擊數:277次 更新時間:2019-10-6 11:46:21

    文章來源https://www.cnblogs.com/piaomiaohongchen/p/10659359.html

            安全問題1:

      1.x=任意字符串  md5('x')=0e***  

      2.y=任意字符串  md5('y')=0e***

      如果x==y,php會返回true,在有些時候可以繞過邏輯判斷

      x==0 /y==0都為true,有些時候可以用來繞過邏輯判斷

      原理:php使用==會把兩邊的數值進行類型轉換,0e***都轉換成了0

      例子var_dump(md5('240610708') == md5('QNKCDZO'));  返回true

      修復方案,進行類型匹配使用強等于(===)進行判斷

      安全問題2:

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

      如果設置第二個參數為true,那么 MD5 報文摘要將以16字節長度的原始二進制格式返回。

      就是說返回16個字節

      漏洞測試demo:

      md5_login.html

      

    復制代碼
    <html> <head>用戶登錄</head> <form name="LoginForm" method="post" action="md5_loop.php" onSubmit="return InputCheck(this)"> <p> <label for="username" class="label">用戶名:</label> <input id="username" name="username" type="text" class="input" /> <p/> <p> <label for="password" class="label">密 碼:</label> <input id="password" name="password" type="password" class="input" /> <p/> <p> <input type="submit" name="submit" value="  確 定  " class="left" /> </p> </form> </html>
    復制代碼

     

    md5_loop.php

      

    復制代碼
    <?php $username=$_POST['username']; $password=$_POST['password']; error_reporting(0); $link = mysql_connect('localhost', 'root', 'root'); if (!$link) { die('Could not connect to MySQL: ' . mysql_error()); 
    } // 選擇數據庫 $db = mysql_select_db("test", $link); if(!$db)
    { echo 'select db error'; exit();
    } // 執行sql
    //$password = "admin"; $sql = "SELECT * FROM login WHERE username='$username' and password = '".md5($password,true)."'"; var_dump($sql); $check_query=mysql_query($sql) or die('<pre>' . mysql_error() . '</pre>' ); if($result = mysql_fetch_array($check_query)){ echo "login true";
    
    } else { exit('登錄失敗!點擊此處 <a href="javascript:history.back(-1);">返回</a> 重試');  
    
    } //$row1 = mysql_fetch_row($result);
    //var_dump($row1); mysql_close($link); ?>
    復制代碼

      當用戶輸入任意賬號和密碼ffifdyop

      就可以登錄系統:

      

     

    任意登錄原理講解:

      首先是sql語句:

      SELECT * FROM login WHERE username='hello' and password=''

      如果password萬能密碼是SELECT * FROM login WHERE username='hello' and password='' or '1'--+

      他會提示登錄成功,如果是' or '1aaa會進行類型轉換,轉換成int類型的1,or '1aaa相當于1,那么' or 'a1就相當于0

      0相當于false

      

     

     

     

     

      因為設置md5設置第二個參數是true,那么會自動截取前16個字節的數據

      就是:md5('ffifdyop')= 276f722736c95d99e921722cf9ed621c

      獲取十六個字節=276f722736c95d99

      十六個字節轉換成字符串就是%27%6f%72%27%36%c9%5d%99

      解碼

      

     

    再次帶入數據庫查詢就是:   

       SELECT * FROM login WHERE username='hello' and password = ''or'6蒥欓!r,b'

       mysql中,只要不是0和空等,那就為true。

      

       修復方案:md5+鹽(salt)+別設置true

      黑盒測試的時候可以嘗試:任意賬號+密碼ffifdyop

    【刷新頁面】【加入收藏】【打印此文】 【關閉窗口】
    上一篇:歐盟金融事務專員稱將制定新法規監管天秤幣 下一篇:Paypal或將退出Facebook旗下加密貨幣Libra項目
     

      友情鏈接
    騰訊企業QQ招商銀行金山360工商銀行支付寶財付通
    快遞查詢東營招聘網綠色軟件下載軟件盒子天空下載西西軟件園太平洋電腦網天極下載多多軟件站
    好特下載飛翔下載泡泡網下載ECSHOP非凡軟件站ZOL分流下硅谷動力豆豆網it168下
    廣告服務 | 聯系我們 | 關于我們 | 版權聲明 | 友情鏈接
    Copyright 2009 - 2010 Powered By Zhirui Ver 3.6.5 魯ICP備13019314號-1
    郵件:[email protected] 電話:4006966014  地址:山東省東營市東營區西二路471號北海嘉園C座305號  法律顧問:山東眾成仁和律師事務所
    11选5走势图基本
    36选7好彩1 山东11选5开售时间 篮球彩票比分 如何看主力筹码分布图 陕西麻将游戏下载 天津福彩快乐10分开奖结果查询 11云南选五5开奖 姚记电玩app下载 吉祥麻将吉林市小鸡飞蛋 东方6+1开奖时间 广东腾讯麻将1.5.0旧版 什么股票平台 随便玩长沙麻将 辽宁快乐12前三遗 江苏十一选五现场开 吉祥棋牌吉林麻将下载