私はOWASP ZAPの新人なので、あなたの助けが必要です。
脆弱性サイト-DVWAがあります。私はブルートフォースでトークン(CSRF)に取り組んでいます。
ページが読み込まれると、ログイン、パスワード、ユーザートークンを含むHTMLフォームが表示されます。 3番目のフィールドは、動的トークン(CSRF)によって埋められます。
CSRFトークンでブルートフォースを使用する必要があります。
user_token
を受信します私が理解しているように、ロードされたページからuser_token
を受信するためのスクリプトを作成し、承認リンクでAttak-> Fuzzを実行してから、user_token
値を選択し、各リクエストでそれを埋めるプレイロードスクリプトを追加する必要があります。
しかし、このスクリプトの作成方法をインターネット上で見つけることはできません。誰かが私を助けてくれますか?
ファザーを使用する場合、実際にはより簡単なオプションがあります。 「Anti-CSRF Token Refresher」メッセージプロセッサを追加します。これにより、トークンが自動的に再生成されます。)利用できない場合は、トークン名についてZAPに通知する必要があります。
現在、CSRFトークンは本文ではなくURLでのみサポートされていることに注意してください。
ああ、そして次のバージョンのfuzzerアドオンの参考までに、メッセージでCSRFトークンがファジングされていることが検出された場合、このメッセージプロセッサがデフォルトで追加されます:)
これはFAQ役立つかもしれません。スクリプトを介してトークンを処理するときのdvwaとファジングをカバーします: https://github.com/zaproxy/zaproxy/wiki/FAQvulnappdvwa
var SOURCE_URL = "http://localhost/DVWA/vulnerabilities/brute/";
var CSRF_TOKEN_NAME = "user_token";
var REQUEST_URI = new org.Apache.commons.httpclient.URI(SOURCE_URL, true);
function processMessage(utils, message) {
var msg = message.cloneRequest();
msg.getRequestHeader().setURI(REQUEST_URI);
var csrfTokenValue = extractInputFieldValue(getPageContent(utils, msg), CSRF_TOKEN_NAME);
var params = message.getUrlParams();
replace(params, CSRF_TOKEN_NAME, encodeURIComponent(csrfTokenValue));
message.getRequestHeader().setGetParams(params);
}
function processResult(utils, fuzzResult){
return true;
}
function getPageContent(utils, msg) {
utils.sendMessage(msg);
utils.addMessageToResults("Refresh " + CSRF_TOKEN_NAME, msg)
return msg.getResponseBody().toString();
}
function extractInputFieldValue(page, fieldName) {
var Source = Java.type("net.htmlparser.jericho.Source");
var src = new Source(page);
var it = src.getAllElements('input').iterator();
while (it.hasNext()) {
var element = it.next();
if (element.getAttributeValue('name') == fieldName) {
return element.getAttributeValue('value');
}
}
return '';
}
function replace(params, name, value) {
var it = params.iterator();
while (it.hasNext()) {
var param = it.next();
if (param.getName() == name) {
param.setValue(value);
return;
}
}
}