如何在where子句中演示SQL注入?

时间:2014-11-14 17:24:53

标签: sql oracle code-injection

我想证明我们拥有的一些网络服务的不安全性。这些将未经过授权的用户输入发送到Oracle数据库Select语句。

对SELECT语句的SQL注入是可能的(通过WHERE子句),但是我很难演示它,因为在同一个webservice调用期间同样的参数也被放置在其他查询中。 E.g:

' or client_id = 999'--

将利用第一个查询,但是当相同的WS请求调用运行其他SQL SELECT时,它将在下一个查询中返回oracle错误,因为client_id由第二个表中的别名引用。

我希望找到一些更有说服力的东西,而不仅仅是返回一个ORA错误,例如管理在进程中删除表。但是我不认为这可以从Select语句中实现。

任何想法如何导致某些数据发生变化,或者可能会将敏感数据作为ORA错误的一部分包含在内?

1 个答案:

答案 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中创建大型子查询的另一个选项,这反过来可能会在服务器上造成巨大的性能问题。

相关问题