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

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

时间:2025-01-13 15:32:45浏览次数:3  
标签:实战 加密 text decrypt 加解密 解密 黑客技术 encrypt data

场景

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

前两天看到有个师傅的使用双层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   
}

调试

在这里插入图片描述

效果

在这里插入图片描述

总结

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

在这里插入图片描述

网络安全学习路线&学习资源

网络安全的知识多而杂,怎么科学合理安排?

下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!

初级网工

1、网络安全理论知识(2天)

①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)

①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)

①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)

①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)

①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)

①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

“脚本小子”成长进阶资源领取

7、脚本编程(初级/中级/高级)

在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。

8、超级网工

这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。感兴趣的童鞋可以研究一下,不懂得地方可以【点这里】加我耗油,跟我学习交流一下。

网络安全工程师企业级学习路线

如图片过大被平台压缩导致看不清的话,可以【点这里】加我耗油发给你,大家也可以一起学习交流一下。

一些我自己买的、其他平台白嫖不到的视频教程:

需要的话可以扫描下方卡片加我耗油发给你(都是无偿分享的),大家也可以一起学习交流一下。

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:

此教程为纯技术分享!本书的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本书的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失!!!

标签:实战,加密,text,decrypt,加解密,解密,黑客技术,encrypt,data
From: https://blog.csdn.net/wangluo12138/article/details/145116744

相关文章

  • DevOps 企业级 CI/CD 实战 —— 整合 GitLab+Jenkins+Harbor+Docker 实现代码全自动化
    前言随着AI人工智能、云计算、Docker、K8S等容器技术等的发展,DevOps得到了广泛的应用和推广,CI/CD(持续集成/持续部署)等概念不断深化和完善。CI/CD是现代软件开发中的重要实践,CI(ContinuousIntegration,持续集成)强调开发人员频繁地将代码集成到共享仓库,并且每次集成都......
  • 大模型实战项目最新:2024年大模型开源项目大盘点
    当大模型成本逐渐降低,可靠性提升后,这意味着越来越多的业务应用将会与LLM结合,为了让这种结合更加顺畅,需要有与现有基础设施相兼容的工具和框架来支撑LLM应用开发的快速开发通用大模型性能评测参见:github:https://github.com/CLUEbenchmark/SuperCLUE在线报告:https://www......
  • 大模型项目必备:零基础到精通的实战整理,值得收藏
    一、大模型开发整理流程1.1、什么是大模型开发我们将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用称为大模型开发。开发大模型相关应用,其技术核心点虽然在大语言模型上,但一般通过调用API或开源......
  • ELFK日志采集实战
    一、日志分析概述日志分析是运维工程师解决系统故障,发现问题的主要手段日志主要包括系统日志、应用程序日志和安全日志系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因经常分析日志可以了解服务器的负荷,性能安全性,从而及时......
  • 项目管理信息化项目交付为什么越来越难?-中小企实战运营和营销工作室博客
    项目管理信息化项目交付为什么越来越难?-中小企实战运营和营销工作室博客项目管理信息化项目交付越来越难主要有以下几方面原因:1,项目需求方面需求复杂多变:随着企业业务的不断拓展和精细化管理的要求,信息化项目需求日益复杂。例如,企业可能要求信息系统同时满足财务核算、......
  • 项目管理方面有哪些措施可以应对信息化项目交付难的问题?-中小企实战运营和营销工作室
    项目管理方面有哪些措施可以应对信息化项目交付难的问题?-中小企实战运营和营销工作室博客在项目管理方面,可以采取以下措施来应对信息化项目交付难的问题:1,需求管理加强需求收集与沟通:在项目初期,组织专门的需求收集会议,要求业务部门和技术部门共同参与。采用用户故事地图......
  • Java实现角色及菜单权限管理的全面解析与实战
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......
  • 【机器学习】Kaggle实战Rossmann商店销售预测(项目背景、数据介绍/加载/合并、特征工程
    文章目录1、项目背景2、数据介绍3、数据加载3.1查看数据3.2空数据处理3.2.1训练数据3.2.2测试数据3.3.3商店数据处理3.3.4销售时间关系4、合并数据5、特征工程6、构建训练数据和测试数据7、数据属性间相关性系数8、提取模型训练的数据集9、构建模型9.1定义评价......
  • 深度学习实战中英字符识别-网页版
    文章目录前言视频演示效果1.DB文字定位环境配置安装教程与资源说明1.1DB概述1.2DB算法原理1.2.1整体框架1.2.2特征提取网络Resnet1.2.3自适应阈值1.2.4文字区域标注生成1.2.5DB文字定位模型训练2.CRNN文字识别2.1CRNN概述2.2CRNN原理2.2.1CRNN网络架构实现2......
  • 【C++项目实战】类和对象入门实践:日期类实现万字详解
          ......