我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

ctfshow-菜狗杯-抽老婆-创新互联

任意文件读取 抽老婆

打开首先发现是一个图片下载(老婆们都很不错( ̄▽ ̄)*),感觉也没什么其他的东西,先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']=False
    wifi=random.choice(os.listdir('static/img'))
    session['current_wifi']=wifi
    return 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的介绍及使用);

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享题目:ctfshow-菜狗杯-抽老婆-创新互联
地址分享:http://shouzuofang.com/article/diohhg.html

其他资讯