記事一覧はこちら

テキストファイル、getデータ、はてやUAまでも、あらゆる入力から任意のコードが実行できるphpの脆弱性が発覚

phpが受け取ることの出来るあらゆる入力から任意のコードを実行出来る攻撃方法を俺が5分で発見しました。この攻撃手段はphpの機能を用いてphpコードを評価させ、自らを実行させるようになっていました。

通常バックドアはどうのこうのですが、この攻撃方法は隠す必要すらなくgetパラメーターやブラウザのユーザーエージェントにも潜むことが出来ます。

まず、俺が3分で思いついたコードがコレ。これがオチです。 preg_replace($GET["from"],$GET["to"],'');

一行目にあるpreg_replaceとは、正規表現検索と置換を行う関数。 この関数単独であれば無害なものですが、「preg_replace」には「/e」という修飾子をつけたとき、検索・置換の代わりにコンテンツを実行することができるオプションがあります。

続いて、俺はgetに以下のデータを渡す事を思いつきました ?from=%2F.*%2Fe&to=phpinfo()

1分で思いついたコードにデータを渡し、最終的に生み出されるのが以下のコード。 preg_replace("/.*/e","phpinfo()",'');

そしてこれをデコード(?)した結果が(ry

と、言うわけでgigazine様の JPEG画像のEXIFヘッダにマルウェアを隠して実行させる新しい手口が登場 - GIGAZINEに対する当て付け記事です。

だってこれさあ、任意のコードが実行される可能性があるpreg_replace関数に外部のデータをそのまま渡すのが悪いのであって、それがexifかどうかは全然関係ないじゃん。上で例に出した通りgetでもいいしUAでもいいし。 確かに忘れがちではあるし、preg_replaceに値渡すときは注意しないとな って思うけど「JPEG画像のEXIFヘッダにマルウェアを隠して実行させる新しい手口」って言うのは正しいのかと激しく疑問であります。 そんな感じ。 imgTemp-2013-07-17-23-54-48 ?from=%2F.*%2Fe&to=exec('calc') で試したら当然の様に電卓が起動しました。当たり前。

・・あ、もしかしてすごい勘違いしてる系です?ハズカシ~