流量的解密
书归正传,朋友抓到的流量到底对服务器干了啥?我们来看看
可以判断使用了CommonsBeanutils和CC3的gadget。
这段流量以yv66vgAAAD开头可以判断是base64的序列化payload,尝试对流量整理,得到下面的流量。
yv66vgAAADIANgoACgAkBwAlCAAmCgACACcIACgKACkAKgoAAgArBwAsBwAtBwAuAQAGPGlujXI7AQAJdHJhbnNmb3JtAQByKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO1tMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIZG9jdW1lbnQBAC1MY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTsBAAhoYW5kbGVycwEAQltMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACkV4Y2VwdGlvbnMHAC8BAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIaXRlcmF0b3IBADVMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yOwEAB2hhbmRsZXIBAEFMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACDxjbGluaXQ+AQANU3RhY2tNYXBUYWJsZQcALAEAClNvdXJjZUZpbGUBABBMb2dpbkZpbHRlci5qYXZhDAALAAwBABhqYXZhL2lvL0ZpbGVPdXRwdXRTdHJlYW0BAB9EOlxXRUFWRVJcZWNvbG9neVxjc3NcbG9naW4uY3NzDAALADABAAVsb2dpbgcAMQwAMgAzDAA0ADUBABNqYXZhL2lvL0lPRXhjZXB0aW9uAQARUmVzaW4vTG9naW5GaWx0ZXIBAEBjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvcnVudGltZS9BYnN0cmFjdFRyYW5zbGV0AQA5Y29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAQamF2YS9sYW5nL1N0cmluZwEACGdldEJ5dGVzAQAEKClbQgEABXdyaXRlAQAFKFtCKVYAIQAJAAoAAAAAAAQAAQALAAwAAQANAAAALwABAAEAAAAFKrcAAbEAAAACAA4AAAAGAAEAAAAMAA8AAAAMAAEAAAAFABAAEQAAAAEAEgATAAIADQAAAD8AAAADAAAAAbEAAAAC
对其进行解码
不难看出写了个文件D:\WEAVER\ecology\css\login.css,内容应该是login12345
书归正传,朋友抓到的流量到底对服务器干了啥?我们来看看
可以判断使用了CommonsBeanutils和CC3的gadget。
这段流量以yv66vgAAAD开头可以判断是base64的序列化payload,尝试对流量整理,得到下面的流量。
yv66vgAAADIANgoACgAkBwAlCAAmCgACACcIACgKACkAKgoAAgArBwAsBwAtBwAuAQAGPGlujXI7AQAJdHJhbnNmb3JtAQByKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO1tMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIZG9jdW1lbnQBAC1MY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTsBAAhoYW5kbGVycwEAQltMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACkV4Y2VwdGlvbnMHAC8BAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIaXRlcmF0b3IBADVMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yOwEAB2hhbmRsZXIBAEFMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACDxjbGluaXQ+AQANU3RhY2tNYXBUYWJsZQcALAEAClNvdXJjZUZpbGUBABBMb2dpbkZpbHRlci5qYXZhDAALAAwBABhqYXZhL2lvL0ZpbGVPdXRwdXRTdHJlYW0BAB9EOlxXRUFWRVJcZWNvbG9neVxjc3NcbG9naW4uY3NzDAALADABAAVsb2dpbgcAMQwAMgAzDAA0ADUBABNqYXZhL2lvL0lPRXhjZXB0aW9uAQARUmVzaW4vTG9naW5GaWx0ZXIBAEBjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvcnVudGltZS9BYnN0cmFjdFRyYW5zbGV0AQA5Y29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAQamF2YS9sYW5nL1N0cmluZwEACGdldEJ5dGVzAQAEKClbQgEABXdyaXRlAQAFKFtCKVYAIQAJAAoAAAAAAAQAAQALAAwAAQANAAAALwABAAEAAAAFKrcAAbEAAAACAA4AAAAGAAEAAAAMAA8AAAAMAAEAAAAFABAAEQAAAAEAEgATAAIADQAAAD8AAAADAAAAAbEAAAAC
对其进行解码
不难看出写了个文件D:\WEAVER\ecology\css\login.css,内容应该是login12345
一枚野生resin filter内存马调试
在对java恶意样本调试指南公众号中发布的jsp内存马进行分析之后,发现是一枚野生的resin filter内存马,做为面向github 编程的我,还没有找到公开的resin内存马,决定细细的盘一下该内存马的逻辑部分。
恶意代码为Overbrilliantly:包含了一个构造器、两个静态变量和 static 静态代码块
主要逻辑static静态代码块中,样本字符串解密如原文描述类似:”字符串加密为xor,长度为7,加密后的字符串第一位为本次待解密字符串的长度”。我们的目的是为了能够还原resin 内存马,debug 过程直接跳过解密过程,在关键部分进行断点。
在对java恶意样本调试指南公众号中发布的jsp内存马进行分析之后,发现是一枚野生的resin filter内存马,做为面向github 编程的我,还没有找到公开的resin内存马,决定细细的盘一下该内存马的逻辑部分。
恶意代码为Overbrilliantly:包含了一个构造器、两个静态变量和 static 静态代码块
主要逻辑static静态代码块中,样本字符串解密如原文描述类似:”字符串加密为xor,长度为7,加密后的字符串第一位为本次待解密字符串的长度”。我们的目的是为了能够还原resin 内存马,debug 过程直接跳过解密过程,在关键部分进行断点。
内存马的主要逻辑
该样本(resin)和其他容器filter 型内存马类似,创建 filter,添加 filterConfigImpl 实例,添加filterMapping 路由映射。
创建 filter
在反射加载完必要的依赖class之后,该样本调用 java.uti.Base64$decoder/javax.xml.bind.DatatypeConverter.parseBase64Binary对字符串 var17 进行解码;然后使用 defineClass 类加载器进行了加载,其中 var17 字符串就是样本构建的恶意filter类的base64编码,类名 PseudodramaticallyFilter。
该样本(resin)和其他容器filter 型内存马类似,创建 filter,添加 filterConfigImpl 实例,添加filterMapping 路由映射。
创建 filter
在反射加载完必要的依赖class之后,该样本调用 java.uti.Base64$decoder/javax.xml.bind.DatatypeConverter.parseBase64Binary对字符串 var17 进行解码;然后使用 defineClass 类加载器进行了加载,其中 var17 字符串就是样本构建的恶意filter类的base64编码,类名 PseudodramaticallyFilter。
调整 filter 顺序
在创建filter 实例,添加 filterConfigImpl及相应路由之后,样本路由添加到 WebApp._filerMapper 和 WebApp._loginFilterMapper 中,_filerMapper 及 _loginFilterMapper 中存放的是 ArrayList<FilterMapping> 数组,样本通过创建新的 ArrayList<FilterMapping> 并将前序步骤创建的 filterMapping 做为首位加入。
filterConfigImpl 实现了 javax.servlet.FilterConfig 和 javax.servlet.FilterRegistration.Dynamic 接口
在创建filter 实例,添加 filterConfigImpl及相应路由之后,样本路由添加到 WebApp._filerMapper 和 WebApp._loginFilterMapper 中,_filerMapper 及 _loginFilterMapper 中存放的是 ArrayList<FilterMapping> 数组,样本通过创建新的 ArrayList<FilterMapping> 并将前序步骤创建的 filterMapping 做为首位加入。
filterConfigImpl 实现了 javax.servlet.FilterConfig 和 javax.servlet.FilterRegistration.Dynamic 接口
TeamQueue类的call方法中会根据传入的参数实例化一个Request对象,并添加进队列,之后TeamQueue Writer线程从队列获取请求对象,使用socket进行发送
以上就是Cobalt Strike客户端发包和接收响应的大致逻辑。在创建TeamQueue实例后开始调用call方法来发送不同阶段的请求
以上就是Cobalt Strike客户端发包和接收响应的大致逻辑。在创建TeamQueue实例后开始调用call方法来发送不同阶段的请求
扫描结果分析
网络空间测绘始于扫描,不止于扫描。在找到该特征后,我们开始在互联网中进行挖掘。
使用搜索语句:response:"\x00\x00\xca\xfe" AND port: "50050",可以找到存在弱口令的Cobalt Strike,我们只对部分主机进行了受控IP的提取,这步骤稍微敏感,随机登录一台
通过搜索语法 response:"\x00\x00\x00\x00" AND port: "50050" AND service: "http/ssl"
可以找到没有爆破出密码的Cobalt Strike,可以看到共有5173条扫描记录,1049个IP。
网络空间测绘,始于资产,但不止于资产。
我们认为,主动测绘数据将会与终端行为样本数据、网络流量通信数据一样,是未来网络安全大数据&&威胁情报数据的重要源头。主动测绘数据和基于测绘数据分析后形成的知识将能够极大补充我们的视野
网络空间测绘始于扫描,不止于扫描。在找到该特征后,我们开始在互联网中进行挖掘。
使用搜索语句:response:"\x00\x00\xca\xfe" AND port: "50050",可以找到存在弱口令的Cobalt Strike,我们只对部分主机进行了受控IP的提取,这步骤稍微敏感,随机登录一台
通过搜索语法 response:"\x00\x00\x00\x00" AND port: "50050" AND service: "http/ssl"
可以找到没有爆破出密码的Cobalt Strike,可以看到共有5173条扫描记录,1049个IP。
网络空间测绘,始于资产,但不止于资产。
我们认为,主动测绘数据将会与终端行为样本数据、网络流量通信数据一样,是未来网络安全大数据&&威胁情报数据的重要源头。主动测绘数据和基于测绘数据分析后形成的知识将能够极大补充我们的视野
允许任意URL,预期任意代码执行
-- MARKDOWN --
- 我们发现并报告了流行软件中的一键式代码执行漏洞,包括 Telegram**、**Nextcloud**、**VLC**、**Libre-/OpenOffice**、**Bitcoin/Dogecoin Wallets**、**Wireshark 和 Mumble
- 将用户提供的 URL 传递给操作系统打开的桌面应用程序经常容易受到**通过用户交互执行代码**的
攻击 - 当打开指向托管在互联网可访问文件共享(`nfs`、`webdav`、`smb` 等)上的恶意可执行文件(`.desktop`、`.jar`、`.exe` 等)的 URL 时,或者利用打开的应用程序的 URI 处理程序中的其他漏洞时,都可以实现代码执行
- 其他软件中已经发现了遵循这种模式的漏洞,预计未来会发现更多漏洞
# 介绍
在本文中,我们展示了众多桌面应用程序中的代码执行漏洞,这些漏洞的根本原因都是一样的:对用户输入的验证不足,这些输入随后被视为 URL 并在操作系统的帮助下打开。所需的用户交互和利用策略取决于桌面环境以及应用程序是否经过强化,例如,使用 URI 方案允许/阻止列表。例如,以下是在 Xubuntu 20.04 上的 Nextcloud(< 3.1.3)中利用此问题的方式:
-- MARKDOWN --
- 我们发现并报告了流行软件中的一键式代码执行漏洞,包括 Telegram**、**Nextcloud**、**VLC**、**Libre-/OpenOffice**、**Bitcoin/Dogecoin Wallets**、**Wireshark 和 Mumble
- 将用户提供的 URL 传递给操作系统打开的桌面应用程序经常容易受到**通过用户交互执行代码**的
攻击 - 当打开指向托管在互联网可访问文件共享(`nfs`、`webdav`、`smb` 等)上的恶意可执行文件(`.desktop`、`.jar`、`.exe` 等)的 URL 时,或者利用打开的应用程序的 URI 处理程序中的其他漏洞时,都可以实现代码执行
- 其他软件中已经发现了遵循这种模式的漏洞,预计未来会发现更多漏洞
# 介绍
在本文中,我们展示了众多桌面应用程序中的代码执行漏洞,这些漏洞的根本原因都是一样的:对用户输入的验证不足,这些输入随后被视为 URL 并在操作系统的帮助下打开。所需的用户交互和利用策略取决于桌面环境以及应用程序是否经过强化,例如,使用 URI 方案允许/阻止列表。例如,以下是在 Xubuntu 20.04 上的 Nextcloud(< 3.1.3)中利用此问题的方式:
在某次授权红队行动中,客户给定目标外网资产很少
经过各种挖掘,各种尝试,久久没有结果,注意到某系统为通用系统。
寻找源码到getshell
查找源码
1、网盘泄露:这套系统并不开源,各种网盘泄露网站一顿查找,无果
2、Github、gitlab泄露:尝试了多个关键词,均无果
3、Fofa找同类型的站:用favicon.ico,或是用title来搜,并且将这些资产采集起来,最终在某个站发现web.rar,成功获得源码
经过各种挖掘,各种尝试,久久没有结果,注意到某系统为通用系统。
寻找源码到getshell
查找源码
1、网盘泄露:这套系统并不开源,各种网盘泄露网站一顿查找,无果
2、Github、gitlab泄露:尝试了多个关键词,均无果
3、Fofa找同类型的站:用favicon.ico,或是用title来搜,并且将这些资产采集起来,最终在某个站发现web.rar,成功获得源码
从TemplatesImpl类Gadget中提取bytecode
前言
在Java反序列化的gadget中,有很多使用可反序列化TemplatesImpl类进行命令执行(比如CommonsCollections2-4、CommonsBeanutils1、Jdk7u21以及变种JRE8u20等等)。
实际上这类Gadget的反序列化过程中是直接或间接调用newTransformer或getOutputProperties方法,最终进入defineTransletClasses方法,将_bytecodes字段中存储的类的bytecode重新在JVM中定义为类,最终在对其调用newInstance方法时,触发写在该类static块或者无参构造方法中的代码块,从而达到代码执行的效果。
由于ysoserial中默认用于创建TemplatesImpl对象的createTemplatesImpl函数中,是在bytecode对应的类的静态代码块中加入执行java.lang.Runtime.exec的代码段,所以效果上来说,ysoserial创建的这类gadget是用于触发命令执行的,但实际上是可以进行任意代码执行的。
前言
在Java反序列化的gadget中,有很多使用可反序列化TemplatesImpl类进行命令执行(比如CommonsCollections2-4、CommonsBeanutils1、Jdk7u21以及变种JRE8u20等等)。
实际上这类Gadget的反序列化过程中是直接或间接调用newTransformer或getOutputProperties方法,最终进入defineTransletClasses方法,将_bytecodes字段中存储的类的bytecode重新在JVM中定义为类,最终在对其调用newInstance方法时,触发写在该类static块或者无参构造方法中的代码块,从而达到代码执行的效果。
由于ysoserial中默认用于创建TemplatesImpl对象的createTemplatesImpl函数中,是在bytecode对应的类的静态代码块中加入执行java.lang.Runtime.exec的代码段,所以效果上来说,ysoserial创建的这类gadget是用于触发命令执行的,但实际上是可以进行任意代码执行的。
至此,我们拿到能够获得进行pickle序列化的所有条件
利用场景
Django创建cache文件夹的默认权限是700,这意味无法通过同组的用户来进行改写,但是Django的服务器一般是用nginx或者apache等来启动。有的情况下,nginx服务器底下可能不止一个服务在运行,也可能是PHP或者其他。那么如果其他服务能够进行对临时文件夹tmp或/var/tmp内部的内容进行读写的话,则可以对Django框架进行攻击
利用场景
Django创建cache文件夹的默认权限是700,这意味无法通过同组的用户来进行改写,但是Django的服务器一般是用nginx或者apache等来启动。有的情况下,nginx服务器底下可能不止一个服务在运行,也可能是PHP或者其他。那么如果其他服务能够进行对临时文件夹tmp或/var/tmp内部的内容进行读写的话,则可以对Django框架进行攻击