CTF

[V&N2020 公开赛]HappyCTFd/CHECKIN/TimeTravel

Posted on 2020-02-29,4 min read

HappyCTFd
登陆进去是个CTFD(一个开源的CTF平台)界面。

看了下没啥东西。
接着搜到了CTFD的CVE。貌似还挺新的

https://www.colabug.com/2020/0204/6940556/
具体就是注册一个空格admin用户。
首会经过判断。用户名是否存在。此时空格admin!=admin
然后入数据库时会去掉空格。就成了admin
此时。我们去重置密码。就会重置admin的密码

开始复现
首先注册一个空格admin用户。邮箱是buuoj的内网邮箱。等会重置要用到

然后重置密码


重置完。用admin+你重置的密码登陆即可
有个flagflag你在哪的channge。下载附件就有flag了

CHECKIN
进去就给了源码


from flask import Flask, request
import os
app = Flask(__name__)

flag_file = open("flag.txt", "r")
# flag = flag_file.read()
# flag_file.close()
#
# @app.route('/flag')
# def flag():
#     return flag
## want flag? naive!

# You will never find the thing you want:) I think
@app.route('/shell')
def shell():
    os.system("rm -f flag.txt")
    exec_cmd = request.args.get('c')
    os.system(exec_cmd)
    return "1"

@app.route('/')
def source():
    return open("app.py","r").read()

if __name__ == "__main__":
    app.run(host='0.0.0.0')

分析一下:

打开flag.txt
删除flag.txt
执行命令

既然能执行任意命令。就反弹shell。去文件描述符拿flag就好了
去buuoj开个linux labs。nc监听端口
尝试bash反弹。失败。python反弹失败。
最后python3 成功反弹shell

这里讲下proc各项的内容

在/proc文件系统中,每一个进程都有一个相应的文件 。
比如我python启动了一个http服务。那么就会在/proc下创建一个对应的文件

/proc/pid/cmdline 包含了用于开始进程的命令 ;
/proc/pid/cwd包含了当前进程工作目录的一个链接 ;
/proc/pid/environ 包含了可用进程环境变量的列表 ;
/proc/pid/exe 包含了正在进程中运行的程序链接;
/proc/pid/fd/ 这个目录包含了进程打开的每一个文件的链接;
/proc/pid/mem 包含了进程在内存中的内容;
/proc/pid/stat包含了进程的状态信息;
/proc/pid/statm 包含了进程的内存使用信息。

/proc/pid/fd/这个会包含程序打开的每个文件的链接.。即使文件被删了。链接还是会存在
这道题。python打开了flag.txt。然而又删掉了
这时python对应进程下的fd下会有flag.txt的链接

这里python的进程ID是11。fd下的3链接的是flag.txt
直接cat就行了

TimeTravel
给出了源码

首先。包含了vendor/autoload.php
导入GuzzleHttp\Client
new 一个Client()。访问127.0.0.1:5000/api/eligible
返回数据用json解码。如果success中的值为True。就输出flag

一开始看到vendor。。方向就跑偏了。以为是个和larval有关的题。
没想到重点在GuzzleHTTP
漏洞分析https://www.laruence.com/2016/07/19/3101.html
意思大致是可以在请求中夹杂一个HTTP_PROXY:IP。
然后数据就会被转发到IP那。造成请求伪造。监听等
这里就要说一下HTTP的代理。

客户端->代理->服务器        请求
服务器->代理->客户端        响应

现在代理可控为我们的VPS。无论是请求还是响应。都得经过我们的代理。
我们可以修改请求。也可以修改响应

首先。开启个VPS。

拿到flag

下一篇: [SUCTF 2018]annonymous(php lambda)→