freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

经验分享 | WEB渗透测试中遇到加密内容的数据包该如何测试
2024-07-31 17:09:06

文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!

0x01 加解密的意义

现阶段的渗透测试让我发现越来越多的系统不只是在漏洞修补方面做了功夫,还对一些参数进行加密,干扰爬虫或者渗透测试的进行。

在我小白阶段看到下图这种加密方式,第一个反应是base64解一下,如果不行那么这个系统是安全了

1722412277_66a9ecf5e340350047e32.png!small?1722412277969

但实际上这类是AES加密,大概的样式像这样

AAAAA+AAAAA/AAA=

可以理解为在base64那一类字母和"=="的特征中,再参入了"+"和"/"这类字符的一般就是AES加密了

0x02 密文大致原理

要解开AES的关键在于获取到他的参数 秘钥(KEY)和偏移量(IV)
但是AES有不同的模式,这里举最常见的两种即CBC,ECB
CBC需要秘钥(KEY)和偏移量(IV)才能解密
ECB仅需要秘钥(KEY)就能解密
1722414373_66a9f525cc235c31218bd.png!small?1722414373659然后就可以通过加解密网站调试了

在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网 (chacuo.net)

1722414625_66a9f621446707b27aeab.png!small?1722414625163

要看具体AES的解释还请看下面的文章
AES加密算法原理的详细介绍与实现-CSDN博客

0x03 怎么定位iv与key的位置

我一般是直接打开F12控制台去搜下面几个关键词

crypt(这个是AES经常会引用的框架,所以搜这个经常能搜到加解密的方法名称类似encrypt或是decrypt)

1722415647_66a9fa1fb73540c96b2a5.png!small?1722415648250

1722415934_66a9fb3e87e74085b9893.png!small?1722415934531

刚开始还不太会的时候就把所有这种相关的方法都打上断点

1722416100_66a9fbe4ccc1c0d227aa1.png!small?1722416100813

然后就是运行加密的功能就会开始debug模式

1722416270_66a9fc8e70c6160773be4.png!small?1722416270381

或是到这一步decrypt解密方法的时候 直接去控制台进行调用加密数据 也是一样的
1722416409_66a9fd19936495eedb199.png!small?1722416409481按照上面decrypt(data) 输入加密的data即可 类似这样decrypt("AAAA+AAA/AA=")
1722416402_66a9fd123e0faed8b8492.png!small?1722416407278

0x04 AES批量加密

关于批量加密AES进行重放可以用BURP插件BurpCrypto1722416708_66a9fe447f52a21b3b8e6.png!small?1722416708247或者你想本地加密可以用python
我写了个,懒人可以用一下

import base64
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding

def encrypt_file(input_filename, output_filename, key, iv):
backend = default_backend()
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)

with open(input_filename, 'r', encoding='utf-8') as input_file, open(output_filename, 'w', encoding='utf-8') as output_file:
for line in input_file:
encryptor = cipher.encryptor() # 每行创建一个新的Encryptor
padder = padding.PKCS7(128).padder()
padded_data = padder.update(line.encode('utf-8')) + padder.finalize()
encrypted_data = encryptor.update(padded_data) + encryptor.finalize()

# 将二进制数据转换为Base64编码的字符串
encoded_data = base64.b64encode(encrypted_data).decode('utf-8')
output_file.write(encoded_data + '\n') # 每行后添加换行符

# 使用预定义的密钥和IV
key = b'5rer641QMOG9FI62PCfkzB4Rx9B3akti' # 确保这是32字节长
iv = b'12hOaPl0RDfSx4pJ' # 确保这是16字节长

input_filename = 'plaintext.txt'
output_filename = 'ciphertext.txt'

encrypt_file(input_filename, output_filename, key, iv)
# 渗透测试 # 渗透测试工具 # 数据加解密
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录