SQLMAP的基本用法

Posted by Tattoo on 2019-01-24
Estimated Reading Time 4 Minutes
Words 1.2k In Total
Viewed Times

Sqlmap介绍

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB…SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,堆查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

常用参数

–version 显示程序的版本号
–hh 所有参数的用法
-v (0-6) 详细的等级
  0:只显示Python的回溯,错误和关键消息
  1:显示信息和警告消息
  2:显示调试消息
  3:有效载荷注入
  4:显示HTTP请求
  5:显示HTTP响应头
  6:显示HTTP响应页面的内容
-u 目标URL,为了规范,尽量用””引起来
-p 指定测试的参数
-b 获取数据库版本信息
-r 从一个文件中载入HTTP请求。
–batch 自动回答确认 (默认为大写选项)
–proxy 设置代理
–dbs 所有数据库名
–current-db 当前数据库名
–users 所有数据库用户
–current-user 当前用户名
–is-dba 当前用户权限(是否为root权限)
-D 指定数据库
-T 指定表
-C 指定列
–dump 列出数值
–tables 枚举数据库中的表
–columns 枚举数据库表列
–os-shell 执行系统命令
–sql-shell 执行SQL语句
–file-read 读文件
–flush-session 刷新session数据库,刷新检测、payload结果,否则会获取上一次执行的结果
–purge-output 删除所有保存的数据文件夹
–fresh-queries 刷新数据获取结果
–technique 指定注入技术B、E、U、T、S、Q
–prefix,–suffix 用来闭合一些语句,保证payload的正常执行
–prefix=”所用的闭合的符号”
–suffix=”注射后缀字符串payload”
–no-cast 关闭cast()函数的使用,对于一些版本的mysql服务器需要关闭此选项,不然会报错
–no-escape 关闭char(),减少载荷
–hex 有时候字符编码的问题,可能导致数据丢失,可以使用hex函数来避免

星号(*)的用法:
  用星号指定注入点,星号的位置放置payload。位置的不同,有可能导致payload失效。如果不指定user-agent,将会带有sqlmap标记,可能会被拦截

使用参数都有一个特点,凡是一个完整单词前面有两条横杠(–),如果是一个字母的单词缩写前面只有一条横杠(-)

批量扫描GOOGLE注入点

-g 处理Google dork的结果作为目标URL
–batch 自动选择,默认为大写的选项
–smart 启发式快速判断

eg: sqlmap -g “inurl:".php?id="“ –batch –smart

好的关键词才能找到更多漏洞

POST注入

POST注入其实也比较常见,一般出现在登录框等地方。
–method POST:指定提交方式为POST
–data:指定提交的数据
-p:指定SQL注入payload测试的参数

eg: sqlmap -u “http://127.0.0.1/index.php” –method POST –data “id=1&passwd=123456” -p id

COOKIE注入

默认情况下SQLmap只支持GET/POST参数的注入测试,但是当使用–level 参数且数值>=2的时候也会检查cookie时面的参数,当>=3的时候将检查User-agent和Referer。 那么这就很简单了,我们直接在原有的基础上面加上–level 2 即可验证cookie。

eg: sqlmap -u “http://127.0.0.1/xx.asp?id=xx" –cookie “id=xx” –level 2

通过Sqlmap工具执行SQL命令

执行指定的SQL语句:
  –sql-query=SQL语句

交互式的SQL命令行:
  –sql-shell参数可直接获得交互式的SQL命令shell

执行文件中的SQL语句:
  –sql-file=sql文件 可直接执行SQL文件中的语句

level和risk

–level探测等级:

共有五个等级,默认为1,高等级level包含低等级level的测试,等级越高payload越多,范围越广,时间越长
  level>=2,会测试cookie
  level>=3,会测试user-agent,referer
  level>=5,会测试HOST

–risk风险等级:

共有四个风险等级,默认是1,risk升高可造成数据被篡改等风险
  risk=1,会测试大部分的测试语句
  risk=2,会增加基于事件的测试语句
  risk=3,会增加OR语句的SQL注入测试
在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。

level和risk的区别:

  1.level是测试范围,risk是语句深度
  2.两者都会影响payload的测试量,值越大,量越大


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !