Shiro 不出网怎么利用

1. 利用内存马

这是最常见且有效的方法之一。内存马是一种将恶意代码直接注入到目标服务器内存中的技术,它不会在磁盘上留下任何文件,因此难以被传统的杀毒软件和文件监控系统发现

实现思路:

  • 注入 WebShell: 通过 Shiro 反序列化漏洞执行一个内存中的 Shell 代码。这个 Shell 通常是一个 Servlet、Filter 或者 JSP 的形式。它接收你的 HTTP 请求,然后执行命令并将结果通过 HTTP 响应返回
  • 通信方式: 你需要找到一个能够与目标服务器交互的 HTTP 端点(Endpoint)。例如,你可以注入一个 Filter,它会监听特定的 URL 路径,当你的请求命中这个路径时,Filter 就会被触发,执行你传入的命令,然后将命令执行结果作为 HTTP 响应的一部分返回给你

优点:

  • 隐蔽性高,不依赖外网连接
  • 可以绕过很多安全检测
  • 可以实现双向通信,方便后续操作

缺点:

  • 需要一定的 Java 基础和内存马编写能力
  • 服务器重启后,内存马会消失

2. 利用 JRMP 协议进行反向连接

如果目标服务器能够出网,但限制了 HTTP/HTTPS 协议,你还可以尝试通过其他协议进行反向连接。JRMP(Java Remote Method Protocol)是 Java RMI (Remote Method Invocation) 的底层协议,可以用于远程调用对象

实现思路:

  • 创建 JRMPListener: 在你的攻击机上运行一个 JRMPListener,这个 Listener 监听一个端口,等待目标服务器连接
  • Shiro 利用链: 使用 Shiro 反序列化漏洞,在目标服务器上执行一段代码,这段代码会去连接你的 JRMPListener
  • 获取 Shell: 一旦连接建立,你可以通过这个通道在目标服务器上执行命令或者进行其他操作

优点:

  • 利用 JRMP 协议,绕过一些基于 HTTP/HTTPS 的网络限制

缺点:

  • 依然需要目标服务器能够出网
  • 需要编写或使用专门的 JRMP 利用工具

3. 利用文件操作

虽然不能出网,但我们仍然可以利用 Shiro 反序列化漏洞来操作服务器上的文件

实现思路:

  • 写入 WebShell: 通过反序列化漏洞,执行文件写入操作,将一个 WebShell 文件(例如 webshell.jsp)写入到目标服务器的 Web 目录下
  • 利用已有的 WebShell: 如果你发现服务器上已经存在一个可写的目录,或者存在一些可以被利用的日志文件等,也可以将命令执行的结果写入到这些文件中

具体步骤:

  • 使用 URLDNS 或者其他利用链来验证漏洞存在性
  • 找到一个可写的路径,例如 webapps/ROOT/ 目录
  • 构造一个恶意的序列化 payload,其中包含写入文件的操作。例如,可以使用 CommonsCollections 或者 Jdk7u21 等利用链,然后调用 Runtime.exec() 来执行 echo "恶意代码" > /path/to/shell.jsp 命令

优点:

  • 不需要服务器出网
  • 操作直观,容易理解

缺点:

  • 权限问题: 需要目标服务器用户具有写入权限
  • 路径问题: 需要知道 Web 目录的绝对路径,或者通过其他方式推测

4. 命令执行带回显

如果目标服务器不出网,但我们仍然可以执行命令,那么如何看到命令执行的结果呢?

实现思路:

  • 写入文件,然后读取: 执行命令,并将命令执行的结果重定向到一个可读的目录,例如 Web 目录下的一个新文件。然后,你再通过浏览器访问这个文件,就可以看到命令执行的结果了
  • 利用报错: 构造一个特殊的命令,使得命令执行结果作为错误信息输出。例如,一些命令在执行失败时会返回有用的信息

具体步骤:

  • 写入文件: ls -la > /tmp/result.txt
  • 再读取文件: 再次构造反序列化 payload,执行 cat /tmp/result.txt,然后将结果写入到可访问的 Web 文件中,或者通过其他方式带出

优点:

  • 不依赖网络连接

缺点:

  • 操作繁琐,需要多次构造 payload
  • 容易被检测
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:13:19

results matching ""

    No results matching ""