### 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
- 容易被检测