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