You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL盲注中pg_sleep拼接加与不加括号的区别

差异核心是PostgreSQL对||运算符的操作数语法要求不同

||是PostgreSQL的字符串拼接运算符,要求左右两侧都必须是标量表达式(返回单个值的运算单元,包括常量、函数调用、合法的标量子查询等),不能直接跟独立的SQL语句。
三个payload的执行逻辑差异如下:

  • 第一个payload ' || pg_sleep(10)--
    pg_sleep(10)本身是PostgreSQL的内置函数调用,属于合法的标量表达式,直接放在||右侧完全符合语法规则,执行时会先触发函数调用产生10秒延迟,再完成字符串拼接,所以可以成功触发延迟。
  • 第二个payload ' || (SELECT pg_sleep(10)--
    用括号包裹SELECT语句时,这段内容会被识别为标量子查询:PostgreSQL规定,包裹在括号内、仅返回1行1列结果的SELECT语句属于合法的标量表达式,完全可以作为||的操作数。即使这里缺少右括号,后面的--已经注释掉了原SQL剩余的所有内容,解析器仍能正常执行子查询内的pg_sleep(10)调用,因此可以触发延迟。
  • 第三个payload ' || SELECT pg_sleep(10)--
    没有括号包裹时,SELECT是独立查询语句的起始标记,不属于标量表达式,不能直接放在运算符右侧,整个SQL会直接报语法错误,不会执行到pg_sleep的调用逻辑,因此没有延迟效果。

内容的提问来源于stack exchange,提问作者W2a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:57:02