Gic*_*ico 4 sql plsql code-injection
我试图破解我的PL/SQL代码.我们创建了打开并获取游标的PL/SQL过程.根据我们的标准,我们创建了一个动态SQL语句,但我们无法注入OR 1 = 1条件.
我做了一个http://sqlfiddle.com/#!4/a62a3/5演示,你可以尝试注入代码.
CREATE FUNCTION get_documents (p_document_id IN DOCUMENTS.DOCUMENT_ID%TYPE)
RETURN SYS_REFCURSOR
AS
p_rs SYS_REFCURSOR;
BEGIN
DBMS_OUTPUT.PUT_LINE('------ INPUT VALUES ------');
DBMS_OUTPUT.PUT_LINE('p_document_id: ' || p_document_id);
OPEN p_rs FOR
SELECT DOCUMENT_ID, '(' || MY_FIELD || ')' FROM DOCUMENTS WHERE DOCUMENT_ID = '' || p_document_id || '';
RETURN p_rs;
END;
Run Code Online (Sandbox Code Playgroud)
我们尝试在p_document_id参数中注入代码.我们将其设置为:
document_refcur_local:=get_documents('10'' OR 1=1; -- ');
Run Code Online (Sandbox Code Playgroud)
但我们无法选择所有记录.能不能让我知道我做错了什么?
这实际上不是动态声明,因此不容易注入.
如果你从前端使用SQL查询之外的p_document_id的字符串连接构建此字符串 - 然后将其发送到SQL,它将是易受攻击的,但是你不能在SQL查询本身中进行注入(除非构建一个字符串然后运行它,即一个你不做的动态查询
易受注入影响的动态查询看起来更像;
EXECUTE IMMEDIATE 'SELECT * FROM DOCUMENTS WHERE DOCUMENT_ID = ''' + someUserInput + ''''
Run Code Online (Sandbox Code Playgroud)
你可以通过传递someUserInput来注入
' OR 1=1; --
Run Code Online (Sandbox Code Playgroud)