准备

  • tamper
    • sqlmap中的模块,用于自定义编码payload绕过防护设备
    • 本文使用tamper并不是为了绕过防护设备,而是服务端只接收编码后的数据,对于未编码的数据不会接收
  • 查找加密算法,姿势很多,能找到就行,本次环境为rc4+base64+url编码
  • js2py库,用于使用python调用js

编写tamper

  1. 需要调用外部js,即获取到的js加密代码

  1. js2py库,用于调用js

    ​ 这里遇到了一些问题,开始使用的方法是eval_js(),但是该方法只能调用单函数js文件,遇到多函数的js文件会调用最后一个函数

    EvalJs(),可以执行多函数js代码,例如:

    1
    2
    3
    4
    5
    6
    with open('./get_key.js') as fp:
    js = fp.read()
    # ctx2 = execjs.compile(js)
    context = js2py.EvalJs()
    context.execute(js)
    vl5x=context.getKey(cookie) //getKey是get_key.js中的方法,如果要调用其他方法,例如context.main即调用main方法
  2. payload处理

​ 存在注入的参数要求必须有一个正确的可查到的的参数值,但是这个值也需要编码,放在数据包里面是肯定的不行的,因为包里面的数据不会通过tamper进行处理,所以只能通过tamper把payload进行处理,直接赋值个payload一个固定的值,并且一同调用js进行加密

  1. 到这里思路基本理清楚了,原参数–>调用tamper–>payload加密–>sqlmap测试,具体代码如下:

效果

sqlmap -r .\11.txt -p "xxx" --tamper=test.py --dbms=mssql --force-ssl --proxy=http://127.0.0.1:8080