安全矩阵

 找回密码
 立即注册
搜索
查看: 2943|回复: 0

【新手入门系列】 一步一步教你漏洞挖掘之如何在半黑盒...

[复制链接]

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
发表于 2021-10-18 13:03:29 | 显示全部楼层 |阅读模式
原文链接:【新手入门系列】 一步一步教你漏洞挖掘之如何在半黑盒模式下挖掘RCE漏洞

引言

很久很久以前,在闲暇之余研究了一下某系统,通过下载客户端,在半黑盒模式下挖掘出一个JNDI注入漏洞。漏洞本身并不复杂,但是分析漏洞的过程可能对初学者有一定帮助,所以这里分享给大家,大佬请绕道。

客户端安装

通过访问服务端,可以下载到该系统的客户端软件UClient.exe,下载后直接进行安装。


在安装过程中,会自动下载安装JRE7u51的支撑环境,并在磁盘上创建一些文件夹。
漏洞分析

在分析客户端程序时,定位到启动配置文件`client.esc`,可以修改配置,加入jdwp远程调试。


客户端启动入口:

分析过程中,定位文件`\NCCACHE\CODE\resources\server.properties`:

通过尝试发现`JavaURLCommunicator`类主要用于向服务器发送HTTP请求。

关注下发送的封装对象`InvocationInfo`:

从类的参数中可以看出,该类可能用于封装与HTTP发包相关的过程。回到request函数:


重点看下这个地方:

客户端对封装的`InvocationInfo`对象进行序列化操作,然后发送给服务端。虽然没有拿到服务端代码,但是可以猜测在服务端应该存在一个反序列化操作。

研究了一会后,观察日志文件:



客户端通过lookup发送了大量JNDI请求。此时可以猜想服务端可能也存在同样操作,联想到前面分析的`JavaURLCommunicator`类`request`函数可以向服务端发送HTTP请求,其中两个参数分别是服务端URL以及`InvocationInfo`对象,尝试构造如下请求:


在处理来自服务端返回数据包的`result`处打下断点:


猜测服务端确实应该存在`lookup`操作,修改发包测试程序:
  1. import nc.bs.framework.common.InvocationInfo;
  2. import nc.bs.framework.comn.cli.JavaURLCommunicator;

  3. public class Test {
  4.     public static void main(String[]args)throws Exception{
  5.         InvocationInfo info=new InvocationInfo();
  6.         info.setServiceName("test");
  7.         JavaURLCommunicator com=new JavaURLCommunicator();
  8.         String url="http://***/ServiceDispatcherServlet";
  9.         com.request(info,url);
  10.     }
  11. }
复制代码
结果如下:


更加证明了上面的猜想,继续构造JNDI服务:


漏洞验证成功。由于默认的JDK版本为JDK7u51,可利用LDAP方式实现RCE。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-22 22:15 , Processed in 0.013078 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表