English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french
查看: 4|回复: 0

渗透测试-前端加密分析之AES

[复制链接]
查看: 4|回复: 0

渗透测试-前端加密分析之AES

[复制链接]
查看: 4|回复: 0

387

主题

0

回帖

1171

积分

金牌会员

积分
1171
wsx

387

主题

0

回帖

1171

积分

金牌会员

积分
1171
2025-2-7 01:26:44 | 显示全部楼层 |阅读模式
前言

本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AES(CBC) 和 AES(ECB) 加密。
因为编写Yakit热加载代码后就可以正常爆破密码,所以不需要每次都演示。以后的文章会省略掉爆破密码这一步,直接输入正确密码查看效果。
前端加密登录表单-AES(CBC)

分析


查看源代码,可以看到加密方式为AES,查询网上资料得知,此encrypt方法默认为CBC模式。

key为:1234123412341234

iv为随机生成的:

将用户名和密码以json的格式进行AES加密


使用CyberChef加密

替换请求data内容,验证成功。
POST /crypto/js/lib/aes/cbc/handler HTTP/1.1Host: 127.0.0.1:8787Content-Type: application/jsonContent-Length: 169{  "data": "2/eylw258wQNJQznPd5zr7xpNWzPR3vcgCmY3zwuTdW0WjSwbNzAhTraiebLdPRK",  "key": "31323334313233343132333431323334",  "iv": "67ba30beaabf8ccfebeca655d487805a"}
热加载

这是本人写的Yakit热加载代码,通过beforeRequest劫持请求包,使用encryptData函数进行加密,最终实现热加载自动加密功能。
encryptData = (packet) => {    body = poc.GetHTTPPacketBody(packet)    hexKey = "31323334313233343132333431323334"    hexIV = "67ba30beaabf8ccfebeca655d487805a"    key = codec.DecodeHex(hexKey)~    iv = codec.DecodeHex(hexIV)~    data = codec.AESCBCEncrypt(key /*type: []byte*/, body, iv /*type: []byte*/)~    data = codec.EncodeBase64(data)    body = f`{"data": "${data}","key": "${hexKey}","iv": "${hexIV}"}`    return string(poc.ReplaceBody(packet, body, false))}//发送到服务端修改数据包beforeRequest = func(req){    return encryptData(req)}
效果:

前端加密登录表单-AES(ECB)

分析

模式变为AES的ECB模式,其他的与CBC模式基本一样。

zqBATwKGlf9ObCg8Deimijp+OH1VePy6KkhV1Z4xjiDwOuboF7GPuQBCJKx6o9c7
热加载

功能跟上面大致一样。ECB模式不需要iv,修改成ECB加密,然后删除掉iv相关代码即可。
encryptData = (packet) => {    body = poc.GetHTTPPacketBody(packet)    hexKey = "31323334313233343132333431323334"    key = codec.DecodeHex(hexKey)~    //ECB模式加密    data = codec.AESECBEncrypt(key /*type: []byte*/, body, nil /*type: []byte*/)~    data = codec.EncodeBase64(data)    body = f`{"data": "${data}","key": "${hexKey}"}`    return string(poc.ReplaceBody(packet, body, false))}//发送到服务端修改数据包// beforeRequest = func(req){//     return encryptData(req)// }//调试用packet = <<<TEXTPOST /crypto/js/lib/aes/cbc/handler HTTP/1.1Host: 127.0.0.1:8787Content-Type: application/jsonContent-Length: 179{"username":"admin","password":"admin123"}TEXTresult = (encryptData(packet))print(result)成功加密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

387

主题

0

回帖

1171

积分

金牌会员

积分
1171

QQ|智能设备 | 粤ICP备2024353841号-1

GMT+8, 2025-3-10 15:46 , Processed in 0.776701 second(s), 30 queries .

Powered by 智能设备

©2025

|网站地图