1.第79篇:记一次Oracle注入漏洞提权的随书艰难过程
2.剑破冰山:Oracle开发艺术前 言
3.Oracle LinuxåRedhat ä»ä¹çº è
4.Oracle dmp文件结构探秘
第79篇:记一次Oracle注入漏洞提权的艰难过程
大家好,我是源码源代ABC_。我近期遇到了一个Oracle注入漏洞,随书是源码源代搜索型的盲注漏洞,只能通过折半法一个字符一个字符的随书猜解数据。经过判断,源码源代条形码解析源码发现这是随书DBA权限的注入点。接下来,源码源代我将分享如何通过这个注入点获取操作系统的随书权限,并且分享了在技术研究过程中遇到的源码源代问题和解决方法。
在解决这个问题时,随书我进行了两方面的源码源代优化来加快SQL注入的速度。首先,随书我在search=%语句中加入了存在结果很少的源码源代搜索值,比如将search=%,随书只显示出一条搜索结果,这样可以减少数据库的检索量和HTTP返回的数据包大小,从而加快SQL注入的速度。其次,我修改了SQLmap的默认个线程限制,这需要修改SQLmap的源码,这里就不详细解释了。
在Oracle注入提权的棋类服务端源码语句方面,我注意到很多文章给出的语句通常分为三个步骤,其中第二步就是赋予当前Oracle账号相关的JAVA权限。然而,这个语句包含了大量的单引号和左右尖括号,有时候会被转义掉导致注入失败,而且这个语句异常复杂,容易出错。因此,我使用了一个简单的语句替代,效果更佳。这个语句的格式是BEGIN开头,然后end;结尾,代表一个PL/SQL语句块,如下所示:select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''grant javasyspriv to test''; end;') from dual。
我使用了SQLmap的--sql-shell命令将上述语句执行,但是最后执行的命令没有成功。在处理这种情况时,我通常有两种可能:一是执行命令被拦截,二是Java代码没有执行成功。因此,我使用了如下SQL语句进行判断,结果返回0,超市商店管理系统源码说明函数没有添加成功。经过一系列测试,我发现是SQLmap的SQL-shell下功能下,上述复杂的SQL语句根本没执行成功。
为了更方便地执行Oracle的复杂SQL语句,我将SQL注入语句进行了修改,通过and (插入SQL语句) is not null的方式,可以在左右括号中插入各种Oracle的SQL语句。然而,这种方法也遇到了WAF拦截的问题。为了解决这个问题,我使用了Oracle特有的编码方式,将SQL语句成功执行。再次执行查询LinuxUtil是否存在的SQL语句,发现返回count()不为0,说明Java代码成功添加执行。然而,LinuxUtil命令依然无法执行,我怀疑是Java权限没有添加成功。我执行了查询当前用户权限的语句,发现当前用户具有CONNECT、RESOURCE、手机手游网站源码JAVASYSPRIV权限,说明Java相关权限确实是添加成功了。然而,为什么还是无法调用LinuxUtil命令呢?我重新搭建了测试环境,使用Navicat执行Oracle提权语句后,发现报了权限错误。
在查阅大量国外文章后,我发现判断当前用户是否有Java权限,需要查询session_roles表。该表用于显示当前会话中的角色信息,必须session_roles中有JAVASYSPRIV权限才行。我尝试断开Oracle当前账号的连接,重新连接之后,session_roles表中就有相应权限了。然而,我们是在SQL注入点,无法断开重连,那么如何使Java权限立即生效呢?国外文章给出了几种方法,但执行后仍然无法解决问题。
在等待第二天后,惊奇地发现session_roles中存在JAVASYSPRIV角色了,我也不清楚原因,斗破苍穹源码下载但此时可以通过select LinuxExecHanshu('whoami') from dual执行命令。然而,盲注过程太麻烦,我选择结合SQLmap的SQL-shell终端来盲注入,因为该SQL语句比较简短,SQLmap的SQL-shell模式猜解是完全无压力的。最终,我们成功获取了系统权限。
总结来说,这个dbms_xmlquery.newcontext函数在高版本的Oracle数据库中已经不能提权成功,甚至不能使用,需要使用其他方法进行提权。在本地搭建的Oracle环境中,大多数情况下可以直接提权成功,但极少数情况下需要断开重连,具体原因不明。如果文章中有错误,欢迎批评指正。后续,我将继续分享Oracle提权的其他方法,敬请期待。
剑破冰山:Oracle开发艺术前 言
长久以来,Oracle数据库领域的书籍众多,但实战性深入的开发作品相对较少,多数人对Oracle开发的认识仅停留在基础的DML操作和存储过程。然而,Oracle的潜力远不止表面,像冰山一样,隐藏在水面下的知识更为丰富。要深入理解Oracle开发,你可以通过跟随本书,由7位经验丰富的作者分享他们的专业技能和方法,逐步揭开Oracle开发的深层奥秘。
本书以实战案例的形式,详细讲解Oracle数据库的功能特性、编程思路和设计方法,旨在帮助读者掌握各类开发任务的实践技巧。适合中、高级用户阅读,但即使是初级用户也能从中获益,提升对设计思想和技巧的理解。内容广泛,涵盖编程规范、表结构设计、性能优化、高级查询等,深入剖析Oracle工具的使用和常见错误处理。
本书重点介绍了动态SQL、PL/SQL的使用、执行计划影响因素等内容,旨在纠正人们对Oracle SQL功能的误解,展示其在数据处理、循环和行间运算等复杂任务中的强大能力。通过多个精心设计的案例,读者可以复制源代码到自己的系统,实践并深化理解。
作者团队由来自北京、加拿大、上海等地的Oracle技术专家组成,他们的丰富经验和专业视角将贯穿全书。书中还包含了苏旭晖、王保强等人的章节,他们通过审核和贡献,共同提升了本书的质量。
各章节如“数据库编程规范”、“Oracle开发工具及性能优化”等,分别讲解了Oracle开发的规则、工具的使用和优化技巧。通过实例和实战,读者将逐步提升Oracle开发的实战能力。
Oracle LinuxåRedhat ä»ä¹çº è
1ãOracleåºäºRedhatæºç èªå·±æåºæ¥çï¼CentOSä¹æ¯åºäºRHELæ»´ï¼å¼æºé便æ¹ï¼é ç½®æ件åå®è£ å åRedhaté½ä¸æ ·2ãOracleæå¾å¤è½¯ä»¶ï¼å¯è½ä¾èµäºå«äººçç³»ç»ä¸æ¹ä¾¿è°è¯ï¼æ¯ç«èªå·±çä¸è¥¿é便æ¹3ãå¦å¤sunçSolarisç³»ç»ä¹å½Oracleäº4ãbeaçweblogi
Oracle dmp文件结构探秘
解析Oracle DMP文件的任务,其实是在面对一堆进制代码时,找出其中的规律,尤其是建表语句和INSERT语句。初步解析器在g版本中已经可以成功运行,接下来将揭示DMP文件结构的秘密。
打开DMP文件时,先通过Nodepad++的十六进制编辑器插件进行预处理。文件由地址指针和具体内容两部分组成,每对十六进制数表示一个字节。数据和地址均以进制形式表示。
DMP文件大致结构如下。红色区域是关键数据,其余部分虽看似无用,但包含表元数据、索引建立等信息。文件头部的固定部分除外,多张表会在文件中以类似结构片段形式呈现。读取时需注意。
解析器使用RandomAccessFile读取,每次读取以“0a”为分隔,读取两个“0a”之间的内容。首先跳过固定头,即0x * 0x + 0xD,定位到下个“0a”处。接着调用三次readLine方法,分别获得表声明、创建语句和INSERT批处理语句。之后,需要查找“ ”结构以定位数据字段,接着读取字节数,读取相应的字节,直至遇到“ ”表示数据结束。
当遇到“ ff ff 0a”的结构,表示当前表的INSERT过程结束。遇到“ ”后紧跟“fe”表示空字段。通过整合批处理语句与真实数据,可以生成实际的INSERT语句。解析过程重复应用于多张表,直至文件末尾读取到“EXIT”标志,表示解析完成。
解析器识别表结构、读取建表和INSERT语句,拼接生成实际的INSERT语句,直至完整解析文件。值得注意的是,解析结果基于一般情况,存在特例,如数据段表示方式的多样性。对于Blob、Clob字段的解析,当前解析规则无法覆盖。有兴趣的同学可深入研究。
GitHub源码链接:github.com/ACoolMonkey/...