آموزش باگ SQL injection
آموزش باگ SQL injection ، برای آموزش کامل این باگ همراه ما باشید
درود بر تمامی کاربران سایت آموزش هک و امنیت PentestCore
در این آموزش قصد داریم به آموزش باگ SQL injection بپردازیم.
ایتدا اجازه بدهید بیشتر با این باگ آشنا بشویم
همانطور که از نام این باگ پیداست مربوط به پایگاه داده است و این حمله از طریق تزریق کدهای SQL در پایگاه داده از طریق URL رخ می دهد.
امکان وجود باگ SQL injection در تمامی پایگاه داده ها مانند MariaDB ,Microsoft SQL ,Oracle ,My SQLو … وجود دارد.
این باگ هیچ ربطی به ضعف این پایگاه داده ها ندارد بلکه این باگ توسط اشتباهات برنامه نویس در زبان های PHP , ASP و کانفیگ غیر استاندارد سرور به وجود می آید و به کاربر اجازه مقدار دهی و اجرا دستورات پایگاه داده را از طریق URL می دهد. Blind SQL Injection یکی از حالات این باگ است.
باگ SQL injection می تواند اهداف متفاوتی داشته باشد. وقتی که شما بتوانید دستورات پایگاه داده را از طریق URL اجرا کنید تقریبا هر کاری میتوانید بکنید.سرقت یوزرو پسورد ادمین و کاربران ، سرقت و تغییر تمامی محتوا سایت، دیفیس کردن سایت و …
اطلاعات تکمیلی:
- میزان گسترش پذیری : بالا
- میزان استفاده هکر ها از باگ : بالا
- سطح دانش برای نفوذ: در حالت عادی دانش بالا اما در صورت استفاده از نرم افزار پایین
SQL injectio دارای متد های متفاوتی است از جمله:
- متد UNION
- متد Error Based
- متد Blind Sql Injection
- متد Boolean Based Blind
- متد Time Based Blind
شاید بتوان گفت رایج ترین متد ، متد UNION است
ما در این آموزش متد UNION را از مجموعه متد های باگ SQL injection آموزش می دهیم و بر روی پایگاه داده My Sql کار میکنیم.
آموزش باگ SQL injection
برای شروع شما باید با یک دورک ، تارگت خودتون رو انتخاب کنید.
دقت کنید که در URL حتما حتما باید ورودی وارد شده باشد. مثلا newsid=3
در اینجا عدد 3 یک ورودی است که مشخص می کند خبر 3 را باید خواند و در پایگاه داده بدنبال این خبر می گردد. پس بدنبال سایت هایی که در URL خود عبارتی مثل بالا را دارند بروید.
برای آموزش دورک نویسی هم توصیه میکنم آموزش های زیر را مطالعه بفرمایید
آموزش دورک نویسی
آموزش ساخت دورک sql
ساخت دورک با ابزار اختصاصی
حال فرض کنید تارگت ما به شکل زیر است:
Target.com/news-detail.php?newsId=4
حال یک عبارت کوتیشن ( این عبارت ‘ )را در انتها URL می گذاریم.
‘Target.com/news-detail.php?newsId=4
اگر error بدهد خب باگ SQL injection دارد.
اما چطور با یک کوتیشن چنین چیزی را متوجه شدیم؟
ما در URL در حال مقدار دهی هستیم و یک عبارت کوتیشن را سمت پایگاه داده ارسال میکنیم. دستور کوتیشن به گونه ای است که هنگامی که کوتیشن باز میشود، باید بسته شود. وقتی که ما تنها یک کوتیشن می گذاریم ، پایگاه داده error می دهد و می گوید کوتیشن را ببند. یعنی یک کوتیشن دیگر اضافه کن تا ساختار دستور درست شود. در اینجا ما می فهمیم که دستورات ما سمت پایگاه داده ارسال می شوند.
اما گاهی امکان دارد error ندهد.
اگر error ندهد 2 حالت پیش میاد:
- باگ دارد اما از سمت سرور error بسته شده که error به کاربر نمایش داده نشود
- باگ ندارد
اگر error نداد برای اطمینان از اینکه باگ دارد یا نه ما ابتدا عبارت and 1=1 را در انتها URL میگذاریم. سپس عبارت and 1=2 را می گذاریم.
اما چرا اینکار را میکنیم؟
عبارت and1=1 یک عبارت صحیح است و 1 برابر 1 است. پس اگر مقدار درهی در URL باز باشید دستور فرستاده می شود و صفحه براحتی بالا میاد .بعد and 1=2 یک عبارت غلط است. چون 1 برابر 2 نیست. در اینجا امکان دارد روند بارگذاری صفحه به مشکل بخورد. مثلا متن خبر درست لود نشود. عکس ها لود نشود یا هر تغییر دیگری. در اینجا با اینکه error بسته است اما ما می فهمیم که باگ دارد چون عبارت نادرست ما که and 1=2 بود سمت پایگاه داده ارسال شد و بر روی لود شدن صفحه تاثیر گذاشته.
شکل دستورات در انتها URL ، مانند زیر است:
Target.com/news-detail.php?newsId=4 and 1=1
Target.com/news-detail.php?newsId=4 and 1=2
اما حالا که متوجه شدیم که باگ دارد یا نه، باید متوجه بشویم که که پایگاه داده از چه نوعی است.
اگر شما از افزونه wappalyzer استفاده کنید ، می توانید متوجه بشید که سایت با چه زبانی نوشته شده است.آموزش wappalyzer در زیر قرار گرفته است :
شناسایی اطلاعات فنی سایت با افزونه wappalyzer
اگر سایت با PHP نوشته شده بود یا وب سرور آپاچی باشد به احتمال زیاد پایگاه داده Mysql است.
اما اگر سایت با ASP نوشته شده باشد و وب سرور IIS باشد احتمالا پایگاه داده Microsoft SQL Server است.
توجه کنید که نوشتم احتمالا. ممکن است که شخصی از زبان ASP استفاده کند و پایگاه داده Mysql .
هرچند که این کار حرفه ای نیست اما احتمال چنین کاری و برعکس آن وجود دارد.
به همین منظور روش دستی تشخیص پایگاه داده هم عنوان می کنیم.
در انتها URL باید عبارت ‘and 1=’1 را بنویسیم مانند زیر:
‘Target.com/news-detail.php?newsId=4 and 1=’1
اگر صفحه بدون تغییر بارگذاری شود پایگاه داده Mysql است اما اگر کوچکترین تغییری در صفحه به وجود بیاد و عکس یا متنی لود نشود پایگاه داده Microsoft SQL Server است اما چه اتفاقی می افتد که چنین می شود؟
در پایگاه داده Microsoft SQL Server اگر عدد در کوتیشن برود ، اون رو رشته حساب می کند و خاصیت عددی خود را از دست می دهد. اما در Mysql اگر عدد در کوتیشن برود همچنان عدد است . پس اگر پایگاه داده Microsoft SQL Server باشد 1=’1’ یک عبارت غلط است.چون 1 اول یک عدد است و 1 دوم یک کاراکتر یا رشته است. وقتی هم عبارت غلط باشد سایت درست لود نمی شود. اما اگر پایگاه داده Mysql باشد عبارت 1=’1’ یک عبارت صحیح است، و سایت براحتی بارگذاری می شود.
قسمت اول آموزش به پایان رسید.
با قسمت های بعدی همراه ما باشید تا این باگ را بصورت کامل با هم فرا بگیریم.
۲۲ دیدگاه در “آموزش باگ SQL injection”
خیلی خوب بود فقط اگه ممکنه سایر متود ها رو هم آموزش بدید
با تشکر
درود بر شما دوست عزیز
سپاس از اینکه نظرخودتون روبا ما درمیان گذاشتید.
بعد از اینکه در قسمت های آتی متد union تمام شد، به سراغ آموزش کامل دیگر متد ها و باگ ها می رویم.
شاد و پیروز باشید.
درود ممنون بابت آموزش ، عالی بود
درود برشما کاربر گرامی.
سپاس از اینکه ما رو همراهی میکنید.
با قسمت بعد این آموزش هم همراه ما باشید
پیروز باشید
با سلام.اگر در انتهای سایت یا کوتیشن یا ۱=۱ یا ۱=۲ بگذاریم سایت ارور۴۰۴ بدهد آیا باگsqlدارد؟ ممنون
درود
خیر باگ ندارد اما باید برسی دقیق تری انجام شود
عالی بود نتیجه یه روز سرچمو دیدم
درود
خوشحالیم اموزش برای شما مفید بوده است
موفق باشید
با سلام ممنون از اموزش خوبتون !
اگر سایت ارور ۴۰۳ بده باگ داره ؟
درود بر شما و تشکر
خیر ربطی ندارد ارور ۴۰۳ که مشاهده می کنید احتمالا صفحه مورد نظر شما دارای محدودیت است و نمی توانید مشاهده کنید.
سلام ممنون از سایت خوب و مطالب عالیتون
توروخدا آموزش متد های دیگر رو هم بزارید .این فقط متد union بود
درود از دیدگاه خوب شما سپاس گذاریم
بزودی اموزش های دیگری با متد های دیگر قرار خواهد گرفت.
سلام واقعا آموزشاتون عالی هست
یه سوال من روی سایتی تست کردم و به من runtime error می دهد آیا سایت باگ sql داره؟
درود بر شما مرسی از دیدگاه خوبتون
باید برسی شود به این صورت نمی توان تشخیص داد.
درود به شما با اموزش های خوبتون 🙂
این دوره تمام شده بدونیم ..خیلی وقت بروز نشده…
درود بر شما
در صورت درخواست های بیشتر برای ادامه این اموزش ، اموزش های جدید تری در این رابطه هم قرار خواهیم داد.
سلام
من هر دورکی که مینویسم و گوگل نتایجی که به من میده اصلا در حالت معمولی باز نمیشن(یعنی وارد سایت نتیجه نمیشه )، و نمیتونم روش ازمایشی انجام بدم به نظر شما مشکل چیه ؟؟
درود
احتمالا از سایت هایی که باز می کنید با آی پی ایران باز نمی شوند آی پی خود را تغییر دهید یا دورک هایی که استفاده می کنید درست نیستند پیشنهاد می کنیم به آدرس زیر بروید و از ابزار آنلاین ما برای ساخت دورک استفاده کنید.
tools.pentestcore.com
ممنون از اموزش تون و سایت خیلی خوب تون لطفا باقی متد ها را هم اموزش بدهید
درود بر شما تشکر
درصورت امکان قرار خواهیم داد.
سلام من وب سایتی رو پیدا کردم که مطمئن هستم باگ sql داره ولی چطور صفحه ایی رو پیدا کنم که به صورت site.com/index.php?id=xx باشه تا بتونم متود ها رو به کمک اون پیدا سازی کنم؟
درود
همه وب سایت ها از ورودی های Get استفاده نمی کنند شما باید با انواع روش ها و تکنیک ها اشنا باشید تا در هر شرایطی بتوانید از باگ استفاده کنید اگر ورودی شما به صورت POST بود پیشنهاد می کنیم از ابزار Burp استفاده کنید.