SQL注入技术只利用了一个缺陷:输入的字符串没有进行有效的验证,并且被连接到动态SQL语句中。
语句修改意味着故意修改动态SQL语句,这样语句就可以以一种开发者非计划中的方式运行。
通常会通过修改where子句、select子句、插入union all子句来获得未授权的数据。
典型例子是通过使where子句始终为真为越过口令验证。
|
-- 11g12_07_09.prc 创建一个容易受语句修改攻击的存储过程 CREATE OR REPLACE PROCEDURE get_record (user_name IN VARCHAR2, service_type IN VARCHAR2, rec OUT VARCHAR2) IS query VARCHAR2(4000); BEGIN -- 下面的语句容易受SQL修改的攻击,因为它使用连接来建立where子句 query := 'SELECT value FROM secret_records WHERE user_name=''' || user_name || ''' AND service_type=''' || service_type || ''''; DBMS_OUTPUT.PUT_LINE('查询: ' || query); EXECUTE IMMEDIATE query INTO rec ; DBMS_OUTPUT.PUT_LINE('记录: ' || rec ); END;
-- 11g12_07_09.tst DECLARE record_value VARCHAR2(4000); BEGIN -- 没用使用SQL注入 get_record('Andy', 'Waiter', record_value); -- 使用SQL注入 get_record('Anybody '' OR service_type=''Merger''--', 'Anything', record_value);
END;
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1082016/ ,如需转载,请注明出处,否则将追究法律责任。