Commnd実行コマンド
コマンドの実行と呼ばれる悪質なコマンドを実行するには良いフィルタの特殊文字がないため、能力、
オペレーティングシステムでは「&、&&、|、||」コマンドは、使用するコネクタとして使用することができます
Linux上で ";" 置き換えることができます "| ||"
ステートメントの直接の実装の後ろに&Falseのフロント、
&&文の後ろに、目の前で直接偽のエラーは実行されません
|ステートメントの直接の実装の背後にあります
フロント||エラーは、次のステートメントを実行すると
LOWレベル
入力127.0.0.1 &&にwhoamiのpingにwhoamiは、コマンドの後に復帰を
ソースを表示
<?PHPの 場合(ISSET($ _POST [ '送信' ])){ // 取得した入力 $ターゲット = $ _REQUEST [ 'IP' ]; // OSを決定し、pingコマンドを実行します。 もし(stristr(php_uname( 'S')、 'Windows NTの' )){ // Windowsの $ CMD = もしくはshell_exec( 'pingを実行'。$ターゲット)。 } 他{ // * nixの $ CMD = もしくはshell_exec( 'のping -c 4'。$ターゲット)。 } // エンドユーザのためのフィードバック エコー "<PRE> { $ CMD } </ PRE>" 。 } ?>
直接実行、フィルタなし
MEDIUMレベル
输入127.0.0.1 &&にwhoami
実行エラーが見つかりました。
ソースを表示
<?PHPの 場合(ISSET($ _POST [ '送信' ])){ // 取得した入力 $ターゲット = $ _REQUEST [ 'IP' ]; // ブラックリストを設定 $置換を = 配列( '&&' => ''、 ';' => ''、 ); // 配列(ブラックリスト)にcharactarsのいずれかを削除します。 $ターゲット = str_replace(array_keys($置換)、$置換、$ターゲット) //OSを決定し、pingコマンドを実行します。 もし(stristr(php_uname( 'S')、 'Windows NTの' )){ // Windowsの $ CMD = もしくはshell_exec( 'pingを実行'。$ターゲット)。 } 他{ // * NIX $ CMD = もしくはshell_exec( 'ピング-C 4'。$ターゲット) } // エンドユーザのためのフィードバック エコー "<PRE> { $ CMD } </ PRE>" 。 } ?>
そして、&&、フィルタリング
しかし、それでもまだ、あなたは使用||とすることができます|、&実行
入力127.0.0.1&WHOAMIを
HIGHレベル
「|」ソースを表示ブラックリストは、コネクタのほとんどをフィルタリングするには、しかし、簡単には、第三、不完全以下のブラックリストをブラックリストをフィルタリングします
「|」は、2つ以上のスペースの後、私たちは声明の構築に127.0.0.1を|にwhoami
<?PHPの 場合(ISSET($ _POST [ '送信' )]){ // 入力を取得 $ターゲットを = トリム($ _REQUEST [ 'IP' ]); // 設定するブラックリスト $置換 = 配列( '&' => ''、 ';' => ''、 '|' => ''、 ' - ' => ''、 '$' => ''、 " (」=> ''、 '')=> ''、'''=> ''、 '||' => '' ); // 配列(ブラックリスト)にcharactarsのいずれかを削除します。 $ターゲット = str_replace(array_keys($置換)、$置換、$ターゲット) // OSを決定し、pingコマンドを実行します。 もし(stristr(php_uname( 'S')、 'Windows NTの' )){ // Windowsの $ CMD = もしくはshell_exec( 'pingを実行'。$ターゲット)。 } 他{ // * NIX $ CMD = もしくはshell_exec( 'ピング-C 4'。$ターゲット) } //エンドユーザのフィードバック エコー "<PRE> { $ CMD } </ PRE>" 。 } ?>
成功の実装
IMPOSSIBLEレベル
ソースを表示
<?PHPの 場合(ISSET($ _POST [ '送信' ])){ // アンチCSRFトークンチェック (checkToken $ _REQUESTを [ 'user_token']、$ _SESSIONは、[ 'session_token'] 'のindex.php' ); // 取得した入力 $ターゲット = $ _REQUEST [ 'IP' ]; $ターゲット = にstripslashes($ターゲット)。 // に4オクテットでIPを分割 $オクテット = 爆発( ""、$ターゲット;) // 各オクテットが整数であるかどうかを確認 もし((IS_NUMERIC($オクテット [0]))&&(IS_NUMERIC($オクテット [1]))&&(IS_NUMERIC($オクテット [2]))&&(IS_NUMERIC($オクテット [3]))&&(はsizeof($オクテット)== 4 )){ // すべての4つのオクテットはint型のは、一緒に戻ってIPを入れている場合。 $ターゲット = $オクテット [0]。'' 。$オクテット [1]。'' 。$オクテット [2]。'' 。$オクテット [3 ]。 // OSを決定し、pingコマンドを実行します。 もし(stristr(php_uname( 'S')、 'Windows NTの' )){ // Windowsの $ CMD = もしくはshell_exec( 'pingを実行'。$ターゲット)。 } 他{ // * NIX $ CMD = もしくはshell_exec( 'ピング-C 4'。$ターゲット) } // エンドユーザのためのフィードバック エコー "<PRE> { $ CMD } </ PRE>" 。 } 他{ // オプス。ユーザー名は、ミスのtheresましょう エコーを'<前> ERROR:無効なIPを入力しました。</ PRE>' ; } } // アンチCSRFトークンを生成 generateSessionTokenを(); ?>
認証用トークンを使用して
バックスラッシュを削除するにstripslashes()
)(爆発文字列の配列に分割します
デジタル文字列を検証するis_number()
コマンド実行することができない、しっかりとフィルタ処理