企业安全测试分享 | 如何通过python模拟前端加密登录
2023-10-27 14:31:1 Author: www.freebuf.com(查看原文) 阅读量:8 收藏

免责声明本文章中演示的漏洞带有一定攻击性,仅供安全研究与学习之用,风险自负!

传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢

0x01 背景

近期在公司内部对某品牌的路由器进行安全性测试,前端登录的过程中抓包发现密码已经加密过,采用了前端的加密方式,要进行登录密码安全测试的话,无法直接使用 burpsuite 等工具进行包重放测试,自学过一些python编程,使用python模拟登录过程进行安全测试。

0x01 前端加密过程溯源

在登录页面中填入密码进行抓包,可以看到请求中“password”参数已经变为密文。

1697526760_652e33e8ac1479614d61e.png!small?1697526760474

1697526805_652e34158bbe61143cd59.png!small?1697526805374

打开浏览器的调试功能,在xhr发包处设置断点,数据包发送时可以停顿调试。

1697526915_652e34839bcce694b1482.png!small?1697526915467

在OnPOST方法中参数已经被加密,依次向上查看调用栈。

1697527038_652e34fe216bada5e15d1.png!small?1697527037922

在OnLogin方法中password参数的加密方式为 GibberishAES.enc(passwordEl.value, k).replace(/\s+/g, '')

1697527124_652e355452dbaa15e2de3.png!small?1697527124082

AES加密是一种对称加密算法,特点是加密和解密的秘钥为同一个。

1697527522_652e36e210cc3dbee4ab0.png!small?1697527521759

秘钥在页面源码内,为固定值,可以直接解密得到。

1697527704_652e37985b43cbb7b211b.png!small?1697527704102

1697527751_652e37c7c18099ef7ee13.png!small?1697527751416

0x02 调试JS代码

本文章中使用的是python中execjs库来执行JS代码,execjs库的作用是在Python中执行JavaScript代码。它允许开发者在Python环境下调用JavaScript逻辑和功能,从而实现Python与JavaScript之间的交互。通过execjs,Python开发者可以利用JavaScript的强大功能和现有库,拓展Python应用的能力,实现跨语言的灵活互动,以及进行前后端开发的联动与测试。

安装execjs库

pip install PyExecJSj

基本使用

import execjs
 
# 创建一个JavaScript执行环境
ctx = execjs.compile("""
    function add(a, b) {
        return a + b;
    }
""")
 
# 调用JavaScript函数并获取结果
result = ctx.call("add", 5, 10)
print(result)  # 输出:15

前端页面中实际执行加密功能的是AES.js。

/**
 * Gibberish-AES v1.0.0 - 2013-04-15
 * A lightweight Javascript Libray for OpenSSL compatible AES CBC encryption.
 *
 * Author: Mark Percival <[email protected]>
 * Copyright: Mark Percival - http://mpercival.com 2008
 *
 * With thanks to:
 * Josh Davis - http://www.josh-davis.org/ecmaScrypt
 * Chris Veness - http://www.movable-type.co.uk/scripts/aes.html
 * Michel I. Gallant - http://www.jensign.com/
 * Jean-Luc Cooke <[email protected]> 2012-07-12: added strhex + invertArr to compress G2X/G3X/G9X/GBX/GEX/SBox/SBoxInv/Rcon saving over 7KB, and added encString, decString, also made the MD5 routine more easlier compressib

文章来源: https://www.freebuf.com/articles/web/382046.html
如有侵权请联系:admin#unsafe.sh