コマンドインジェクション
インターフェース
ソースコード
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];
// 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>";
}
?>
コード分析
[送信]をクリックして入力IPを取得し、現在IPを送信しているマシンのタイプを確認します。Windowsの場合はping ip to pingを使用し、他のモデルの場合はping -c 4 ip topingを使用します。
浸透ステップ
ステップ1:コードを分析すると、コードがユーザーが入力したIPに対して法的な判断を下さず、直接ping操作を実行していることがわかります。ip && otherコマンドを使用すると、pingや機密データへのアクセス以外の結果をコンピューターに出力させることができます。
ステップ2:127.0.0.1を通常どおり入力し、自分のコンピューターにpingを実行します
ステップ3:127.0.0.1 && dirを作成して、サーバーの現在のフォルダーを表示します
使用される可能性のある建設的な文を分析する
最初のコマンド:ip && otherコマンド
は、ping ip操作の後に他のコマンドを実行します
。2番目のコマンド:ip&otherコマンド
は、成功または失敗に関係なく、最初のコマンドを実行し、次のコマンドを実行します
。3番目のコマンド:(ip)|他のコマンド
ipは省略でき、1つの結果が2番目の入力として使用され、2番目のコマンドの結果のみが出力されます。
可能なコマンド
Linuxではlsコマンドの代わりにdirを使用し、Linuxでは
catコマンドの代わりにtypeを使用します
発生した問題
DVWAの文字化けした
解決策:WWW \ DVWA \ dvwa \ includesフォルダーの下のdvwaPage.inc.phpファイル内のすべてのutf-8をGBKに変更します