- 浏览: 632019 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
d1438138:
[img][/img]
google api 的一些神奇使用 -
waykingeye:
[i][b][u]引用[list]
[*][img][url] ...
No result defined for action and result input -
tss0823:
...
No result defined for action and result input -
yahier:
有什么办法能够捕捉,然后给出自定义的提示呢
No result defined for action and result input -
chen_lian:
恩恩 按照上面的代码测试一下觉得很对
java创建目录
0x01 https://github.com/wchen-r7/metasploit-framework/blob/791ebdb679d53f6363cf88a54db57722719cd62a/external/source/exploits/CVE-2012-0507/Exploit.java
这里就是java的cve 2012 0507的poc所在了,大部分网上流传的基本上都基于这里,而且大家要注意这个poc的攻击模块并没有在其中写出来,所以直接运行是没有结果的。
0x02 这个poc之所以出名估计和inbreak的七次打新浪云关系很大,当然这个poc也引发了一波网上的java挂马热潮。其实在一般应用中,大部分人都意识不到java存在一个Security Manager 的保护机制,在实际使用中,我们无论在写jsp还是java的本地软件时,很少有人会去配置这个Security Manager,(ps:我反正没见过….),这个保护机制的原理其实很简单,搞java的都知道java以前搞过一个applet的东西,虽然现在已经没落了,但是它里面和这个保护机制关系就很大,试想下,applet是运行在客户的浏览器上的,如果applet里面实现了大量的敏感功能,岂不是用户的信息都被偷完了么,当然sun公司也想到了这点,所以Security Manager就正好可以对抗你,说白了Security Manager就是检查一个权限的白名单(java.policy),它规定了你这个java程序,只能在我白名单限制的权限内运行。而applet默认就存在这样一个非常严格权限的policy,这样applet程序就不要想在用户的机子上去调用exec之类的敏感函数了。
0x03 当然除了applet中用到了这个功能外,新浪云也用到了这个安全机制,很简单的原因他要保证他的java云只有适当的权限,最主要的是每个用户间要保持隔离,这里使用Security Manager将会是非常合适的技术(ps:虽然用的不好,被inbreak各种攻破…)
0x04具体的Security Manager,网上很多,我就针对这个poc说下吧,首先测试这个poc,就需要和平时不太一样的方式,项目导入到eclipse后,运行时,需要开启Security Manager这个功能才可以,方法如下
VM arguments中就是开启命令,其中policy.txt即权限文件,放到你的main函数所在类的目录下面,而最后的msf.x.Test则是Main函数所在类的全路径,同样注意修改working directory。
0x05 这段poc中的java代码都非常好懂,但是在开始处通过一个
As数组来生成了一个关键的object数组,从而带来了后面的一连串关键操作,那么这段字符串是什么,为什么要这样写,就成为了很多人的疑问。
0x06 首先解释下这段字符串通过objectinputstream转化成了一个object数组具体如下
<!--[endif]-->
可以看到这个数组只有两个元素
Object[0]=Help[1] 是一个只有一个元素的Help类型数组,我们记作a
Object[1]= AtomicReferenceArray,而AtomicReferenceArray的array则指向了Help 数组a
这里大家肯定会有疑问为什么要这样设计,而不能我去用代码创建这么个数组,看着也不难创建么。
这段代码看似好像也没问题,但是我们在运行后会发现一个大问题
<!--[endif]-->
和前面的poc产生的数组一对照发现AtomicReferenceArray中的array指向不一样了,这里实际上就是关键所在了,在后面的poc中的关键方法里面必须要求AtomicReferenceArray中的array必须指向Help数组才可以实现成功的越权。
0x07 那么通过查看AtomicReferenceArray的源代码我们可以发现
<!--[endif]-->
在AtomicReferenceArray中array是一个private的类型,
<!--[endif]-->
而且通过AtomicReferenceArray初始方法初始时,实际上上是新建了了一个object数组,这样与要求不符。所以我们要想指向Help数组,就需要使用反射机制才可以
<!--[endif]-->
这样子才可以成功的创建出
<!--[endif]-->
这样的结构,但是因为创建这样的数组会用到反射机制去修改私有变量,那么必然在secure manager的禁止范围内,所以必须在正常情况下通过objectOutputStream写入到文件里面去,然后在低权限情况下利用objectinputstream来读取创建出来,规避掉反射的问题。
0x08 这下这段字符串的来历就很清楚了,下来就是最关键的几行代码了,他巧妙的实现了偷天换日
<!--[endif]-->
这里的大部分代码加上上面对arrayOfObject的解释就很好理解了,这里需要注意的一点是,Help类的定义必须是public class Help extends ClassLoader implements Serializable
这里的Serializable是用来进行序列化的,实质就是保证了他可以object read 和write,只有这样才能把Help数组直接输出成字符串,并从字符串把它直接读回到object状态。
而ClassLoader则是实现越权的关键。
<!--[endif]-->
这个方法就是ClassLoader实现越权的关键,他可以重定义一个类的权限,但是这个方法最致命的地方在于它是protected的,这意味着他只能被同一个包下面的类调用或者它的子类调用。
而ClassLoader最大的问题是,在严格限制的低权限环境中肯定是不允许你创建他的子类的实例的,而通过getClass.getClassLoader则虽然可以得到当前类的ClassLoader,但是由于这个一般都是系统类,和我们不在同一个包下面,无法去调用这个protected的defineClass方法。
这个poc的解决就在于下面
这里最关键的就是localAtomicReferenceArray.set(0, localClassLoader);,这句代码的执行完,
<!--[endif]-->
结构变成了这个样子,可以看到出现了一个实际上不可能和不应该出现的情况,
Help[0]实际指向了Launcher$AppClassLoader,理论上绝对不应该相等的两个类。这两个类唯一的共同点就是有一个共同的父类ClassLoader。
0x09 深入分析localAtomicReferenceArray.set(0, localClassLoader),
<!--[endif]-->
这里调用了个import sun.misc.Unsafe;光从名字来看,估计就可以猜到这个方法不太安全,实际上这里的赋值可能并没有去检查类型,就直接赋值了,从而导致了上面说的不合理现象的发生。当然java本身这样写的原因我估计是他觉得这个array是个object,不会出现类型不匹配的情况,Object类型是java中所有类的父类么,但是这里联系到0x06中所说的巧妙利用反射修改了这个array的实际指向,从而导致了这个赋值的错误。
0x10 分析到这里,其实核心就已经完了,得到了一个可以自由使用的ClassLoader则意味着可以随意调用defineClass方法,到这里这个poc的精华差不多了。利用这个Help[0],去defineClass,在这里系统会认为Help[0]是一个实际存在的Help对象,那么他的defineClass方法调用就是合法的,而实际上Help[0]实质是Launcher$AppClassLoader,实际调用的是它的defineClass
<!--[endif]-->
0x11 剩下的代码没什么好说的了。。。。那么我们通过这个poc可以发现一个java的体系漏洞,就是去找找java代码中调用了unsafe方法的地方,只要我们可以控制这个unsafe的参数,那么类似的漏洞还是有可能找到的
发表评论
-
metasploit 图形化界面和自动化exploit脚本
2013-10-21 16:25 77740x01 最新版的metasploit没了图形化界面, ... -
APKTool签名的一个问题
2013-10-14 21:19 25230x01 昨天写了反编译,今天就写下签名的问题 0 ... -
APKTool打包的一个小问题
2013-10-13 20:23 248350x01,又开始写blog了,好久没有网络了,最近终于可以开 ... -
struts2远程执行漏洞学习(四)
2013-05-23 00:12 23600x01 最近又有了一个新的struts2漏洞,http:/ ... -
纯转一篇关于方法句柄的,对理解很多java poc帮助很大
2013-04-19 15:16 4356http://book.2cto.com/20130 ... -
CVE-2013-1493 学习
2013-03-25 16:06 30240x01 这个又是一个java CVE,效果前几个一样, ... -
myeclipse崩溃多处理的一个小窍门
2013-01-15 20:23 31930x01 如果大家用了myeclipse10以上版本,忽然间 ... -
CVE-2013-0422 分析2
2013-01-11 23:47 35290x01 http://wcf1987.iteye.c ... -
CVE-2013-0422 学习
2013-01-11 16:26 41920x01 这个是这两天爆出来的,我构建了一个本地测试代码,主 ... -
android 无权限 伪造短信
2012-11-06 09:15 35840x01 这个有是大名鼎鼎的蒋教授发现的,原理简单,有点意思 ... -
A new way to hack android app info
2012-11-06 01:04 1670最近新研究了一种android攻击手段,blog发到团队那里的 ... -
一次被黑追凶(未完待续)
2012-10-15 19:52 25180x01,某天师妹告诉我们某台服务器疑似被人干掉了,我果断远程 ... -
<找工作 十一>生产者消费者 组赛队列
2012-09-25 17:39 1534用阻塞队列实现 import java.util.co ... -
<找工作 十>生产者 消费者模型
2012-09-25 16:54 1164今天被问了个这个问 ... -
<找工作 九> 字符串全排列问题
2012-09-23 22:01 1389public class StringTest { ... -
<找工作 七>leetcode Add Two Numbers
2012-09-13 22:24 3148Add Two Numbers 链表相加 p ... -
<找工作 六>leetcode Median of Two Sorted Arrays
2012-09-13 21:25 3253http://www.leetcode.com/onlinej ... -
python 反编译 pyc 一些心得
2012-09-06 10:59 538470x01 , 现在用python的人也多了起来,代码安全始终是 ... -
关于web渗透中得一些记录
2012-08-24 23:31 36221. 当得到linux root shell时 ... -
mail xss
2012-08-11 21:57 17171 最近迷上了xss,感觉各种飘逸,特别是http://www ...
相关推荐
总之,通过分析,可以得出结论:CVE-2012-4969漏洞是因为CMshtmlEd类对象在释放后,其指针被错误地再次使用所导致。这样的漏洞能够被利用来执行任意代码,造成严重的安全威胁。解决这类问题,通常需要软件厂商发布...
Oracle 11.2.0.1 CVE-2012-1675 补丁:p12880299_112010_Linux-x86-64.zip 是一个针对Oracle数据库系统的重要安全更新。这个补丁主要解决了一个在Oracle 11.2.0.1版本中的严重安全漏洞,该漏洞被标记为CVE-2012-1675...
MS12-020(CVE-2012-0002) Exploit 3389远程溢出漏洞代码
在详细分析CVE-2012-1856漏洞报告的基础上,我们可以提炼出以下关键知识点: 1. 漏洞成因分析: - CVE-2012-1856是一个由于MSCOMCTL.OCX中的TabStripActiveX控件存在缺陷导致的安全漏洞。这个控件是Microsoft ...
CVE-2012-1876 是一个影响Microsoft Windows和Internet Explorer 9的提权漏洞,该漏洞在2012年的Pwn2Own黑客大赛上被法国安全团队Vupen利用,展示了其强大的攻击能力。在赛事结束后,Vupen向微软报告了堆溢出漏洞,...
链接:http://www.oracle.com/technetwork/topics/security/alert-cve-2012-1675-1608180.html 根据此链接得到解决方法: ? 1234 SolutionRecommendations for protecting against this vulnerability can be found ...
"Oracle cve2012利用"指的是Oracle在2012年发布的一些安全漏洞(CVE,Common Vulnerabilities and Exposures),这些漏洞可能被恶意攻击者利用,对数据库系统造成威胁。在了解这些漏洞之前,我们需要先理解CVE是什么...
这是office安全漏洞的一个POC,用来帮助分析理解漏洞原理。
### 分析 CVE-2012-0003 的 POC #### 0x1 前言 CVE-2012-0003 是 Microsoft 在 2012 年初发布的一个安全更新 MS12-004 中修复的漏洞之一。此漏洞出现在 Windows 多媒体库 `winmm.dll` 中,它处理 MIDI 文件的方式...
jboss4版本下,jbossweb-tomcat55.sar升级包,修复Apache Tomcat DIGEST身份验证多个安全漏洞(CVE-2012-3439) 升级包中的jar来源于tomcat5.5.36 使用方法:直接替换jboss中旧的jbossweb-tomcat55.sar
CVE-2011-0816, CVE-2011-0831, CVE-2011-0832, CVE-2011-0835, CVE-2011-0838, CVE-2011-0848, CVE-2011-0870, CVE-2011-0876, CVE-2011-0879, CVE-2011-0880, CVE-2011-2230, CVE-2011-2231, CVE-2011...
CVE-2012-0158的测试PoC,配合我的CVE-2012-0158 漏洞分析使用 CVE-2012-0158 Microsoft Office MSCOMCTL.ocx栈溢出漏洞是Office的经典漏洞,作为Office的入门漏洞,这个漏洞很有学习价值
14. CVE-2014-3566、CVE-2015-0449、CVE-2014-6569、CVE-2013-2186、CVE-2017-3248、CVE-2011-1411、CVE-2011-5035:这些早期的CVE编号显示了WebLogic历史上存在的安全问题,需要定期评估系统的安全状态,并进行必要...
### CVE-2012-0158分析与调试报告 #### 漏洞概述 CVE-2012-0158是存在于Microsoft Windows Common Controls组件中的一种安全漏洞,具体涉及到MSCOMCTL.OCX控件。此控件广泛应用于Windows系统中,用于提供诸如列表框...
"CVE-2012-2022 mysql.zip" 这个标题提到了一个特定的安全漏洞标识符 "CVE-2012-2022",以及与该漏洞相关的数据库系统 "mysql"。CVE,全称“Common Vulnerabilities and Exposures”,是用于识别已知安全漏洞的全球...
近期爆出了一个微软RDP 协议远程溢出/拒绝服务漏洞(MS12-020)。目前网络上已经出现针对该漏洞的攻击代码,可以导致未打补丁的windows 系统出现蓝屏,实现DOS 攻击。由于远程桌面协议RDP 被广泛应用,所以该漏洞影响...
【CVE-2014-7911分析+代码】是针对2014年发现的一个严重安全漏洞的研究和代码实现。这个漏洞被称为CVE-2014-7911,它属于一个广泛影响各类软件的类别,通常与远程代码执行(RCE)或权限提升相关。在网络安全领域,...
CVE-2014-1761 分析.pdf