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

如何在where子句中演示SQL注入?,sql,oracle,code-injection,Sql,Oracle,Code Injection,我想展示我们拥有的一些Web服务的不安全性。这些语句将未初始化的用户输入发送到Oracle数据库Select语句 SELECT语句上的SQL注入可以通过WHERE子句实现,但是我很难演示它,因为在相同的webservice调用过程中,相同的参数也被放置在其他查询中。 例如: 将利用第一个查询,但当相同的WS-request调用运行其他SQL选择时,它将在下一个查询中返回oracle错误,因为客户端id由第二个表中的别名引用 我希望找到更令人信服的方法,而不仅仅是返回ORA错误,比如在过程中设法删

我想展示我们拥有的一些Web服务的不安全性。这些语句将未初始化的用户输入发送到Oracle数据库Select语句

SELECT语句上的SQL注入可以通过WHERE子句实现,但是我很难演示它,因为在相同的webservice调用过程中,相同的参数也被放置在其他查询中。 例如:

将利用第一个查询,但当相同的WS-request调用运行其他SQL选择时,它将在下一个查询中返回oracle错误,因为客户端id由第二个表中的别名引用

我希望找到更令人信服的方法,而不仅仅是返回ORA错误,比如在过程中设法删除一个表。但是,我不认为从Select语句中可以实现这一点


有没有办法让一些数据发生变化,或者让敏感数据成为ORA错误的一部分

更改数据不是很容易,但仍然有可能。使用pragma autonomy_事务创建的函数可以包含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; 

另一个选项是,您尝试在其中创建巨大的子查询,这反过来可能会导致服务器上出现巨大的性能问题。

首先,不要在实际的服务上运行这些子查询进行测试!有很多例子在演示SQLi。用那些。但是,看在上帝的份上,不要试图将随机代码注入到您的生产服务中,让它们崩溃!其次,我不完全确定你在找什么。如果你想要一些字符串,你可以注入到你的服务中,为你提供敏感数据,那么这里没有人可以帮你。从问题的理解来看,听起来您是有意通过SQLi在公司的生产web服务中获取敏感数据或删除整个表。如果这真的是你试图向公司说明这是一个问题的方法。。。那我想你不会工作太久了,那就别把它绑在桌子上了。”或者1=1’-你真的需要说服他们,未初始化的用户输入是个问题吗?你可以在你的prod环境@Siyual上运行它;只需创建一个空表SQL\u注入\u测试并尝试删除它。。。从prod中看到它可能比从拼凑演示中看到它更有效。@jnevil:您的示例不适用于Java,因为JDBC驱动程序只允许在每次执行调用时运行一条语句
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;