HighでOSコマンドインジェクションレベルを完了した後、私はそれを書くことができるように少し深く掘り下げていました。解決策はWebアプリで機能しますが、Linux端末で同じコマンドエラーが発生するようです。
高レベルのDVWAコマンド
127.0.0.1| |cat /etc/passwd
これは機能します。 pingの結果は出力しませんが、/ etc/passwdの内容を画面に出力します
Linuxターミナルでまったく同じコマンドを使用すると、エラーになります。 Webアプリケーションを模倣するために使用されるコード
ping -c 3 127.0.0.1| |cat /etc/passwd
エラーが表示されます
bash: syntax error near unexpected token `|'
スペースを削除すると、コマンドは期待どおりに機能します。 Shell_exec PHPコマンドがコマンドをOSに渡し、OSがコマンドを実行して結果を表示する理由を説明できませんが、直接的なアプローチのエラーです。技術的にはDVWAコマンドは機能しませんか?
故意に欠陥のあるブラックリストが原因です。パイプの後にスペースが続くと、空の文字列に置き換えられます。 2番目のパイプの直後にはcが続くため、ブラックリストと一致せず、すり抜けます。最初のパイプとスペースは冗長です。 ip%0acatおよびip%26%26catと同様に、ip | catも機能するはずです。
ブラックリストのDVWAコマンドインジェクションHignファイル
//ブラックリストを設定$ substitutions = array( '&' => ''、 ';' => ''、 '|' => ''、 '-' => ''、 '$' => ''、 ' ( '=>' '、') '=>' '、' `'=>' '、' || '=>' '、);
これはブラックリストにない「&&」です。
これは「&&」を使用しています。 ping -c4 127.0.0.1 && echo "OK!"