一文了解SQLMap

这篇具有很好参考价值的文章主要介绍了一文了解SQLMap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

SQLMap概述

SQLMap参数使用

输出详细程度参数 -v

目标参数

请求参数

注入参数

检测参数

技术参数

枚举参数

系统交互式shell


SQLMap概述

  • SQLMap是一款开源的渗透测试工具,可用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器 的权限等操作 SQLMap支持的数据库有:MySQL、Oracle、Microsoft SQL Server、Microsoft Access,IBM DB2、 SQLite等主流数据库 检测类型:union联合查询注入、布尔盲注、时间盲注、报错注入、堆叠注入

SQLMap参数使用

  • 输出详细程度参数 -v

    • -v参数用来指定输出数据的详细程度,一共有七个等级(0--6)
    • 默认为1,可使用-vv代替-v 2
等级 说明

0

只输出Python出错回溯信息、错误和关键信息
1 增加输出普通信息和警告信息
2 增加输出调试信息
3 增加输出已注入的payloads
4 增加输出HTTP请求
5 增加输出HTTP响应头
6 增加输出HTTP响应内容
  • 目标参数

等级 说明

-d

直连数据库
-u URL,指定需要检测的目标URL
-l 从Burp代理日志文件中解析目标地址
-m 从文本文件中批量获取目标
-r 从文件中读取HTTP请求
--purge 清除历史缓存
--flush-session 清除上次扫描缓存
  • 请求参数

    • 指定连接目标的方式,有以下几种参数
参数         说明
--method=METHOD 强制使用提供的HTTP方法,如:GET、POST、PUT等
--data=DATA 使用POST方法发送数据,如:--data="id=1&user=admin"
--cookie=COOKIE 指定HTTP cookie
--drop-set-cookie 忽略HTTP响应中的Set-Cookie参数
--user-agent=AGENT 指定HTTP User-Agent
--random-agent 使用随机的HTTP User Agent
--referer=REFERER 指定HTTP Referer
-H HEADER 设置额外的HTTP 头参数,如:-H "X-Forwarded-For:127.0.0.1"
--headers=HEADERS 设置额外的HTTP头参数,必须以换行符分隔
--delay=10 设置每个HTTP请求的延迟秒数
--safe-freq=SAFE 每访问两次给定的合法URL才发送一次测试请求
--batch 会自动选择默认项(Y)
  • 注入参数

    • 用于指定要测试的参数
参数 说明
-p 指定需要测试的参数
--skip=SKIP 指定要跳过的参数
--dbms=DBMS 指定DBMS类型,如:--dbms=MySQL
--os=OS 指定DBMS服务器的操作系统类型
--prefix=PREFIX 注入payload的前缀字符串
--suffix=SUFFIX 注入payload的后缀字符串
--tamper-TAMPER 用给定脚本参数注入数据
  • 检测参数

    • 用于指定检测的等级以及风险参数
    • --level:指定检测级别,共有五个等级,等级越高,检测范围越大(默认为1)
    • level >= 2时会检测cookie是否有注入
    • level >= 3时会检测User-Agent和Referer是否有注入
    • level >= 5时会检测Host是否存在注入漏洞
    • 不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值
参数 说明
--level 1 检测GET和POST
--level 2 增加检测HTTP Cookie
--level 3 增加检测User-Agent和Referer
--level 4 增加检测host
--level 5 增加检测host

        --risk:风险程度,有三个等级(默认为1)

参数 说明
--risk 1 测试大部分的测试语句        
--risk 2 增加基于事件性的测试语句
--risk 3 增加OR语句的sql注入测试
  • 技术参数

    • 以下参数用于调整特定的SQL注入技术的测试方法
参数 说明
--technique= 后面跟使用的SQL注入技术
B 布尔型盲注
T 时间型盲注
U 联合查询注入
S 堆查询注入
E 报错型注入
Q 内联查询注入
--time-sec=TIMESEC 设置延迟注入的时间,默认为5s
--second-order= 设置二阶响应的结果显示页面的URL,该选项用于二阶SQL注入
  • 枚举参数

参数 文章来源地址https://www.toymoban.com/news/detail-725746.html

说明
-a、--all 获取所有信息、数据
-b、--banner 获取banner,返回数据库的版本号
--current-user 获取当前用户
--current-db 获取当前数据库名
--hostname 获取服务器的主机名
--is-dba 探测当前用户是否为数据库管理员
--users 枚举出所有用户
--passwords 枚举出所有用户的密码哈希
--privileges 枚举出所有用户特权级
--roles 枚举出所有用户角色
--dbs 枚举出所有数据库名
--tables 枚举出数据库中的所有表名
--columns 枚举出指定表中的所有列
--schema 枚举出所有模式
--count 获取数据表的数目
--dump 导出数据表项
--stop 10 只取前10行数据
-D 数据库名 指定要枚举的数据库
-T 数据表名 指定要枚举的数据表
-C 字段名 指定要枚举的字段
--sql-query=QUERY 指定要执行的SQL语句
--sql-shell 调出交互式 SQL shell
  • 系统交互式shell

    • 参数: --os-shell 使用该参数后,就可执行相应的系统命令
    • 使用条件
      • 攻击者需要知道网站的绝对路径(sqlmap中可爆破路径)
      • 用户账号权限为管理员(网站必须是root权限或者为Administrator)
      • GPC为off,php主动转义的功能关闭
      • secure_file_priv为空
    • 原理
      • 通过into outfile 导出文件,利用SQL语句拿到shell权限
      • --os-shell本质是利用into outfile函数将一个可以上传文件的网页(tmpulcjf.php)写入到网站根目录 下,然后利用tmpulcjf.php上传了一个tmpbtrnt.php文件,可以执行系统命令,连接密码为cmd
    • 补充
      • 导入导出的权限在MySQL数据库中是由secure_file_priv参数控制,当这个参数后面为null时,表示不允 许导入导出;如果为具体的文件夹时,表示只允许在这个文件夹下导入导出;如果secure_file_priv参数 后面没有值(为空)时,表示可以在任何文件夹下导入导出
      • 当MySQL版本在5.7以上时,secure_file_priv参数的值默认为null,如果管理员没有修改过该参数,则无 法使用--os-shell

