はじめに
コマンドインジェクションの脆弱性は、最も危険なweb脆弱性の一つです。 多くのセキュリティテスターや賞金稼ぎは、ターゲットアプリケーションに与える影響のためにコマンドインジェクションの脆弱性を見つけることを目指しています。
この記事では、コマンドインジェクションの脆弱性の概要と、最終的にコマンドインジェクションにつながる可能性のあるさまざまな脆弱性
コマンドインジェクションとは何ですか?
コマンドインジェクションは、攻撃者がアプリケーションが実行されているサーバー上で任意のオペレーティングシステムコマンドを実行することを可能にするweb脆弱性の一種です。 コマンドインジェクションの脆弱性は、アプリケーションがシェルコマンドまたはシェルコマンドをバックグラウンドで実行するスクリプトを使用する場合に発生します。
ユーザー入力のbase64エンコーディングを実行するアプリケーションの次のURLを考えてみましょう。
http://target-site.com/encode.php?text=helloworld
このユーザー入力は、getパラメーターとしてエンコードに渡されます。phpファイル。
以下はencodeのソースコードです。php:
<?php
input input=$_GET;
system(“echo-n”. ①入力。”/ベース64″);
?>
上記のコードスニペットからわかるように、ユーザー入力はphp system()関数に渡され、PHPでオペレーティングシステムコマンドを実行するために使用されます。
ユーザーが入力にシステムコマンドを追加すると、次のようなオペレーティングシステムコマンドとして実行されます:
http://target-site.com/encode.php?text=test;id
ユーザーに返される応答は次のとおりです:
testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK
As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:
$ echo -n “dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK” | base64 -d
uid=33(www-data) gid=33(www-data) groups=33(www-data)
As you can see, the encoded text is the output of the id command passed to the application.
Why are command injection vulnerabilities dangerous?
コマンドインジェクションクラスの脆弱性は、基盤となるオペレーティングシステムを攻撃者に制御させるため、最も危険なweb脆弱性の一つと考え この制御は、ターゲットサーバーがネットワーク上の他のシステムと持っている信頼を使用して、内部ネットワークを介して横方向に移動するなど、いくつかの
コマンド実行につながる脆弱性
脆弱なアプリケーションがエンドユーザーがアプリケーションのデフォルト機能を拡張し、システムコマンドを実行できるようにすると、コマンド実行の脆弱性が発生しますが、アプリケーションのコードを介してコマンドを実行することもできます。 これは一般にコード実行として知られています。 コードが実行される脆弱性がある場合でも、最終的な目標は、それを介して任意のシステムコマンドを実行することです。 それを考慮して、コマンドインジェクションやコード実行によってコマンド実行につながる可能性のある脆弱性について説明しましょう。
最終的にコマンドインジェクション攻撃につながる可能性のある脆弱性の一部を以下に示します。
任意のコマンドインジェクション
前の例で説明したように、アプリケーションは、ユーザーから任意のシステムコマンドを直接受信し、基になるホス これは、コマンドインジェクションの脆弱性のクラス例です。
任意のファイルアップロード
アプリケーションがユーザーが任意のファイル拡張子を持つファイルをアップロードできるようにすると、アップロードされたファイルがwebroot内に配置されたときにコマンドインジェクションが発生する可能性があります。 これは、webアプリケーションがコマンドインジェクションに対して脆弱になる可能性のある、もう一つの一般的な方法です。
安全でないシリアル化
標準的なコマンドインジェクションの脆弱性の他に、安全でない逆シリアル化などの他の脆弱性を使用して任意のコマン これは、サーバー側のコードが、ユーザーが渡したシリアル化されたコンテンツを適切に検証せずに逆シリアル化するという事実を利用しています。 これは一般的に安全でないシリアル化クラスの脆弱性として知られていますが、ターゲットアプリケーションがクラスパスで使用可能な適切なガ
サーバー側のテンプレート注入
webアプリケーションがJinja2やTwigなどのサーバー側のテンプレート技術を使用して動的なHTML応答を生成する場合、サーバー側のテンプレートインジェクションを使用することができます。 SSTIの脆弱性は、ユーザー入力が安全でない方法でテンプレートに埋め込まれ、サーバー上でリモートでコードが実行される場合に発生します。
XML external entity injection
XML external entity vulnerabilityは、脆弱に構成されたXMLパーサーを使用してユーザー制御のXML入力を解析するアプリケーションに対して発生する別の種類の脆弱性です。 XXEの脆弱性は、通常、サーバーから任意のファイルを読み取り、サービス拒否攻撃を引き起こす可能性があります。
しかし、特定の条件が満たされたときにサーバー上でコマンドが実行されることもあります。 例えば、脆弱性のある対象サーバーでPHP expect://wrapperが有効になっている場合、サーバー上で任意のコマンドを実行することができます。
これはコマンドインジェクションにつながる可能性のある脆弱性の網羅的なリストではなく、特定の条件を満たすとコマンドインジェクションにつながる可能性のある他のいくつかの脆弱性があることに注意してください。
結論
サーバー上でコマンドが実行される可能性のあるいくつかの異なる脆弱性があることは明らかです。 これらの脆弱性は、基盤となるインフラストラクチャを完全に制御できるため、影響が大きいため、開発者はこれらのコマンドインジェクションの脆弱性を認識する必要があります。
このシリーズの次のいくつかの記事では、ブラインドコマンドインジェクションの識別と悪用など、コマンドインジェクション関連の概念をいくつか