ctfshow-菜狗杯-抽老婆

news/2024/11/24 3:56:07/

任意文件读取

抽老婆

打开首先发现是一个图片下载(老婆们都很不错( ̄▽ ̄)*),感觉也没什么其他的东西,先F12看一下代码,发现有一处标注,感觉跟任意文件下载有关:

(一开始的错误思路:)

想着先扫一遍看看能不能发现啥,于是用dirsearch扫了一下,
在这里插入图片描述发现了/console,访问显示需要PIN,
在这里插入图片描述
也没有什么提示不知道能不能爆破出来,先抓个包看看,发现返回的响应包中有,改一下值,改为true,
在这里插入图片描述

发现验证就通过了:
在这里插入图片描述
但是我不会了。。。。后来看了一下wp,发现这个思路是错的,还是应该从文件读取入手。

(正确思路:)

于是先试一试读取flag:
在这里插入图片描述
被过滤了🤪,不过不要气馁,多试试,再尝试随便读一个111.jpg:
发现没有过滤了,出现了报错:
在这里插入图片描述
里面暴露了一些路径,猜测app.py是网站源文件,下载下来先看看(但是这个路径,我不太了解为什么就是返回两层,是开发经验吗):

# !/usr/bin/env python
# -*-coding:utf-8 -*-"""
# File       : app.py
# Time       :2022/11/07 09:16
# Author     :g4_simon
# version    :python 3.9.7
# Description:抽老婆,哇偶~
"""from flask import *
import os
import random
from flag import flag#初始化全局变量
app = Flask(__name__)
app.config['SECRET_KEY'] = 'tanji_is_A_boy_Yooooooooooooooooooooo!'@app.route('/', methods=['GET'])
def index():  return render_template('index.html')@app.route('/getwifi', methods=['GET'])
def getwifi():session['isadmin']=Falsewifi=random.choice(os.listdir('static/img'))session['current_wifi']=wifireturn render_template('getwifi.html',wifi=wifi)@app.route('/download', methods=['GET'])
def source(): filename=request.args.get('file')if 'flag' in filename:return jsonify({"msg":"你想干什么?"})else:return send_file('static/img/'+filename,as_attachment=True)@app.route('/secret_path_U_never_know',methods=['GET'])
def getflag():if session['isadmin']:return jsonify({"msg":flag})else:return jsonify({"msg":"你怎么知道这个路径的?不过还好我有身份验证"})if __name__ == '__main__':app.run(host='0.0.0.0',port=80,debug=True)

有个/secret_path_U_never_know路径,但是从代码里可以看出还需要绕过身份验证:
在这里插入图片描述

flask中的session伪造

看代码只需要让session中的isadmin为真就可,这个用的应该是JWT方式认证,里面签名要用到SECRET_KEY;于是我们将isadmin的值更改后,使用密钥SECRET_KEY重新加密生成一个session。有一个开源脚本可以帮我们自动生成:github—flask-session-cookie-manager下载链接
下载之后,使用脚本进行重新加密:
在这里插入图片描述

生成以后我们在burp拦截的请求包中用此session替换之前的session,发现flag出现:
在这里插入图片描述

总结:
了解到了flask框架,以及flask框架中会使用的登录认证:
现在流行两种方式登录认证方式:Session和JWT,无论是哪种方式其原理都是保存凭证:session,JWT,token的区别

  1. 前端发起登录认证请求
  2. 后端登录验证通过,返回给前端一个凭证
  3. 前端发起新的请求时携带凭证
    只不过session的重点是会在服务端存储凭证;而JWT不会在服务端存储凭证,而是会将返回的凭证根据签名和加密方式来校验其是否被篡改。
    JWT的格式及加密形式(JWT的介绍及使用);

http://www.ppmy.cn/news/274574.html

相关文章

Codeforces 期望概率dp 235B,351B,768D,50D,101D 题解

文章目录 235B Lets Play Osu!351B Jeff and Furik768D Jon and Orbs50D Bombing101D Castle 5道不错的概率dp. 235B Let’s Play Osu! 你 打 音 游 的 得 分 是 你 每 次 击 中 连 续 音 符 个 数 的 平 方 和 . 给 出 你 击 中 每 一 个 音 符 的 概 率 , 求 你 的 期 望 得 …

抽奖转盘HTML5

html代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"renderer" content"webkit"><meta http-equiv"X-UA-Compatible" content"IEedge">&…

MarsNFT|来抽盲盒吗?停不下来的那种!

生活就像盲盒&#xff0c;你永远不知道抽中的会是什么。MarsNFT于10月9日再次携手宏宝斋带来西游72变盲盒。首次白龙马藏品一经发售就立马抢完&#xff0c;受到了众多粉丝的青睐。这次盲盒新玩法十分值得期待&#xff0c;所谓先到先得&#xff0c;数量有限请活动时间准时登陆官…

华为全栈自主数据库GaussDB正式面向全球服务

一、前言 在6月7日举行的华为全球智慧金融峰会2023上&#xff0c;华为发布新一代分布式数据库GaussDB&#xff0c;并正式向全球客户提供服务。据介绍&#xff0c;GaussDB实现了核心代码100%自主研发&#xff0c;是国内当前唯一做到软硬协同、全栈自主的国产数据库。 可谓是里…

抽奖动画大转盘抽奖思路与做法

抽奖是各类营销活动中最常见的一种形式&#xff0c;本产品需求大致如下&#xff1a;转盘周围跑马灯交替闪烁&#xff0c;点击抽奖&#xff0c;大转盘旋转&#xff0c;调用接口获取抽奖结果&#xff0c;大转盘指针指向对应的奖品。高保如下图1 2.整体思路 本需求要求跑马灯交替闪…

cf55d

此题其实说实话不算是数位dp把&#xff0c;虽然我不是按最优的方法过的。但是感觉记忆划搜索是可以的 这个人写了个优化的&#xff1a;http://hi.baidu.com/sunhaowenprime/item/d3155f3418c14dd26c15e92e 我的是500啊 差好大啊。。。 我用dp【i】【j】【k】表示i长度&…

2023高考作文全国甲卷 人·技术·时间 有人成了时间的仆人

2023高考作文全国甲卷 人们因技术发展得以更好地掌控时间&#xff0c;但也有人因此成了时间的仆人。 这句话引发了你怎样的联想与思考&#xff1f;请写一篇文章。 要求&#xff1a;选准角度&#xff0c;确定立意&#xff0c;明确文体&#xff0c;自拟标题&#xff1b;不要套作&…

工业RFID读写器选择指南

工业RFID读写器在工业领域上可提升自动化、现代化工业生产的效率&#xff0c;那么企业在选择工业读写器的时候&#xff0c;需要注重哪些方面&#xff0c;如何选择呢?以下是ANDEWELL给大家准备的工业RFID读写器选择指南! 1、根据应用场景选择 根据不同的应用场景&#xff0c;要…