90 lines
4.2 KiB
Markdown
90 lines
4.2 KiB
Markdown
### 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
|
||
- 容易被检测 |