无法弄清楚有效载荷是如何工作的
Posted
技术标签:
【中文标题】无法弄清楚有效载荷是如何工作的【英文标题】:Couldn't figure out how the payload worked 【发布时间】:2022-01-19 20:52:47 【问题描述】:我正在解决 TryHackMe 的一个房间关于 SQL 注入的问题。但我想不出一件事,在花了很多时间之后,我认为最好在这里问这个问题。在房间里有一台机器要部署,在部署机器后它给了我一个接口(webapp),它可以像这样接受我的输入:
如果你给它一个像 test 这样的值。它返回以下输出:
当我看到它时,我认为这是一个简单的 SQLi 问题,所以我尝试了常见的 dbms 的大多数基本 SQLi 有效负载,如下所示:
' ; sleep(1) --
' or 1=1 --
...
但他们都没有工作,并给我返回了这样的错误消息:
在那次失败之后,我运行 sqlmap,它发现了 2 种类型的 SQLi 有效负载,其有效负载如下:
然后我意识到在基于时间的 SQLi 中,sqlmap 使用了||
。然后我尝试发送'|| (select sleep(2)) --
。它奏效了。现在我的问题是为什么我的第一个有效负载(' ; select sleep(2) --)不起作用,但这个有效?
【问题讨论】:
可能是因为 mysql 无法处理标准的--
cmets,如果它们后面没有空格的话。尝试确保--
之后有一个空格,或者使用 MySQL 特定的#
将行的其余部分标记为注释。
当我试图找到有效的有效载荷时,我尝试了这两种方法。但它们都不起作用。
【参考方案1】:
默认情况下,MySQL 查询接口不支持以分号分隔的多个查询。为此,应用程序必须在连接到数据库时显式请求启用此功能。有一个connect option。
因此,默认情况下,任何通过尝试在分号后附加恶意查询来工作的 SQL 注入都不起作用。
但是通过修改单个查询中的表达式来工作的 SQL 注入仍然可以工作。
【讨论】:
感谢您的信息,这就是我要找的!以上是关于无法弄清楚有效载荷是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章
当有效载荷长度大小大于 1000K 时,无法获得有效载荷响应。(Coap)