0

我正在解决一个关于 SQL 注入的 TryHackMe 的房间。但我无法弄清楚我想到的一件事,在花了很多时间之后,我认为最好在这里问这个问题。在房间里有一台机器要部署,在部署机器后,它给了我一个接口(webapp),它接受我的输入,如下所示:

在此处输入图像描述

如果你给它一个像test的值。它返回以下输出:

在此处输入图像描述

当我看到它时,我认为这是一个简单的 SQLi 问题,所以我尝试了常见 dbms 的大多数基本 SQLi 有效负载,如下所示:

  1. ' ; sleep(1) --
  2. ' or 1=1 -- ...

但是他们都没有工作并给我返回了这样的错误消息: 在此处输入图像描述

在那次失败之后,我运行了 sqlmap,它发现了 2 种类型的 SQLi 有效负载,其有效负载如下:

在此处输入图像描述

然后我意识到在基于时间的 SQLi 中,sqlmap 使用了||. 然后我尝试发送'|| (select sleep(2)) -- . 它奏效了。现在我的问题是为什么我的第一个有效载荷('; select sleep(2) --)不起作用,但这个有效?

4

1 回答 1

0

默认情况下,MySQL 查询接口不支持以分号分隔的多个查询。为此,应用程序必须在连接到数据库时显式请求启用此功能。有一个连接选项

因此,默认情况下,通过尝试在分号后附加恶意查询来工作的任何类型的 SQL 注入都不起作用。

但是通过修改单个查询中的表达式来工作的 SQL 注入仍然可以工作。

于 2021-12-16T20:13:05.030 回答