今天遇到个毫无头绪的题,记录一下过程。
进入页面发现输入框,参数为url,那就试试文件读取。
看看环境变量。
其中PWD=/app,有可能存在app.py,试试吧。猜对了,运气吧~ (做完后才发现的T-T)
这里看其他wp说是在 linux读取当前进程执行命令/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)
@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
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
点击查看代码
当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的f
在Linux中,文件是用文件描述符来表示的。文件描述符是一个非负整数,它唯一地标识打开的文件。在打开一个文件时,内核会返回一个文件描述符。close函数用于关闭文件,释放文件描述符,并关闭文件可能占用的资源。
而在源码中没有进行close,所以导致没有释放占用的资源,而文件描述符还存在在/proc/nnnn/fd/目录。
理解个大概就行,可能是错的,也请指出。
也可以看看https://www.cnblogs.com/sx66/p/16824323.html#:~:text=%E5%9C%A8Linux%E6%88%96%E8%80%85Unix%E7%B3%BB%E7%BB%9F%E4%B8%AD%EF%BC%8C%E9%80%9A%E8%BF%87rm%E6%88%96%E8%80%85%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86%E5%99%A8%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E5%B0%86%E4%BC%9A%E4%BB%8E%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E4%B8%8A%E8%A7%A3%E9%99%A4%E9%93%BE%E6%8E%A5%20%28unlink%29%E3%80%82,%E7%84%B6%E8%80%8C%E5%A6%82%E6%9E%9C%E6%96%87%E4%BB%B6%E6%98%AF%E8%A2%AB%E6%89%93%E5%BC%80%E7%9A%84%EF%BC%88%E6%9C%89%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%EF%BC%89%EF%BC%8C%E9%82%A3%E4%B9%88%E8%BF%9B%E7%A8%8B%E5%B0%86%E4%BB%8D%E7%84%B6%E5%8F%AF%E4%BB%A5%E8%AF%BB%E5%8F%96%E8%AF%A5%E6%96%87%E4%BB%B6%EF%BC%8C%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%E4%B9%9F%E4%B8%80%E7%9B%B4%E8%A2%AB%E5%8D%A0%E7%94%A8%E3%80%82%20%E4%B8%80%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%E6%98%AFkill%E6%8E%89%E7%9B%B8%E5%BA%94%E7%9A%84%E8%BF%9B%E7%A8%8B%EF%BC%8C%E6%88%96%E8%80%85%E5%81%9C%E6%8E%89%E4%BD%BF%E7%94%A8%E8%BF%99%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%BA%94%E7%94%A8%EF%BC%8C%E8%AE%A9os%E8%87%AA%E5%8A%A8%E5%9B%9E%E6%94%B6%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%E3%80%82
发现serect_key,但是shell不会回显啊,想到可以利用dns外带法(自己搜搜吧),那么直接打吧(记得key要url编码啊,我也不知道为什么可能是环境问题)。
也可以利用tee将flag输出到/tmp文件夹下(为什么这个文件夹因为试了其他都不行,可能这个文件夹才有权限)
结束,又学到一招-_-
标签:PicDown,E5%,BB%,E6%,E7%,E8%,2020,E4%,网鼎杯 From: https://www.cnblogs.com/jocker-love-you/p/18177588