提问人:Fuyda 提问时间:11/27/2022 最后编辑:Fuyda 更新时间:11/28/2022 访问量:1004
在 SQL 查询中排序后的 SQL 注入有效负载
SQL injection payload after order by in SQL query
问:
试图利用 SQL 注入来完成我的任务。是否可以在 Postgresql 中不使用分号的情况下在选择查询中执行排序后的删除或删除查询?
这是我的示例查询:
Select *
from table
order by {sql injection payload}
如果不在有效负载中使用分号,我们可以删除数据或删除表吗?
https://stackoverflow.com/a/6800585
我们有类似的Postgrsql吗?
我试过了
select * from (delete from table_name return *) a
但是将 sql 错误作为“语法错误在或接近 from”
答:
检查此文档,它说我们可以通过 CHR() 绕过禁止的字符
https://book.hacktricks.xyz/pentesting-web/sql-injection/postgresql-injection
评论
不能将 DELETE 放在子查询中。DELETE 也不能是 UNION 的一部分。
因此,除了运行第二个查询(即用分号分隔)之外,您几乎无法执行所描述的操作。
如果您知道执行 DELETE 的现有函数,则可以调用存储过程或函数。例:
Select *
from table
order by {sql injection payload}
有效负载修改此查询后:
Select *
from table
order by SomeFunctionThatDeletes()
另一种类型有效,因为您可以从 PostgreSQL 中的过程中进行选择:
Select *
from table
order by id
UNION
Select *
from SomeProcedureThatDeletes()
您不能使用 SQL 注入创建函数或过程,因此该例程必须已经存在,并且您需要知道其名称以及如何调用它。
DELETE 或 DROP TABLE 并不是 SQL 注入可能发生的唯一坏事。如果查询返回当前用户无权查看的数据,则可能是一个问题。例如,有关其他用户的购买记录或病史。
SQL注入也可能是偶然的,而不是恶意的。我什至会说,大多数SQL注入实例都会导致简单的错误,而不是数据泄露。这些并不是真正的攻击,但它们会给用户带来不满意的体验。
评论
pg_temp
评论
;