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

前言

本文是高级前端加解密与验签实战的第3篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端 AES(CBC) 和 AES(ECB) 加密。

因为编写Yakit热加载代码后就可以正常爆破密码,所以不需要每次都演示。以后的文章会省略掉爆破密码这一步,直接输入正确密码查看效果。

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

分析

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

key为:1234123412341234

iv为随机生成的:

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

使用CyberChef加密

替换请求data内容,验证成功。

http 复制代码
POST /crypto/js/lib/aes/cbc/handler HTTP/1.1
Host: 127.0.0.1:8787
Content-Type: application/json
Content-Length: 169

{
  "data": "2/eylw258wQNJQznPd5zr7xpNWzPR3vcgCmY3zwuTdW0WjSwbNzAhTraiebLdPRK",
  "key": "31323334313233343132333431323334",
  "iv": "67ba30beaabf8ccfebeca655d487805a"
}

热加载

这是本人写的Yakit热加载代码,通过beforeRequest劫持请求包,使用encryptData函数进行加密,最终实现热加载自动加密功能。

yaklang 复制代码
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相关代码即可。

yaklang 复制代码
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 = <<<TEXT
POST /crypto/js/lib/aes/cbc/handler HTTP/1.1
Host: 127.0.0.1:8787
Content-Type: application/json
Content-Length: 179

{"username":"admin","password":"admin123"}
TEXT
result = (encryptData(packet))
print(result)

成功加密

相关推荐
白帽子凯哥哥9 小时前
如何从零开始搭建一个安全的渗透测试实验环境?
安全·web安全·网络安全·渗透测试·漏洞挖掘
独行soc10 小时前
2025年渗透测试面试题总结-280(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
介一安全14 小时前
【Frida Android】实战篇14:非标准算法场景 Hook 教程
android·网络安全·逆向·安全性测试·frida
bleach-14 小时前
内网渗透之横向移动&持久化远程控制篇——利用ipc、sc、schtasks、AT,远程连接的winrm,wmic的使用和定时任务的创建
网络·windows·安全·web安全·网络安全·系统安全·安全威胁分析
小白勇闯网安圈20 小时前
bug、Confusion1、ics-07、
网络安全·php·web
pandarking21 小时前
[CTF]攻防世界:love_math
android·web安全·网络安全
小痞同学21 小时前
【网络安全】二、常用网络安全管理工具
安全·web安全·网络安全
渡我白衣21 小时前
计算机组成原理(5):计算机的性能指标
服务器·网络·c++·人工智能·网络协议·tcp/ip·网络安全
云计算练习生21 小时前
渗透测试行业术语扫盲(第十篇)—— 利用与提权类术语
网络安全·信息安全·提权·漏洞利用·渗透测试术语
小痞同学21 小时前
【网络安全】一、虚拟局域网设置和应用
网络·安全·web安全·网络安全