フィルター設定の追加
表示結果の最適化
実行中のプロンプト情報の追加
追加ドメイン名の正規一致
プラグイン全体は、タスク パネル、sqlmapapi パラメーター設定パネル、フィルター条件パネルの 3 つのパネルに分かれています。
サーバー: SQLmapapi サービスの IP とポート
スレッド: 同時に検出されたタスクの数
ドメイン: 検出する必要があるドメイン名。通常の一致をサポートします。
CLEAN: タスク キャッシュ リストをクリアします。
TEST: SQLmapapi 接続が成功したかどうかをテストします。
START:検出をオンにします
左下はタスク リストとタスク ステータス、右ボタンの下は情報プロンプト領域、その下はリクエストの詳細とスキャン結果です。
ここでの設定は、sqlmap のパラメータ設定を参照します。
タンパー: リストは sqlmap に付属するタンパーです。カスタム タンパーは入力ボックスに入力し、「,」カンマで区切ることができます。
LogFile: スキャン ログ ファイルを設定します。ファイルの保存パスは 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 サイトの他の関連記事を参照してください。