


Die Idee der SQLMAP-Verarbeitung ist Zeichenverschlüsselung
我对公司的APP进行测试的时候发现,我们是将所有的参数内容加上一个32位字符最后在进行MD5加密。由于APP处理的流程首先是验证sign是不是正确,如果验签失败,根本就进不去数据库,为了要使用SQLMAP对其进行测试,于是就写了一个代理数据的脚本,在拦截到数据包之后,对其参数内容和32字符进行加密替换。
注:该脚本适用于公司内部系统,因为能够知道加密的流程;或者能够拿到前端JS的加密方式。
首先我使用Django写了一个程序来模拟公司的系统,流程是获取POST的id和token,并加上自定义加密的字符,由于Django获取到数据是已经经过URLDECODE,所以我用了quote对参数id的内容进行URLENCODE,再进行MD5加密,最后验证请求过来的token是否和参数内容一致。
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进行抓包,可以看到当验证正确和验证错误返回的状态。
使用SQLMAP进行测试,发现无法测试。于是我使用mitmproxy,mitmproxy是一个交互式的中间代理HTTP和HTTPS的控制台界面,具体详情可以看这里。
如果要修改的话,只修改wsproxy_request_handle函数,因为这个函数是拦截数据并且篡改数据的过程,其他的代码都是配置过程和运行过程,不用修改。
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()
运行上面的脚本使用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
上面是生成payload和sign的过程,下面是我请求一个payload报错的过程。
Das obige ist der detaillierte Inhalt vonDie Idee der SQLMAP-Verarbeitung ist Zeichenverschlüsselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die SIGN-Funktion ist eine sehr nützliche Funktion, die in Microsoft Excel integriert ist. Mit dieser Funktion können Sie das Vorzeichen einer Zahl herausfinden. Das heißt, ob die Zahl positiv ist. Die SIGN-Funktion gibt 1 zurück, wenn die Zahl positiv ist, -1, wenn die Zahl negativ ist, und Null, wenn die Zahl Null ist. Obwohl dies zu offensichtlich klingt, ist es sehr nützlich, die Funktion SIGN zu verwenden, wenn Sie eine große Spalte mit vielen Zahlen haben und das Vorzeichen aller Zahlen ermitteln möchten, um die Aufgabe in wenigen Sekunden zu erledigen. In diesem Artikel erklären wir drei verschiedene Methoden, wie Sie die SIGN-Funktion in jedem Excel-Dokument einfach verwenden können, um das Vorzeichen einer Zahl zu berechnen. Lesen Sie weiter, um zu erfahren, wie Sie diesen coolen Trick meistern. Start-up

Verwenden Sie sqlmap, um die Injektion in dvwa zu automatisieren, setzen Sie den dvwa-Level auf niedrig, öffnen Sie die SQLInjection (SQLInjection(Blind)) von dvwa, öffnen Sie das Browser-Debugging, geben Sie die Benutzer-ID ein, senden Sie sie und sehen Sie sich die abgefangenen Anforderungen an. Sie können sehen, dass es sich um eine GET-Anfrage handelt, die URL „http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#“. Wir haben sie direkt in Salmap eingefügt, um sie zu testen, verwenden Sie die - u Befehl -u"http://192.168.1.22

0x00-Übersicht Vor Kurzem bin ich beim Testen der SQLMAP-Injektion auf ein seltsames Phänomen gestoßen. Die höhere Version von SQLMAP kann die Injektion jedoch nicht erkennen, und die Daten können ausgehen, was kein Fehlalarm ist Beim vergleichenden Testen und Anzeigen des SQLMAP-Quellcodes wurden zwei kleine Lücken gefunden. 0x01-Szenarioreproduktion Injektionspunktformat: json..."whereparams":[{"name": "keyWord", "value": "test"}]} Injizierbare Parameter: Valuesqlmap-Befehl: pythonsqlmap.py-rsqlpk.txt– Flush -session-vvsqlmapv1.2.11 kann keine s injizieren

Teil eins: Verwendung von SQLmap 1.1 Einführung in SQLMAP 1. Ich habe einige grundlegende Anweisungen zur SQL-Injektion erwähnt, aber die manuelle Injektion ist sehr mühsam. Wir können SQLMAP, ein leistungsstarkes SQL-Injection-Tool, verwenden, um Daten zu erhalten. 2. Einführung in SQLMAP (1) # sqlmap ist ein Open-Source-Penetrationstest-Tool, das SQL-Injection-Schwachstellen und mit der Datenbank verbundene Server automatisch erkennen und ausnutzen kann. Es verfügt über eine sehr leistungsstarke Erkennungs-Engine, einen Penetrationstester mit mehreren Funktionen, Zugriff auf das zugrunde liegende Dateisystem durch Datenbank-Fingerprinting und Befehlsausführung über eine Out-of-Band-Verbindung. Offizielle Website: sqlmap.org(2)#Unterstützte Datenbanken: MySQL, Oracle, PostgreS

Da Penetrationstests auf externen Websites erforderlich sind, verfügen die meisten Websites über eine Zugriffshäufigkeitskontrolle. Sobald diese Häufigkeit überschritten wird, wird die IP direkt gesperrt. Insbesondere wenn SQLMAP ausgeführt wird, ist es noch „Tantenroter“ und wird mit einem Fehler beendet, bevor die Ausführung von SQLMAP abgeschlossen ist. Deshalb begann ich, den Proxy-Modus von SQLMAP zu untersuchen. SQLMAP verfügt über zwei Proxy-Modi, einen normalen Proxy (HTTP-Proxy) und einen Onion-Proxy. Ich wollte ursprünglich über die Anwendung gewöhnlicher Agenten schreiben, aber Baidu sah, dass dieser Artikel detailliert genug war und hörte auf, Unsinn zu reden. Sqlmap-Erweiterung – Implementierung eines externen IP-Proxy-Pools Konzentrieren wir uns auf den Onion-Proxy. Zu Beginn, als Onion direkt zur Injektion verwendet wurde, gab es keinen „Tante Red“-Bericht. Später, als die Anzahl der eingedrungenen Websites zunahm,

1. Vorwort Wie erkennt man eine SQL-Injection? Meine Antwort lautet: Wenn Partei A sich um die Sicherheit kümmert, ist die Erkennung von SQL-Injections relativ einfach. 1) Fehlerinjektionserkennung. 2) Fügen Sie keine Bool-Fehlerberichte ein, da die Zahl der Fehlalarme relativ hoch ist. 3) Führen Sie eine zeitbasierte Zeitinjektion durch, wenden Sie sich an den Betrieb und die Wartung, um langsame Protokolldatenbankaufzeichnungen zu erstellen, den Ruhezustand zu überwachen und die Schlüsselwortüberwachung durchzuführen. Sie können die ID-Nummer der Scanaufgabe zum Dezimalpunkt der Ruhezeit hinzufügen, um die Positionierung zu erleichtern. (P.S.: Mit dieser Methode können 99 % der SQL-Injektionen gefunden werden.) Daher schränke ich den Zeitfehler bei der zeitbasierten Zeitinjektion sehr streng ein. Allerdings führt @chengable sicherheitsrelevante Arbeiten in Partei B durch, basierend auf t

Es gibt zu wenige verwandte Artikel zur DNS-Injektion für SQLMAP. Sie stellen den Parameter --dns-domain nur kurz vor oder erwähnen ihn in einem Satz, was verwirrend ist (hauptsächlich unehrlich). noch nicht Big Boss). Dann habe ich es noch einmal gemacht, indem ich auf die Methoden im Internet verwiesen habe. Zu den Dingen, die vorbereitet werden müssen, gehören eine SQLMap, Windows Blind Injection, zwei Domänennamen und ein externer Netzwerkserver. Als ich einmal etwas tat, stieß ich auf eine Zeitblindinjektion. Es war zufällig ein Windows-Computer und ich erinnerte mich an die Methode der DNS-Injektion. Bevor ich anfange, habe ich vor, den Befehl --sql-shell von sqlmap zu verwenden, um die DNS-Injection-Nutzlast zu testen. Gehen Sie zunächst zu burpsuite.

Als ich die APP des Unternehmens testete, stellte ich fest, dass wir allen Parameterinhalten ein 32-Bit-Zeichen hinzugefügt und schließlich eine MD5-Verschlüsselung durchgeführt haben. Da der APP-Verarbeitungsprozess zunächst überprüft, ob das Zeichen korrekt ist, kann er überhaupt nicht in die Datenbank gelangen, um SQLMAP zum Testen zu verwenden. Nach dem Abfangen habe ich ein Skript für Proxy-Daten geschrieben Das Datenpaket führt eine verschlüsselte Ersetzung seines Parameterinhalts und 32 Zeichen durch. Hinweis: Dieses Skript ist für das interne System des Unternehmens geeignet, da Sie den Verschlüsselungsprozess kennen oder die Verschlüsselungsmethode des Front-End-JS erhalten können. Zuerst habe ich mit Django ein Programm geschrieben, um das System des Unternehmens zu simulieren. Der Prozess bestand darin, die POST-ID und das Token zu erhalten und ein benutzerdefiniertes verschlüsseltes Wort hinzuzufügen.
