9

私は、最近SQLインジェクション攻撃の犠牲になった非営利のWebサイトのメンテナンスを任されています。誰かがサイトのフォームを利用して、データベース内の利用可能なすべてのテキストのようなフィールド(varchar、nvarcharなど)にテキストを追加しました。このフィールドは、HTMLとしてレンダリングされると、JavaScriptファイルを含めて実行します。

GoogleでURLを検索すると、ルーマニアまたは中国を拠点とするメールスパマーからのものであることがわかりますが、現時点では重要ではありません。

サイトで最も目立つ人気のあるページに表示されるテキストフィールドから情報を確認して手動で削除しましたが、サイトの他のテキストフィールドからテキストを削除するための最良のプログラム方法は何かについて興味があります。 。

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

4

4 に答える 4

5

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

于 2008-08-28T14:31:58.553 に答える
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)))
于 2010-10-08T21:47:24.857 に答える
1

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

私もそれについて書きました、そして私のソリューションコードはより一般的なクリーンアップを含んでいました。

重要な点の1つは、最初に行う必要があるのはサイトを削除することです。現在、ユーザーにマルウェアを積極的に提供しているため、後で法的な修正が行われる可能性があります。ユーザーが暗闇にさらされないようにプレースホルダーページを作成しますが、マルウェアを提供し続けないでください。次に、サイトを修正して、インジェクションに対して脆弱ではなくなったことを確認できます。この特定の攻撃に対してこれを行う最も簡単な方法は、Webユーザーのsysobjects / syscolumns権限を無効にすることですが、クリーンアップによってさらに多くのことを行う必要があります。そうしないと、再びクラックされるまで時間の問題になります。次に、提供されたコードを使用してサイトをクリーンアップし、ライブに戻すことができます。

于 2008-08-28T14:44:59.240 に答える
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 ['+@T+'] where ['+@C+']  like ''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'') begin print ''update ['+@T+'] set ['+@C+']=replace(['+@C+'],''''"></title><script src="http://1.verynx.cn/w.js"></script><!--'''','''''''') where ['+@C+']  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

私はこれについてしばらく前にここに書きました:マイクロソフトはSQLインジェクション攻撃に対処するためのツールをリリースしました

于 2008-08-28T14:33:07.990 に答える