ホームページ  >  記事  >  運用・保守  >  Burpsuit と SQLMapAPI を組み合わせて生成されるバッチ インジェクション プラグインとは何ですか?

Burpsuit と SQLMapAPI を組み合わせて生成されるバッチ インジェクション プラグインとは何ですか?

WBOY
WBOY転載
2023-05-12 19:19:041263ブラウズ

1.1 変更点:

フィルター設定の追加

表示結果の最適化

実行中のプロンプト情報の追加

追加ドメイン名の正規一致

プラグイン全体は、タスク パネル、sqlmapapi パラメーター設定パネル、フィルター条件パネルの 3 つのパネルに分かれています。

タスクパネル

Burpsuit と SQLMapAPI を組み合わせて生成されるバッチ インジェクション プラグインとは何ですか?

サーバー: SQLmapapi サービスの IP とポート

スレッド: 同時に検出されたタスクの数

ドメイン: 検出する必要があるドメイン名。通常の一致をサポートします。

CLEAN: タスク キャッシュ リストをクリアします。

TEST: SQLmapapi 接続が成功したかどうかをテストします。

START:検出をオンにします

左下はタスク リストとタスク ステータス、右ボタンの下は情報プロンプト領域、その下はリクエストの詳細とスキャン結果です。

sqlmapapi パラメータ設定パネル

Burpsuit と SQLMapAPI を組み合わせて生成されるバッチ インジェクション プラグインとは何ですか?

ここでの設定は、sqlmap のパラメータ設定を参照します。

タンパー: リストは sqlmap に付属するタンパーです。カスタム タンパーは入力ボックスに入力し、「,」カンマで区切ることができます。

LogFile: スキャン ログ ファイルを設定します。ファイルの保存パスは sqlmapapi サーバー上のパスです。

フィルター条件パネル

Burpsuit と SQLMapAPI を組み合わせて生成されるバッチ インジェクション プラグインとは何ですか?

ExcludeSuffix: 指定されたサフィックスを持つ一部のリクエストを除外し、一致に通常のルールを使用するために使用されます。例: 画像、CSS、JS など。

IngoreCase: ExcludeSuffix で大文字と小文字が区別されるかどうかを制限します。デフォルトでは大文字と小文字が区別されません。

IngoreParams: リクエストの再現性を検出するときに無視する必要があるパラメータ。「,」カンマで区切られます。例: リクエスト内の乱数 timeStamp など。

ExcludeParams: リクエストのフィルタリング時にこのパラメータが存在する場合、リクエストはテスト リストに追加されません (例: 検証コード checkCode など)。

上記は、この期間中に実際に使用した際の修正を元にしていますが、今後は皆様からのご意見をもとにプラグインをさらに最適化していきますので、どうぞよろしくお願いいたします。

プログラム内のいくつかのコードと実装アイデアを次に示します。

リクエスト リスニング セクションの実装コード

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());
                    }
                }
            }
        }
    }

タスク実行セクションの実装コード:

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());
                        }
                    }
                }
            }

以上がBurpsuit と SQLMapAPI を組み合わせて生成されるバッチ インジェクション プラグインとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。