【发布时间】:2020-08-19 20:21:02
【问题描述】:
我们必须使用旧版本的 ERP 系统 (1993)。
它有多个模块。这些模块有窗口(选项卡)。标签有 cols(显然)。
在这个选项卡中,用户可以创建一个“新列” -> 它就像一个子查询。查询只能在括号中使用 ()。
我只是好奇,是否可以由用户进行注射。
例如:
--basic query (self join)
(select i.my_col from my_table i where my_pk = i.pk)
--illlustrating
(select replace(i.my_col, 'UPDATE...') from my_table i where my_pk = i.pk)
有没有办法使第二个查询可行?我的意思是,用户可以通过这种方法以某种方式更新列吗?
我该如何测试它?
【问题讨论】:
-
我不太明白这个问题。你是说这个现成的 ERP 系统的 UI 允许最终用户向预定义的查询添加子查询,并为这些子查询指定 SQL,以便向 UI 添加更多信息?什么是底层数据库引擎?如果 Oracle,哪个版本 - 如果 ERP 是 1993 年的,RDBMS 是否同样古老?
-
整体描述非常模糊,它混合了小部件和数据库实体(如果一个窗口选项卡明显有列,那么它可能是一个表而不是一个选项卡)但是如果,正如您所建议的,用户实际上可以键入 SQL 代码,然后 SQL 注入,无论是否存在错误,肯定是一个内置功能。我认为这个问题可以使用一些额外的信息,甚至可能是几个屏幕截图。
-
@NevilleKuyt Oracle 数据库 11g 版本 11.2.0.4.0 - 64 位生产。
-
明确一点:您是在问是否可以运行 SELECT 语句,该语句将 UPDATE 语句作为其投影中的一列执行?
-
@APC 在这种情况下,是的。如果可能的话,他们必须“撤销”用户的一些特权。这就是原因,为什么测试它会很棒..如果它有效,我认为这是一个很大的风险。
标签: sql oracle security sql-injection dynamic-sql