【问题标题】:Couldn't figure out how the payload worked无法弄清楚有效载荷是如何工作的
【发布时间】:2022-01-19 20:52:47
【问题描述】:

我正在解决 TryHackMe 的一个房间关于 SQL 注入的问题。但我想不出一件事,在花了很多时间之后,我认为最好在这里问这个问题。在房间里有一台机器要部署,在部署机器后它给了我一个接口(webapp),它可以像这样接受我的输入:

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

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

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

但他们都没有工作,并给我返回了这样的错误消息:

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

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

【问题讨论】:

  • 可能是因为 MySQL 无法处理标准的-- cmets,如果它们后面没有空格的话。尝试确保-- 之后有一个空格,或者使用 MySQL 特定的# 将行的其余部分标记为注释。
  • 当我试图找到有效的有效载荷时,我尝试了这两种方法。但它们都不起作用。

标签: mysql sql sql-injection ctf


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的信息,这就是我要找的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
相关资源
最近更新 更多