我想证明我们拥有的一些网络服务的不安全性。这些将未经过授权的用户输入发送到Oracle数据库Select语句。
对SELECT语句的SQL注入是可能的(通过WHERE子句),但是我很难演示它,因为在同一个webservice调用期间同样的参数也被放置在其他查询中。 E.g:
' or client_id = 999'--
将利用第一个查询,但是当相同的WS请求调用运行其他SQL SELECT时,它将在下一个查询中返回oracle错误,因为client_id由第二个表中的别名引用。
我希望找到一些更有说服力的东西,而不仅仅是返回一个ORA错误,例如管理在进程中删除表。但是我不认为这可以从Select语句中实现。
任何想法如何导致某些数据发生变化,或者可能会将敏感数据作为ORA错误的一部分包含在内?
答案 0 :(得分:0)
更改数据并不容易,但仍然可以。使用pragma autonomous_transaction
创建的函数可以包含dml,可以在where
中调用。例如,
CREATE OR REPLACE FUNCTION test_funct return int
IS
pragma autonomous_transaction;
BEGIN
DELETE FROM test_del;
commit;
return 0;
end;
-- and then
SELECT null from dual where test_funct()=1;
您尝试在WHERE
中创建大型子查询的另一个选项,这反过来可能会在服务器上造成巨大的性能问题。