[20160919]sql注入例子.txt

lfree發表於2016-09-19

[20160919]sql注入例子.txt

--許多開發喜歡拚接sql語句,而不是使用繫結變數,而這樣帶來一個問題就是給注入攻擊提供了可能,從別人的網站炒一個例子:

1.環境:
SCOTT@book> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

create table tx (fname varchar2(20),lname varchar2(20), id number);
insert into tx values ('aa','aaa',100);
insert into tx values ('bb','bbb',101);
commit;

create or replace procedure get_code (p_fname varchar2 default null)
is
type c is ref cursor;
cv c;
vcode tx.id%type;
v_stmt varchar2(300);
begin
v_stmt := 'select id from tx where fname='''||p_fname||'''';
dbms_output.put_line('sql query : '||v_stmt);
open cv for v_stmt;
loop
fetch cv into vcode;
exit when cv%notfound;
dbms_output.put_line('code is '||vcode);
end loop;
close cv;
exception when others then
dbms_output.put_line(sqlerrm);
dbms_output.put_line('sql query '||v_stmt);
end;
/

2.測試:
SCOTT@book> set serveroutput on
SCOTT@book> exec get_code('aa');
sql query : select id from tx where fname='aa'
code is 100

PL/SQL procedure successfully completed.

SCOTT@book> exec get_code('x'' union select id from tx where ''x''=''x');
sql query : select id from tx where fname='x' union select id from tx where 'x'='x'
code is 100
code is 101
PL/SQL procedure successfully completed.
--這就是拼接可能導致的問題。

3.我個人一直認為開發oltp系統大量的不使用繫結變數(當然前提是合理),是一個不成熟的團隊,可惜國內的大部分開發團隊從這點講基本
都做不到,更可怕的是你跟他們講依舊重複這個錯誤,從這點看國內開發團隊大部分都長不大,都是豆腐渣團隊.悲哀啊

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