md5、sha1弱比較,md5($pass,true)總結


------------恢復內容開始------------

md5、sha1弱比較,md5($pass,true)繞過

一、md5、sha1弱比較

1.md5

  • $a = $GET['a'];
    $b = $_GET['b'];

    if($a != $b && md5($a) == md5($b)){...}

    一般遇到這種情況,都可以用md5的弱比較繞過

    部分字符串md5加密之后為0exxxx的格式,相當於0的xxxx次方,所以無論xxxx是什么,函數判斷時都會認為相等。例如

    a=QNKCDZO,加密后為0e830400451993494058024219903391

    b=240610708,加密后為0e462097431906509019562988736854

    所以既滿足了a!=b,也滿足了md5($a) == md5($b)

    這里附上常見的0E開頭的MD5
    0e開頭的md5和原值:
    QNKCDZO
    0e830400451993494058024219903391
    240610708
    0e462097431906509019562988736854
    s1091221200a
    0e940624217856561557816327384675
    s1836677006a
    0e481036490867661113260034900752
    s532378020a
    0e220463095855511507588041205815
    s1665632922a
    0e731198061491163073197128363787
    s1184209335a
    0e072485820392773389523109082030
    s1885207154a
    0e509367213418206700842008763514
    s155964671a
    0e342768416822451524974117254469
    s1502113478a
    0e861580163291561247404381396064
    s214587387a
    0e848240448830537924465865611904
    s878926199a
    0e545993274517709034328855841020

     

  • if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2']))

    對於這種post傳值的情況,md5函數無法處理數組,也就是如果把a、b變成兩個數組傳入變量時,可以繞過md5

    例如

    a[]=1&b[]=2

    既滿足a!=b,也可以繞過md5()函數

2.類似的函數還有sha1()散列加密 ,例如兩個不同的字符串經過sha1加密后均為0E開頭即可繞過

以下串在sha1加密后以0E開頭,並且后面均為純數字
aaroZmOk
aaK1STfY

sha1對數組不敏感,所以也可以用同上的數組方法繞過

二、md5($pass,true)

https://blog.csdn.net/March97/article/details/81222922

師傅已經講得很詳細了,總而言之就是當注入的pass=ffifdyop時,ffifdyop經過md5加密后變成 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c 被返回, ' \ '后面的3個字符連同' \ '算一個字符,比如’ \xc9 ‘,所以上述一共16個字符。函數md5($pass,true)返回為true。

 

 

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM