Maison  >  Article  >  Opération et maintenance  >  Qu'est-ce que le plug-in d'injection par lots généré par Burpsuit combiné avec SQLMapAPI ?

Qu'est-ce que le plug-in d'injection par lots généré par Burpsuit combiné avec SQLMapAPI ?

WBOY
WBOYavant
2023-05-12 19:19:041260parcourir

1.1 Modifications :

Ajouter des paramètres de filtre

Optimiser l'affichage des résultats

Ajouter Exécuter les informations d'invite

Ajouter une correspondance régulière de nom de domaine

L'ensemble du plug-in est divisé en trois panneaux : le panneau des tâches, le panneau de configuration des paramètres sqlmapapi et l'état du filtre panneau.

Task Panel

Quest-ce que le plug-in dinjection par lots généré par Burpsuit combiné avec SQLMapAPI ?

Serveur : IP et port du service SQLmapapi

THREAD : Détection simultanée Nombre de tâches

Domaine : Nom de domaine à détecter, prend en charge la correspondance régulière

CLEAN : Effacer la liste du cache des tâches

TEST : Testez si la connexion vers SQLmapapi est un succès

START : Activer la détection

Le coin inférieur gauche est la liste des tâches et l'état de la tâche, le bouton inférieur gauche est la zone d'invite d'informations, et la partie inférieure contient les détails de la demande et les résultats de l'analyse.

panneau de configuration des paramètres sqlmapapi

Quest-ce que le plug-in dinjection par lots généré par Burpsuit combiné avec SQLMapAPI ?

Les paramètres ici font référence aux paramètres de sqlmap.

Tamper : La liste est la falsification fournie avec sqlmap. La falsification personnalisée peut être renseignée dans la zone de saisie et séparée par des virgules ",".

LogFile : Définissez le fichier journal d'analyse. Le chemin de stockage du fichier est le chemin sur le serveur sqlmapapi.

Panneau de condition de filtre

Quest-ce que le plug-in dinjection par lots généré par Burpsuit combiné avec SQLMapAPI ?

ExcludeSuffix : utilisé pour exclure certaines requêtes avec des suffixes spécifiés, en utilisant des expressions régulières pour la correspondance. Par exemple : images, css, js, etc.

IngoreCase : limite si ExcludeSuffix est sensible à la casse. La valeur par défaut est insensible.

IngoreParams : Paramètres à ignorer lors de la répétition de la requête, séparés par des "," virgules, par exemple : le nombre aléatoire timeStamp dans la requête, etc.

ExcludeParams : Si ce paramètre existe lors du filtrage d'une requête, la requête ne sera pas ajoutée à la liste de tests, par exemple : code de vérification checkCode, etc.

Ce qui précède sont quelques modifications apportées lors de l'utilisation réelle pendant cette période. Nous optimiserons davantage le plug-in en fonction de vos suggestions à l'avenir. Merci pour votre soutien.

Voici quelques idées de code et d'implémentation dans le programme :

Demander le code d'implémentation de la section d'écoute

public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {
        boolean addFlag = false;// 是否添加到扫描列表
        // 判断是否为request请求、开关是否打开
        if (messageIsRequest && sqlmapApiPanel.isStart()) {
            String host = helpers.analyzeRequest(messageInfo).getUrl().getHost();
            if (host.matches(targetDomian)) {
                IRequestInfo iRequestInfo = helpers.analyzeRequest(messageInfo);
                // 从?号处截断URL 可区分http 和 https
                String url = String.valueOf(iRequestInfo.getUrl());
                url = url.indexOf("?") > 0 ? url.substring(0, url.indexOf("?")) : url;
                // 排除指定后缀URL(eg : .jpg|.png|.ico)
                if (!excludeSuffix.matcher(url).matches()) {
                    // 构造任务实体
                    TaskEntity entity = new TaskEntity(iRequestInfo.getUrl(), //
                            iRequestInfo.getMethod(), //
                            callbacks.saveBuffersToTempFiles(messageInfo), //
                            iRequestInfo);
                    // 进行数据去重检测
                    String hash = bCrypt.hashpw(entity.getSignString(-1, ingoreParams), SALT);
                    Integer repeatCheckValue = 1;
                    if (String.valueOf(iRequestInfo.getHeaders()).indexOf("Chris-To-Sqlmap") != -1) {
                        if (repeatCheck.containsKey(hash)) {
                            repeatCheckValue = repeatCheck.get(hash) + 1;
                            hash = hash + repeatCheckValue;
                        }
                        addFlag = true;
                    }
                    // 检测当前数据包是否重复,检测当前数据包是否要根据参数可选过滤
                    else if (!repeatCheck.containsKey(hash) && !entity.hasParams(excludeParams)) {
                        // repeatCheck
                        if (!entity.getParamBody().isEmpty()) {// 检测post参数是否为空
                            addFlag = true;
                        } else if (!entity.getParamUrl().isEmpty()) {// 检测get参数是否为空
                            addFlag = true;
                        } else if (sqlmapApiOption.getLevel() >= 3 && !entity.getParamCookie().isEmpty()) {// level参数大于3是应检测cookie注入
                            addFlag = true;
                        }
                    }
                    if (addFlag) {
                        int row = listTasks.size();
                        repeatCheck.put(hash, repeatCheckValue);
                        listTasks.add(entity);
                        fireTableRowsInserted(row, listTasks.size());
                    }
                }
            }
        }
    }

Code d'implémentation de la section d'exécution des tâches : #🎜 🎜 #
public void run() {
                while (true) {
                    if (!threadFlag) {
                        try {
                            sqlmapApiPanel.setMessage("Waiting.");
                            sleep(3 * 1000);
                        } catch (InterruptedException e) {
                            stderr.print(e.getMessage());
                        }
                        continue;
                    }
                    // 增加任务
                    if (runingTasks.size()  removeList = new ArrayList();
                        for (String key : runingTasks.keySet()) {
                            TaskEntity entityRuning = runingTasks.get(key);
                            String status = sqlmapapi.flushStatus(sqlmapapiServer, entityRuning);
                            sqlmapApiPanel.setMessage("Flash task [" + key + "] " + status + " .");
                            if ("terminated".equals(status)) {
                                entityRuning.setTaskStatus(status);
                                entityRuning.setTaskScanData(sqlmapapi.flushScanData(sqlmapapiServer, entityRuning));
                                sqlmapApiPanel.setMessage("Task [" + key + "] finished .");
                                removeList.add(key);
                            } else if ("not running".equals(status)) {
                                stderr.println(entityRuning.getTaskid() + " not running");
                                // entityRuning.setTaskEngineid(taskStart(entityRuning));
                            } else {
                                entityRuning.setTaskStatus(status);
                            }
                            try {
                                sleep(3 * 1000);
                            } catch (InterruptedException e) {
                                stderr.print(e.getMessage());
                            }
                        }
                        if (!removeList.isEmpty()) {
                            for (String key : removeList) {
                                runingTasks.remove(key);
                            }
                        }
                        fireTableRowsInserted(0, listTasks.size());
                    } else {
                        try {
                            sleep(3 * 1000);
                        } catch (InterruptedException e) {
                            stderr.print(e.getMessage());
                        }
                    }
                }
            }

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer