本記事の概要
意図的に脆弱性が存在するWebサーバであるDVWAのCommand Executionカテゴリの脆弱性の演習の流れを記載します。
OSコマンドインジェクションはユーザからの入力値の処理に対して、適切なセキュリティ対策をしていないことで、任意のコマンドを実行される脆弱性です。
DVWAでは3段階(Low、Medium、High)のレベルに分かれて問題が出題されており、LowとMediumの演習の手順を記載します。
DVWAの概要や導入方法は「DVWA(Damn Vulnerable Web Application)を構築してみた」をご確認ください。
※OSコマンドインジェクション攻撃を自身が管理しているサーバ以外に攻撃した場合は、犯罪になりますので注意してください。
※本記事に記載している内容を行った場合でも私は責任を取れませんので、実施する際は注意してください。
DVWAのレベルの設定変更手順
DVWAで設定できる問題の難易度の3段階(Low、Medium、High)の設定方法のやり方を記載します。
(1) 「DVWA Security」をクリックして、「Security Level is currently 〇〇〇」に記載されている現在のレベルを確認します。その後、レベルを選択して、「Submit」をクリックします。
(2) 「Security Level is currently 〇〇〇」の表記が変わったことを確認します。
DVWAのCommand Execution攻撃のやり方(レベル:Low)
(1) DVWAのCommand Executionの演習のソースコードは以下の通りです。
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
(2) 以下の行にshell_exec関数で「ping *****」のコマンドを実行しています。
$cmd = shell_exec( 'ping ' . $target );
*****中略******
$cmd = shell_exec( 'ping -c 3 ' . $target );
(3) Linux OSのコマンドの場合、「[コマンド1] && [コマンド2]」や「[コマンド1]; [コマンド2]を実行すると、2つのコマンドが実行されるため、以下のような文字を入力したら任意のコマンドを実行できます。
【入力データの例1】
127.0.0.1 && ls && hostname
【入力データの例2】
127.0.0.1; ls; hostname;
DVWAのCommand Execution攻撃のやり方(レベル:Medium)
(1) DVWAのCommand Executionの演習のソースコードは以下の通りです。
<?php
if( isset( $_POST[ 'submit'] ) ) {
$target = $_REQUEST[ 'ip' ];
// Remove any of the charactars in the array (blacklist).
$substitutions = array(
'&&' => '',
';' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
(2) 演習のレベルLowと比較すると、以下の内容が追記されていますので、「&&」と「;」の文字はなくなることが分かります。
// Remove any of the charactars in the array (blacklist).
$substitutions = array(
'&&' => '',
';' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
(3) Linux OSのコマンドの場合、「[コマンド1] & [コマンド2]」を実行すると、2つのコマンドが実行されるため、以下のような文字を入力したら任意のコマンドを実行できます。
【入力データの例】
127.0.0.1 & ls & hostname
DVWAに関する記事
DVWAについての関連記事は以下の通りです。
必要に応じて、ご確認ください。
No | タイトル | 記事の概要 |
---|---|---|
1 | DVWA(Damn Vulnerable Web Application) を構築してみた | DVWAのバージョン1.0.7の構築手順を記載します。 |
2 | DVWAのBrute Forceの脆弱性の演習 | DVWAの環境を用いてBrute Force攻撃の 演習の例を記載します。 |
3 | DVWAのCommand Executionの脆弱性の演習 | DVWAの環境を用いてCommand Execution攻撃の 演習の例を記載します。 |
4 | DVWAのCross Site Request Forgery (CSRF)の 脆弱性の演習 | DVWAの環境を用いてCSRF攻撃の 演習の例を記載します。 |
5 | DVWAのFile Inclusionの脆弱性の演習 | DVWAの環境を用いてFile Inclusionの脆弱性を 悪用した攻撃の演習の例を記載します。 |
6 | DVWAのSQL Injectionの脆弱性の演習 | DVWAの環境を用いてSQL Injection攻撃の 演習の例を記載します。 |
7 | DVWAのFile Uploadの脆弱性の演習 | DVWAの環境を用いてFile Uploadの脆弱性を 悪用した攻撃の演習の例を記載します。 |
8 | DVWAのXSS reflectedの脆弱性の演習 | DVWAの環境を用いてXSS reflected攻撃の 演習の例を記載します。 |
9 | DVWAのXSS storedの脆弱性の演習 | DVWAの環境を用いてXSS stored攻撃の 演習の例を記載します。 |