ラウンド1
<?PHP $コンテンツ?=「<PHP出口; ?>」; $コンテンツ =。$ _POST [ 'TXT' ]; ますfile_put_contents($ _POST [ 'ファイル名']、$コンテンツ)。
$content
私たちは言葉を書く場合でも、成功につながるの出口を増加させる処理の開始時に、実行することはできません。幸いなことに、ここでは$_POST['filename']
キャストの魔法に//フィルタプロトコル:制御協定があり、我々は、PHPを使用することができます。
#方法、Base64エンコード
使用PHP:// base64でデコードストリームフィルタ方式は、$content
デコード機能特性PHPのBASE64_DECODEを使用して除去し、「死んで終了します。」
我々はすべて知っているように、base64エンコードは、64印刷可能な文字が含まれている、との出会いが文字ではありませんBASE64を、デコード時にPHPは、これらの文字、デコードに新しい文字列の唯一の法的性格をスキップします。
ときに、$content
追加された<?php exit; ?>
第1デコードにそれを//filter/write=convert.base64-decode:後で、私たちは、PHPを使用することができます。、文字<?,,;、>復号処理では、スペースなどを、7つの文字の合計文字をbase64エンコードの範囲を満たしていないので最終的には唯一の「phpexit」であり、我々は他のデコードされた文字を渡し、無視されます。文字。
「Phpexit」7つの文字の合計、base64でアルゴリズムを復号する際には4バイトのセットがあるので、そう彼は8文字の「」合計を増やし与えます。このように、「phpexitaは、」正常に復号し、我々はウェブシェル渡すコンテンツの背後にbase64でも正常に復号されます。結果ではありません<?php exit; ?>
まったく。
正味の効果:
文字列を操作する方法を使用して#二つの方法、
BASE64特性を利用した方法に加えて、我々はまた、PHPを使用することができます://フィルタ文字列操作方法は、「出口の死」を削除します。私たちはこれを見て<?php exit; ?>
何を実際に?
それは、XMLタグであるため、我々はそれを削除するstrip_tagsの機能を使用することができ、実際にXMLタグで、PHP://フィルタは、まさにこのアプローチをサポートしています。
//filter/read=string.strip_tags/resource=php:入力の//効果のphpを参照するには、次のテストコードを書きます:
エコー のReadFile( 'PHP://filter/read=string.strip_tags/resource=php://入力');
目に見える、<?php exit; ?>
削除されました。strip_tagsも削除されます場合でも、上記の主題に戻って、私たちの究極の目標は、ウェブシェル、およびPHPコードを記述することですが、ウェブシェル書かれています。
幸いなことに、PHPは://フィルタは複数のフィルタを可能にするには、まずウェブシェルにbase64エンコードを使用することができます。呼び出しが完了しstrip_tagsした後、再びbase64でデコードすること。「死出口」とは、第1工程で除去されるが、ウェブシェルを第二段階で低減されます。
正味の効果:
#メソッド3、ROT13エンコーディング
コア、上記同様の原則が取り除か「死出口」です。<?php exit; ?>
ROT13エンコーディングになるだろう後<?cuc rkvg; ?>
、PHPはオープンshort_open_tagがない場合には、PHPはこの文字列を認識しない、もちろん、実行されません。
ラウンド2
<?PHP A = $ _POST [ 'TXT' ]; ますfile_put_contents($、」<PHPの?エグジット();」。$);
これは$制御可能な状況を想定し、前と二つの変数の後に同じです。
この方法では、大きな違いを考えるの変数と変数の構成異なる方法と同様の構造が悪いわけではない、を取り除くために必要である<?php exit();
が、構造が比較的複雑です。
#方法、Base64エンコード
##########明日はもっと継続します