SQL注入工具sqlmap安装使用详解靶场实验

2024-05-15 03:44

本文主要是介绍SQL注入工具sqlmap安装使用详解靶场实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

1、sqlmap简介

sqlmap 是一款开源的渗透测试工具,可以自动化进行SQL注入的检测、利用,并能接管数据库服务器。它具有功能强大的检测引擎,为渗透测试人员提供了许多专业的功能并且可以进行组合,其中包括数据库指纹识别、数据读取和访问底层文件系统,甚至可以通过带外数据连接的方式执行系统命令。

项目地址:https://github.com/sqlmapproject/sqlmap

kali系统内置sqlmap工具,可以先查看到版本号,如果不最新版本会提示,升级版本可用命令 apt-get upgrade进行升级。

在这里插入图片描述

kali系统下使用命令

# 查看常用命令列表
sqlmap -h
# 查看所有命令列表
sqlmap -hh
# 查看sqlmap版本号,注意前面是2个横杆
sqlmap --version

如果需要kali系统虚拟机,请关注我的公众号:大象只为你,后台回复:虚拟机。

其他系统比如windows,可以下载源码下来,运行环境是python2.6, 2.7 and 3.x 。以windows为例,使用git命令克隆代码到本地,或者在项目右侧的Release选择最新的Source code(zip)下载并解压即可,确保自己本机有python环境就可用了。

# git命令下载
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
# 查看常用命令列表
python sqlmap.py -h
# 查看所有命令列表
python sqlmap.py -hh

kali系统与windows使用命令不同点在于:前者封装好为sqlmap,后者要加上python,其他没有不同。我个人比较习惯在kali系统下使用,下文给的示例命令都是基于kali系统。

2 、SQL注入攻击流程

SQL注入漏洞产生根本条件是可控变量的存在和特定函数。SQL注入攻击流程一般是猜测数据库类型,再根据数据库类型选择思路。常见开发语言和数据库组合如下:

ASP+Access
ASP.NET+MSSQL
PHP+MySQL
Java+MySQL

怎么查看网站使用开发语言,可用浏览器插件Wappalyzer,或浏览器按F12看网络请求的响应头X-Powered-By会体现出来。

在这里插入图片描述

3、MySQL攻击思路

1、非root的注入攻击:

常规类的猜解,黑盒测试中可以采用user()获取当前用户权限,白盒中看连接用户。

2、root用户的注入攻击:

文件读写操作,跨库查询注入等。

MySQL5.0以上版本,自带的数据库information_schema,存储数据库下的数据库名及表名,列名信息的数据库。想要获取到相关信息可从以下几方面着手:

1、数据库版本:version(),看是否带有库information_schema,可用来猜解表名、列名、数据等;
2、数据库用户:user(),看是否符合ROOT型注入攻击;
3、当前操作系统:@@version_compile_os,看是否支持大小写或文件路径选择;
4、数据库名字:database(),为后期猜解指定数据库下的表、列做准备。

4、sqlmap常用命令介绍

-u  #注入点,也就是请求url地址,get请求在此处不再加上构造的poc
-f  #指纹判别数据库类型 
-b  #获取数据库版本信息 
-p  #指定可测试的参数(?page=1&id=2 -p "page,id") 
-f  #指纹判别数据库类型 
-b  #获取数据库版本信息 
-p  #指定可测试的参数(?page=1&id=2 -p "page,id") 
-v  #详细的等级(0-6) 0:只显示Python的回溯,错误和关键消息。 1:显示信息和警告消息。 2:显示调试消息。 3:有效载荷注入。 4:显示HTTP请求。 5:显示HTTP响应头。 6:显示HTTP响应页面的内容 
--data #通过POST发送数据,这个我建议使用参数-r t1.txt t1.txt为请求体内容
--columns        #列出字段 
--current-user   #获取当前用户名称 
--current-db     #获取当前数据库名称 
--users          #列数据库所有用户 
--passwords      #数据库用户所有密码 
--privileges     #查看用户权限(--privileges -U root) 
-U               #指定数据库用户 
--dbs            #列出所有数据库 
--tables -D ""   #列出指定数据库中的表 
--columns -T "user" -D "mysql"      #列出mysql数据库中的user表的所有字段 

更多命令详解请参考:https://www.cnblogs.com/bmjoker/p/9326258.html ,里面有详细命令含义和一些常用的组合命令。

5、靶场实验

以sqli-labs靶场实验SQL攻击注入,靶场搭建请详见我的另一篇文章《靶场环境搭建【XP、pikachu、dvwa、sqli-labs】》。

5.1、get方式

sqli靶场选择get请求的Less-1

在这里插入图片描述

# 确认数据库类型、数据库版本信息、当前用户名称、当前数据库名称、数据库用户所有密码、列出所有数据库 
sqlmap -u "http://192.168.242.1/sqli/Less-2/?id=1" -f -b --current-user --current-db --passwords --dbs -v 0

在kali系统输入该命令后按enter执行命令,过程会提问y或n进行确认是否继续操作。如果想继续操作,则输入y或按enter,如果不继续输入n。在爆破密码过程会提示密码字典文件,如果自己没有其他更好的选择,按默认即可,按enter继续。
在这里插入图片描述
在这里插入图片描述

5.2、post方式

sqli靶场选择post请求的Less-11,打开Burp suite,在输入框架输入任意账号密码,在Burp suite的历史请求记录找到请求记录,把Request的请求体copy到一个新建的文本文件,比如t1.txt,**注意在username=admin后要加*标识为SQL注入点。**然后把t1.txt文件复制到kali系统的sqlmap命令目录下。

在这里插入图片描述

在执行sqlmap命令时所在目录,比如/home/kali,把t1.txt复制到/home/kali下。

# 确认数据库类型、数据库版本信息、当前用户名称、当前数据库名称、数据库用户所有密码、列出所有数据库 
# 因为t1.txt里面已经有包含请求路径了,就不需要再设置-u了
sqlmap -r t1.txt -f -b --current-user --current-db --passwords --dbs -v 0

同样的输入该命令后按enter执行命令,过程会提问y或n进行确认是否继续操作。正常情况下都是输入y或按enter往下执行,这边只截取与get方式不同点,后面信息列出来和get一样。

在这里插入图片描述

5.3、题外话

sqlmap使用起来真的很简单,但我一直没有使用,最开始给自己找借口说想用手工注入的方式,在学习阶段确实是以手工方式是有助于理解。后面自己懂了原理,总是不想看文档学习,一拖再拖,今天学习后操作起来一点都不难,在挖漏洞方面也会更高效。

6、我的公众号

敬请关注我的公众号:大象只为你,持续更新网安相关知识中…

这篇关于SQL注入工具sqlmap安装使用详解靶场实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990712

相关文章

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Java中的stream流分组示例详解

《Java中的stream流分组示例详解》Java8StreamAPI以函数式风格处理集合数据,支持分组、统计等操作,可按单/多字段分组,使用String、Map.Entry或Java16record... 目录什么是stream流1、根据某个字段分组2、按多个字段分组(组合分组)1、方法一:使用 Stri

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据