記事ディレクトリ
-
- 1. Windows での DVWA の構築
-
- 1.1. DVWA射撃場の建設
- 1.2、DVWA を迅速に構築するための 6 つのステップ
-
- 1.2.1. PHPstudy をダウンロードしてインストールします: http://public.xp.cn/upgrades/PhpStudy2018.zip
- 1.2.2. 解凍したDVWAのオリジナルコードをphpstudyインストールディレクトリのWWWフォルダに配置します。
- 1.2.3. DVWA/config ディレクトリに入り、config.inc.php.dist の最後の .dist を削除します。
- 1.2.4. 新しく名前変更された config.inc.php ファイルを開き、db_user および db_password root root を変更します。
- 1.2.5. ブラウザ アクセス: http://127.0.0.1/DVWA/setup.php、下部にある [データベースの作成] をクリックします。
- 1.2.6. データベースの作成とログイン
- 2. 大きな被害をもたらす脆弱性 – コマンドインジェクション
- 3. 防御の抜け穴の防御力が低い
- 4. DVWAの文字化け問題を解決する
- 五、コマンドインジェクション コマンドインジェクションソリューション
- 6. コマンドインジェクションの脆弱性防御媒体
- 7、コマンドインジェクションの脆弱性防御力が高い
- 八、コマンドインジェクション脆弱性防御不可能
Windows 上で DVWA を構築するための 6 つの手順、非常に有害な脆弱性 - コマンド インジェクション、DVWA 文字化け問題の解決、コマンド インジェクション コマンド インジェクション ソリューション、防御脆弱性 低、コマンド インジェクション脆弱性防御 中、コマンド インジェクション脆弱性防御 高、コマンド インジェクション 抜け穴に対する防御は不可能。
1. Windows での DVWA の構築
1.1. DVWA射撃場の建設
DVWA は OWASP によって公式に書かれた PHP Web サイトで、Web サイトによくあるさまざまな脆弱性が含まれており、攻撃と修復方法を学ぶことができます
-
PHP 环境:Windows Apache Mysql Php
-
DVWA ソースコード: https://github.com/digininja/DVWA/archive/master.zip
1.2、DVWA を迅速に構築するための 6 つのステップ
1.2.1. PHPstudy をダウンロードしてインストールします: http://public.xp.cn/upgrades/PhpStudy2018.zip
(1) ダウンロードリンク: http://public.xp.cn/upgrades/PhpStudy2018.zip
直接点击下载链接跳转到网页直接即可下载;也可复制粘贴到网址中直接下载
Baidu ネットワーク ディスクのダウンロード リンク: https://pan.baidu.com/s/1vVVAbyUCT6XoK4NguMDrSA?pwd=jzib
抽出コード:jzib
建议使用网址下载链接,百度网盘下载慢
(2) ダウンロード後、解凍してPhpStudy2018.exe実行ファイルを入手します。
(3) PhpStudy2018.exeをダブルクリックし、パスを選択して「はい」をクリックするとインストールが完了します。
1.2.2. 解凍したDVWAのオリジナルコードをphpstudyインストールディレクトリのWWWフォルダに配置します。
(1) DVWA ソースコードをダウンロード: https://github.com/digininja/DVWA/archive/master.zip
直接点击下载链接跳转到网页直接即可下载;也可复制粘贴到网址中直接下载
Baidu ネットワーク ディスクのダウンロード リンク: https://pan.baidu.com/s/1qV4RMbJRFuGHPXKqPFRU9A?pwd=g2bm
抽出コード: g2bm
建议使用网址下载链接,百度网盘下载慢
(2) ダウンロード後、圧縮パッケージをphpstudyインストールディレクトリのWWWフォルダ配下に配置します。
- …\phpStudy\PHPTutorial\WWW
(3) ダウンロードが完了したら解凍します。
(4) 解凍が完了したら、名前を変更できます。
1.2.3. DVWA/config ディレクトリに入り、config.inc.php.dist の最後の .dist を削除します。
- …\phpStudy\PHPTutorial\WWW\DVWA\config
1.2.4. 新しく名前変更された config.inc.php ファイルを開き、db_user および db_password root root を変更します。
(1) 開く
(2)、db_user と db_password の root root を root に変更して保存します。
1.2.5. ブラウザ アクセス: http://127.0.0.1/DVWA/setup.php、下部にある [データベースの作成] をクリックします。
127.0.0.1: ローカル ループバック アドレス、自分自身にアクセスします
(1) phpStudyのインストールパスにあるphpStudy.exeをダブルクリックして起動します。
(2)、ローカルブラウザアクセス127.0.0.1
図に示すように、Hello World が表示され、構成が成功したことが示されます。
(3)、DVWAにアクセスし、ブラウザにhttp://127.0.0.1/DVWA/setup.phpと入力します。
1.2.6. データベースの作成とログイン
(1) 「データベースの作成/リセット」をクリックしてデータベースを作成します。
(2)「ログイン」をクリックします
(3)、ユーザー名admin、パスワードpasswordを入力し、「ログイン」をクリックしてdvwaにログインします。
(4)、ログイン成功後のページ
2. 大きな被害をもたらす脆弱性 – コマンドインジェクション
一般に、この種の脆弱性は、アプリケーション システムが設計からユーザーにリモート コマンド操作用の指定されたインターフェイスを提供する必要があるために発生します。たとえば、一般的なルーター、ファイアウォール、侵入検知デバイスなどの Web 管理インターフェイスでは、通常、ユーザーには操作の ping が提供されます。ユーザーは Web インターフェイスからターゲット IP を入力し、送信後、バックグラウンドで IP アドレスに対して ping テストが実行され、テスト結果が返されます。ただし、この機能を完了するときに設計者が厳格なセキュリティ制御を実装していない場合、攻撃者がこのインターフェイスを介して悪意のあるコマンドを送信し、バックグラウンドでの実行を許可して、バックグラウンド サーバーのアクセス許可を取得する可能性があります。
-
cmd1|cmd2: cmd1 が正常に実行されたかどうかに関係なく、cmd2 が実行されます。
-
cmd1;cmd2: cmd1 が正常に実行されたかどうかに関係なく、cmd2 が実行されます。
-
cmd1&cmd2: cmd1 が正常に実行されたかどうかに関係なく、cmd2 が実行されます。
-
cmd1||cmd2: cmd1 が失敗した場合にのみ cmd2 を実行します
-
cmd1&&cmd2: cmd1 が正常に実行された後にのみ実行します
注:cmd为command命令的意思
3. 防御の抜け穴の防御力が低い
一般的に使用される cmd コマンド:
-
whoami: 現在のユーザー名を表示します
-
ipconfig:ネットワークカード情報の表示
-
シャットダウン -s -t 0: シャットダウン
-
net user [ユーザー名] [パスワード] /add: ユーザー名が username、パスワードがpasswordである新しいユーザーを追加します
-
type [file_name]: filename ファイルの内容を表示します
(1) [DVWA セキュリティ] セキュリティ設定をクリックし、セキュリティ レベルを低に下げ、防御を行わず、[送信] をクリックします。
2. [コマンドインジェクション] コマンドインジェクションをクリックし、[IP アドレスを入力してください] に 127.0.0.1 を入力します。
3. 「送信」ボタンをクリックします。
写真の通り文字化けしていますが、海外で開発されたサイトであり、デフォルトのエンコードがWindowsと異なるため、文字化けを気にせず実行してください。
4. [IP アドレスを入力してください] に「127.0.0.1&whoami」と入力し、[送信] をクリックします。
図に示すように、一番下の行には「desktop-v3q1n78\admin」が追加されており、admin はユーザー名です。cmdを使用してローカルで確認できます
5. [IP アドレスを入力してください] に「127.0.0.1&ipconfig」と入力し、[送信] をクリックして送信します。
図に示すように、ローカル cmd に ipconfig を入力した結果を示します
6. このウェブサイトに欠陥がある可能性があります。欠陥の原因を確認するにはどうすればよいですか?
(1)、下部にある「ソースを表示」をクリックしてソースコードを表示します。
(2) 図に示すように、新しいウィンドウが開き、ソースコードが表示されます。
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ]; // 将输入的 ip 赋值给变量 $target
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target ); // shell_exec:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回;( 'ping ' . $target ):127.0.0.1&whoami
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{
$cmd}</pre>";
}
?>
7、输入 127.0.0.1&shutdown
注: このコマンドを入力すると、コンピュータは自動的にシャットダウンされます。
4. DVWAの文字化け問題を解決する
...\phpStudy\PHPTutorial\WWW\DVWA\dvwa\includes ディレクトリに dvwaPage.inc.php ファイルがあります。ファイルを開いて 322 行目を変更し、UTF-8 を GBK または GB2312 に変更します。
1. テキストをダブルクリックして開きます
2. 図のように変更して保存します。
3. 変更が成功したら、再起動する必要はなく、そのまま使用してください。
五、コマンドインジェクション コマンドインジェクションソリューション
コマンドの実行を防ぐ最も効率的な方法は、コマンドの連結をフィルタリングすることです。
-
cmd1|cmd2: cmd1 が正常に実行されたかどうかに関係なく、cmd2 が実行されます。
-
cmd1;cmd2: cmd1 が正常に実行されたかどうかに関係なく、cmd2 が実行されます。
-
cmd1&cmd2: cmd1 が正常に実行されたかどうかに関係なく、cmd2 が実行されます。
-
cmd1||cmd2: cmd1 が失敗した場合にのみ cmd2 を実行します
-
cmd1&&cmd2: cmd1 が正常に実行された後にのみ実行します
l、;、&、ll、&&:将这些符号替换成空,或判断用户输入这些符号就终止执行
6. コマンドインジェクションの脆弱性防御媒体
1. 「DVWA セキュリティ」セキュリティ構成をクリックし、セキュリティ レベルを「中」に調整し、「送信」をクリックします。
2. [コマンド インジェクション] コマンド インジェクションをクリックし、一番下まで引いて、[ソースの表示] をクリックします。
3. 新しい Web ページを開いてソース コードを表示します。
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ]; // 将输入的 ip 赋值给变量 $target
// Set blacklist
$substitutions = array(
'&&' => '',
';' => '',
); // 如果用户输入内容包含有&&或;则将符号变为空
// Remove any of the characters in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target ); // str_replace字符串替换,如果有&&或;则将符号删除
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target ); // shell_exec:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回;( 'ping ' . $target ):127.0.0.1&whoami
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{
$cmd}</pre>";
}
?>
DVWA 中防御での && と ; のフィルタリングは、他のシンボルの通常の使用には影響しません。
7、コマンドインジェクションの脆弱性防御力が高い
1. [DVWA セキュリティ] セキュリティ設定をクリックし、セキュリティ レベルを高に調整して、[送信] をクリックします。
2. [コマンド インジェクション] コマンド インジェクションをクリックし、[IP アドレスを入力してください] に 127.0.0.1||ipconfig と入力します。
- 127.0.0.1||ipconfig
図に示すように、 || を使用すると、 || が処理されたことを示すエラーが報告されます。
3. 一番下まで引っ張って、「ソースを表示」をクリックします。
4. 新しい Web ページを開いてソース コードを表示します。
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
// Split the IP into 4 octects
$octet = explode( ".", $target );
// Check IF each octet is an integer
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
// If all 4 octets are int's put the IP back together.
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{
$cmd}</pre>";
}
else {
// Ops. Let the user name theres a mistake
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// Generate Anti-CSRF token
generateSessionToken();
?>
八、コマンドインジェクション脆弱性防御不可能
1. [DVWA セキュリティ] セキュリティ設定をクリックし、セキュリティ レベルを不可能な高レベルに調整し、[送信] をクリックします。
2. [コマンド インジェクション] コマンド インジェクションをクリックし、一番下まで引いて、[ソースの表示] をクリックします。
3. 新しい Web ページを開いてソース コードを表示します。
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$target = $_REQUEST[ 'ip' ]; // 将输入的内容赋值给变量 $target
$target = stripslashes( $target );
// Split the IP into 4 octects
$octet = explode( ".", $target );
// Check IF each octet is an integer
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
// If all 4 octets are int's put the IP back together.
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{
$cmd}</pre>";
}
else {
// Ops. Let the user name theres a mistake
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// Generate Anti-CSRF token
generateSessionToken();
?>
$target = stripslashes( $target );
// Split the IP into 4 octects
$octet = explode( ".", $target );
// Check IF each octet is an integer
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
// If all 4 octets are int's put the IP back together.
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
// 1、stripslashes:去除用户输入的\
// 2、explode:把用户输入的数据根据.分开,比如输入 127.0.0.1 会被分成四个部分,分别是 1270 0 1
// 3、分别判断分成的四个部分是不是数字,127是不是?0是不是?0是不是?1是不是?有不是数字的直接不允许访问;判断是否是4个
// 4、把验证完是数字的四个数字再用.拼接起来,变成正常的 IP 127.0.0.1