web-dev-qa-db-ja.com

リモートOSコマンドインジェクション-テスト

ZAPスキャナーがリモートOSコマンドインジェクションを検出しました。

これが機能し、誤検知ではないかどうかを確認するための確実な方法はありますか?

50秒間スリープ状態にしようとしましたが、視覚的には確認できません。また、ページの読み込みに時間がかかるようには見えません。

これは、スキャナーが脆弱であると判断したURLです。

http://*SECRET*/*SECRET*?from&to

これはエクスプロイトです:

Attack: ACG"&sleep 5s&"

だから私はそれを悪用するには次のようなURLを書くべきだと思います:

http://*SECRET*/*SECRET*?from=ACG&sleep 5s&to=AMR

上記は、ページの読み込みに時間がかかるようには見えません。タイプミスをしたか、URLが次のようにサニタイズされるため、おそらく脆弱ではありません。

ACG&sleep%205s&to=AMR
3
k1308517

自動脆弱性スキャナーは、多くの場合、タイミングベースのペイロードで誤検知を生成します。

これは、スキャナーがチェックするのは、挿入された一時停止よりも要求に時間がかかるかどうかのみをチェックするためです。ネットワークトラフィックが高い場合-スキャナーが大量のリクエストを生成したことが原因である可能性があります-ペイロードが実行されなかった場合でも、これが発生する可能性があります。

つまり、タイミングベースのペイロードは常に手動で確認する必要があります(他の結果を確認する必要があるため)。

実際のペイロードが何であるかは、私にはまったくわかりません。本当に2つの可能性があります。

  • &はエンコードされるため、クエリ文字列は?from=ACG%22%26sleep%205s%26%22&to=AMRになります。これは可能性の高いケースです。脆弱なパラメータはfromで、ペイロードはACG%22%26sleep%205s%26%22です。これは、"を介して現在の文字列コンテキストを終了し、&を介して追加のコマンドを追加し(WindowsおよびLinuxで追加のコマンドを追加するために使用できます)、最後に"を介して別のコマンドを追加することにより、末尾の&を削除します。
  • &はエンコードすることを意図していないため、値のないsleep%005sという名前のパラメーターを追加します(可能性は低いですが、可能です)。

最初にidlsdirなどの表示結果を生成するコマンドを使用して、次に次のようなタイミングコマンドを使用して、両方のバリアントを試す必要がありますsleep

6
tim

sleepは、スレッドをスリープ状態にするだけです(ある場合)。のようなものを試してください

curl your.server.tld/whatever

リクエストがサーバーログに記録されているかどうかを確認します。

ただし、リクエストが通過しない場合、これは決定的なものではない可能性があります。

外部トラフィックがブロックされていたり、カールがインストールされていなかったり、その他の問題が発生する可能性があります。

1
Tobi Nary