• 安全测试入门——sqlmap的简易使用


    一、了解sql注入
    注入原理
    引用文本通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

    注入举例
    假设一个虚拟接口获取团队信息的接口http://www.baidu.com/api/groups?groupid=13634,服务端的SQL查询语句可能是“select * from groups where groupid=13634”。

    假如把接口改为http://www.baidu.com/api/groups?groupid=-1’or ‘1’=’1,如果服务端没有对传入的参数做校验,就会执行这样一条SQL查询语句“select * from groups where groupid=-1 or 1=1”。由于这里控制groupid=-1的条件为假,1=1的条件为真,那这条SQL语句执行之后会把groups表内所有的数据都查询出来,如果接口返回没有控制,就会出现把所有的数据返回的现象。

    其他注入手法
    上面举的例子属于最常见SQL注入手段,其实还有很多,例如注入SQL关联操作、注入注释符号#绕过验证、注入删除恶意操作、资源枚举等。一般来说,SQL注入是层层递进的,攻击者可以利用服务端返回的任何有效信息,特别是不引人注意的错误信息来进行下一步的攻击。有些还可以根据数据库的特性来获取数据库的信息,比如MySQL数据库自带的information_schema数据库就提供了当前mysql实例中所有数据库的信息,一旦攻击者可以获取到这个数据库的信息,那么意味着整个MySQL中的数据库都已经暴露了。

    二、Sqlmap使用环境搭建
    Sqlmap简介
    Sqlmap是一款自动化sql注入的工具,支持大部分主流数据库,包括mysql、oracle等,支持以下注入方式:

    基于布尔的盲注(Type:boolean-based blind),即可以根据URL返回判断条件真假的注入。
    基于时间的盲注(Type:time blind),即不能根据URL返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即URL返回时间是否增加)来判断。
    基于报错注入(Type:error-based),即URL会返回错误信息,或者把注入的语句的结果直接返回在URL中。
    联合查询注入(union query),可以使用union的情况下的注入。
    堆查询注入,可以同时执行多条语句的执行时的注入。
    注意:使用sqlmap注入的接口必须带有参数或者body,否则无法进行注入操作。

    Sqlmap环境搭建
    安装Python环境,Python2.7以上版本都可以。
    安装Git。
    拉取Sqlmap的代码,在git的bash中输入 :
    git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
    Win+R cmd进入命令提示符,使用cd命令进入Sqlmap代码根目录,输入:python sqlmap.py -h,回车,输出帮助信息则表示已经可用。
    或者使用pycharm等集成开发平台打开此项目,直接在其下的Terminal输入:python sqlmap.py -h。
    三、Sqlmap使用样例
    基本使用
    样本1:get接口
    URL:https://www.baidu.com/api/groups?groupid=13634
    cookie:wps_sid=123456

    输入命令:python sqlmap.py -u “URL” --cookie=“cookie” --batch
    ———————————————————————————————————————————————
    样本2:post接口
    URL:https://www.baidu.com/api/v3/groups/51183/files/351748
    cookie:wps_sid=123456
    body:{“fname”:“我的团队”}

    输入命令:python sqlmap.py -u “URL” --cookie=“cookie” --data=“body” --batch

    输入后回车查看结果如下图

    结果分析:

    All tested parameters do not appear to be injectable——所有测试的参数似乎都不是可注入的

    且返回的状态码均为4XX,说明对该接口的请求均失败了

    以上结果均说明该接口通过了sql的注入测试

    参数详解
    基本选项:
    -h 查看基本帮助
    -hh 查看详细帮助
    –version 查看sqlmap版本
    -v LEVEL 扫描详细级别,LEVEL取值0-6,默认为1
    目标选择
    -u URL 指定测试URL
    –url=URL 指定测试URL,同上
    -m FILE 批量接口注入,FILE为本地保存了多个接口的.txt文件路径,一行一个URL
    -l FILE 批量接口注入,FILE为本地保存了多个接口的文件路径,接口间用分隔符分割
    请求设置
    –data=DATA 指定post接口的body
    –cookie=COOKIE 指定接口的cookie
    –random-agent 使用随机选择的HTTP User-Agent标头值
    –proxy=PROXY 指定接口的代理
    –tor 使用Tor匿名网络
    –check-tor 检查Tor是否正确使用
    注入设置
    -p TESTPARAMETER 指定测试接口的某几个参数
    –dbms=DBMS 指定测试的数据库类型
    枚举注入:
    -a 检索所有内容
    –current-user检索数据库当前用户
    –current-db检索当前数据库
    –passwords枚举数据库用户密码哈希值
    –tables枚举数据库表
    –columns枚举数据库表列
    –schema枚举数据库架构
    –dump查询出某个数据库下所有数据表的数据
    –dump-all查询出所有数据库下所有数据表的数据
    -D DB 查询指定的数据库的数据
    -T TBL 查询数据库中指定的表数据
    -C-要枚举的COL 查询数据库中指定的表列数据
    其他设置:
    –batch 自动选择默认选项,不需要用户输入
    –smart 智能判断选择,只有在积极启发式的情况下进行彻底测试

    ————————————————
    版权声明:本文为CSDN博主「想喝美式却头晕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_39740094/article/details/103511476

  • 相关阅读:
    Java基础-IO流对象之字节流(Stream)
    Java基础-IO流对象之File类
    Java基础-集合的嵌套
    rsync命令的基本使用
    java基础-Map集合
    Java基础-Collection子接口之Set接口
    Java基础-Collection子接口之List接口
    Java基础-泛型
    Unity4.3 bug GetChild顺序错乱
    Windows系统上的.Net版本和.NETFramework的C#版本
  • 原文地址:https://www.cnblogs.com/javalinux/p/15825995.html
Copyright © 2020-2023  润新知