到了这里,关于一文了解SQLMap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】数据库中这么多数据类型你真的了解吗?一文看懂不同数据类型有何区别

    创建表t1,将name列数据类型设置为要tinyint 插入属性值:由于这里是tinyint类型,取值范围是【-128–127】,当插入这个范围内的数据显示成功,范围之外失败 使用tinyint unsigned类型创建表t2 无符号类型取值范围【0,255】,这点与C/C++一样 2.1.1 小结 MySQL对于数据类型不合法行为采

    2024年02月13日
    浏览(44)
  • 一文带你了解三大开源关系型数据库:SQLite、MySQL和PostgreSQL

    目录 1、概述 2、SQLite数据库 2.1、SQLite简介 2.2、SQLite优缺点 2.3、SQLite应用场景 3、MySQL数据库 3.1、MySQL简介 3.2、MySQL优缺点 3.3、MySQL应用场景 4、PostgreSQL数据库 4.1、PostgreSQL简介 4.2、PostgreSQL优势 4.3、PostgreSQL应用场景 5、在实际系统中的选择 VC++常用功能开发汇总(专栏文章列

    2024年02月08日
    浏览(80)
  • Django迁移数据到指定数据库

    在Django中,你可以配置多个数据库,并且可以为不同的操作指定使用不同的数据库。这意味着你确实可以同时将数据保存到SQLite和MySQL数据库中,但这需要你在代码中明确指定每次数据库操作应使用哪个数据库。 首先,你需要在Django设置文件 settings.py 中定义两个数据库连接,

    2024年02月01日
    浏览(43)
  • PostgreSQL连接指定数据库

    要连接到PostgreSQL中的指定数据库,您需要使用以下格式的连接字符串: 其中,username是连接PostgreSQL的用户名,password是该用户的密码,hostname是PostgreSQL服务器的主机名或IP地址,port是PostgreSQL服务器的端口号,database_name是要连接的数据库名称。 例如,如果您要连接到名为my

    2024年02月11日
    浏览(50)
  • 数据库三大范式的学习与数据库表设计的了解

    内容简单介绍 对于数据库三大范式的理解以及一些设计表示要注意的方面 本章内容梳理图 数据库的三大范式(Normal Forms)是关系数据库设计中用于确保数据结构化、减少数据冗余、并提高数据完整性的指导和规则。 以下是三大范式的简述: 第一范式(1NF) 定义 :如果关系

    2024年03月27日
    浏览(65)
  • 一文详解什么是数据库分片

        应用程序正在变得越来越好,它拥有更多的功能、更多的活跃用户,并且每天都会收集更多的数据。但数据库现在导致应用程序的其余部分变慢。数据库分片可能是问题的答案,但许多人不知道它是什么,最重要的是何时使用它。在本文中我们将讨论什么是数据库分片、

    2024年02月16日
    浏览(59)
  • postgresql创建一个只读账户指定数据库

    要在 PostgreSQL 中创建一个只读账户,您可以按照以下步骤进行操作: 1. **登录到 PostgreSQL:** 使用具有足够权限的管理员账户(通常是 \\\"postgres\\\" 用户)连接到 PostgreSQL 数据库。 2. **创建只读账户:** 使用以下命令创建一个只读账户。在这个示例中,假设您要创建一个名为 \\\"re

    2024年02月11日
    浏览(47)
  • Spring Boot应用中如何动态指定数据库,实现不同用户不同数据库的场景

    当在 Spring Boot 应用程序中使用Spring Data JPA 进行数据库操作时,配置Schema名称是一种常见的做法。然而,在某些情况下,模式名称需要是动态的,可能会在应用程序运行时发生变化。比如:需要做数据隔离的SaaS应用。 所以,这篇博文将帮助您解决了在 Spring Boot 应用程序中如

    2024年04月26日
    浏览(48)
  • Oracle数据库在指定字段后新增字段

    记录一下数据库中为表增加字段,且在指定字段后新增; mysql数据库的话比较简单通过一下sql语句即可实现: 而Oracle数据库不支持上述语法,添加字段只能显示到最后一位,所以如果非要添加字段到指定字段后的话可以通过新建数据表并修改表明实现,如下面语句所示:

    2024年02月15日
    浏览(54)
  • 一文详解python中的数据库操作

    最近做毕设,需要添加个数据库,记录一下。 重点介绍数据库API接口中的连接对象和游标对象 1. 连接对象 数据库连接对象主要提供获取数据库游标对象和提交/回滚事务的方法,以及关闭数据库连接。 使用connect函数获取对象,该函数有多个参数: host 主机名 database/db 数据库

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包