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

相关文章

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.