SQLMAP简介及使用方式

一、SQLMAP简介

SQLMAP是一款由Python开发的自动化SQL注入工具,其主要功能是扫描、发现并利用SQL注入漏洞,它内置了很多绕过插件,并且支持多种数据库,如MySQL、Oracle、PostgreSQL、SQL Server、Access、IBM DB2、SQLite等数据库;


SQLMAP的强大之处在于对数据库指纹的识别、数据库枚举、数据提取、访问目标文件系统、并在获取完全的操作权限时执行任意命令,它支持以下几种独特的注入:

  • 基于布尔类型的注入,即可根据返回页面判断条件真假的注入;
  • 基于时间的盲注,即不能根据页面返回判断的时候,利用时间线是否延时来判断条件的真假;
  • 基于报错的注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中,比如数据库报错的信息等;
  • 联合查询注入,即可以使用Union的情况下注入;
  • 堆叠查询注入,即可以同时执行多条语句时的注入;

二、SQLMAP安装

前面我们提到了SQLMAP是由Python编写,因此我们需要安装配置Python环境,安装完成后,将Python目录加入环境变量,然后将下载好的SQLMAP目录放到Python目录下,然后配置好环境变量,然后即可在CMD环境下启动SQLMAP

三、SQLMAP的使用

  • 注入判断
    • sqlmap.py -u url

  • 查询当前站点使用的数据库
    • sqlmap.py -u url --current-db

  • 查询当前用户下所有数据库
    • sqlmap.py -u url --dbs

  • 查询表名
    • sqlmap.py -u url -D dbname --tables

  • 查询字段名
    • sqlmap.py -u url -D dbname -T tablename --columns

  • 查询字段内容
    • sqlmap.py -u url -D dbname -T tabalename -C olumnname --dump

  • 查询数据库的所有用户(当前用户有读写权限)
    • sqlmap.py -u url --users

  • 查询数据库用户的密码(当前用户有读取权限)
    • sqlmap.py -u url --password

  • 查询当前数据库用户名称
    • sqlmap.py -u url --current-user

  • 指定数据库类型
    • sqlmap.py -u url -dbms=mysql/oracle/mssql

  • 判断用户是否为管理员
    • sqlmap.py -u url --is-dba
    • 返回为结果为true时,当前数据库用户为root,返回结果为false则相反

  • --level 5 探测等级
    • --level 1 默认的等级,会进行基本的测试,包括GET和POST方式
    • --level 2 在原有的基础上增加对cookie的检测
    • --level 3 增加对USER AGENT/REFERER的检测
    • --level 4 更多的payload
    • --level 5 最高等级,包含所有的payload,会尝试自动破解出cookie、xff等头部注入(速度最慢)
  • -v 显示调用信息的7个级别
    • 0 只显示python错误以及严重的信息
    • 1 同时显示基本信息和警告信息
    • 2 同时显示debug信息
    • 3 同时显示注入的payload
    • 4 同时显示http请求
    • 5 同时显示http响应头
    • 6 同时显示http响应页面
  • 伪造Referer头
    • --referer:当前等级为3或3以上时,会尝试对referer注入,可以使用referer来伪造referer来源
    • 执行自定的SQL语句
    • --sql-shell

四、SQL注入的修复与绕过

  • 目前为止我们已经学习了手工注入和SQLMap工具的注入方法。 但是,如果目标安装了一些防护软件怎么办呢?
  • 常用绕过思路:
    • 大小写绕过
    • 双写绕过
    • 编码绕过
    • 内联注释绕过
    • 其他数据库特征
  • SQLMAP使用脚本绕过
    • sqlmap.py -u- url --tamper “脚本名称.py”
  • SQLMAP常见绕过脚本(部分)
    • apostrophemask.py  将引号替换为UTF-8,用于过滤单引号
    • base64encode.py   替换为base64编码
    • multiplespaces.py   围绕着SQL关键字添加多个空格
    • nonrecursivereplacement.py 双写语句替换预定义的payload
    • space2randomblank.py  将空格替换为其他的有效字符
    • unionalltounion.py   union all select替换为union select
    • securesphere.py   追加一些其他特殊字符串
    • space2hash.py  将空格替换为#号,并添加一个随机字符串和换行符
    • space2mssqlblank.py 空格替换为其他空符号
    • space2mssqlhash.py 空格替换为#号,并添加一个换行符
    • between.py   用NOT BETWEEN 0 AND 替换大于号,用 BETWEEN  AND替换等号
    • percentage.py   ASP每个字符前添加%,如%s%e%l%e%c%t%...
    • charencode.py  对未url编码处理的Payload字符串进行url编码
    • charunicodeencode.py 使用unicode编码
    • space2comment.py  空格替换为/**/
    • equaltolike.py    等号替换为like
    • greatest.py   用GREATEST替换大于号
    • modsecurityversioned.py  空格替换为MySQL内联注释
    • modsecurityzeroversioned.py 使用MySQL内联注释(/!00000/)注入
    • space2mysqldash.py  空格替换为--和一个换行符
    • chardoubleencode.py  对Payload进行两次URL编码(不处理已经编码的字符)
  • 修复建议
    • 在服务器端要对所有的输入数据验证有效性。
    • 在处理输入之前,验证所有客户端提供的数据,包括所有的参数、URL和HTTP头的内容。
    • 验证输入数据的类型、长度和合法的取值范围。
    • 使用白名单验证允许的输入字符而不是黑名单。
    • 在危险字符输入后进行转义或编码。
    • 明确所有输入正确的字符集。
    • 不使用动态拼接的SQL语句,如果使用对特殊字符进行转义。
    • 设置最小权限运行程序,如apache权限运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>