当前位置: 首页 > news >正文

[CISCN2019 华东南赛区]Web4

[CISCN2019 华东南赛区]Web4

点击就进入了百度的页面,但是发现了url也发生了变化 

尝试一下任意文件读取(/etc/passwd)

尝试一下读取flag

f12查看发现了cookie中的session为jwt格式,可能为flask伪造

先去解密一下session(https://jwt.io/) 

解密结果为www-data,如果是flask伪造的话需要找到secret_key,而在网上搜索flask有关信息时发现里面可能存在一个app.py文件

然后再去任意文件哪里查找有没有app这样的关键词,但是只发现了app并没有发现app.py

尝试读取一下app.py

 

整理如下代码:

# encoding:utf-8 
import re, random, uuid, urllib 
from flask import Flask, session, request 

app = Flask(__name__) 
random.seed(uuid.getnode()) 
app.config['SECRET_KEY'] = str(random.random()*233) 
app.debug = True 

@app.route('/') 
def index(): 
    session['username'] = 'www-data' 
    return 'Hello World! Read somethings' 

@app.route('/read') 
def read(): 
    try: 
        url = request.args.get('url') 
        m = re.findall('^file.*', url, re.IGNORECASE) 
        n = re.findall('flag', url, re.IGNORECASE) 
        if m or n: 
            return 'No Hack' 
        res = urllib.urlopen(url) 
        return res.read() 
    except Exception as ex: 
        print str(ex) 
    return 'no response' 

@app.route('/flag') 
def flag(): 
    if session and session['username'] == 'fuck': 
        return open('/flag.txt').read() 
    else: 
        return 'Access denied' 
if __name__=='__main__': 
    app.run( 
        debug=True, 
        host="0.0.0.0" 
    )

审计代码可得确实是session伪造,并且告诉我们username必须是fuck(if session and session['username'] == 'fuck': ),以及secret_key要利用随机数求得(app.config['SECRET_KEY'] = str(random.random()*233) ),但是种子需要用到uuid.getnode函数(random.seed(uuid.getnode()) ),uuid.getnode函数用于获得网络接口的mac地址,如果机器具有多个网络接口,则返回通用管理的mac地址,而不是通过本地管理的mac地址返回。管理的mac地址保证是全局唯一的。如果getnode函数无法获取mac地址,则他会按照rfc 4122中的建议返回带有多播位得随机48位数字。uuid.getnode函数,是网卡mac地址的十进制数,使用(/sys/class/net/eth0/address)读取一下

找到地址之后按照源代码中的提示,生成secret_key

然后去linux中使用flask-session-cookie-manager-master(GitHub - noraj/flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder)构造出新的session,使用命令(python3 flask_session_cookie_manager3.py decode -c 'eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ.Yw8ANw.2tf4dnk4ntx3KEsZf7HC8ByAGlA' -s '105.264175525')(python3 flask_session_cookie_manager3.py encode -s '105.264175525' -t "{'username': b'fuck'}"

然后返回原页面修改session即可

url直接读取flag

完结撒花

相关文章:

  • 聚苯乙烯微球载金属纳米粒子/中空结构聚苯乙烯纳米微球/间隔臂羧化聚苯乙烯微球的研究
  • 软硬件一体,利尔达芯智行创新智能电摩解决方案
  • 【元宇宙欧米说】个人创作者的NFT探索之路
  • Kaggle官方·数据科学比赛经验集;百度开源·飞桨图像数据标注高效工具;C++并发编程实践第2版·笔记;前沿论文 | ShowMeAI资讯日报
  • JavaScript常用数组元素搜索或过滤的四种方法
  • java计算机毕业设计无极服装出租管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 【算法题解】Codeforces Round #817 (Div. 4)题解
  • 【打工人摸鱼系列】python做皮卡丘桌宠,工作都有效率了呢
  • 手写模拟spring扫描底层实现
  • 照片拼图软件哪个好?快来看看这几个软件
  • 力扣打卡之合并两个有序数组
  • 通过划分法优化共识算法-“Scaling Replicated State Machines with Compartmentalization”详解
  • C#进阶04——委托和事件
  • MySQL数据库 增删查改案例讲解
  • 【面试入门必刷】算法入门-数据结构-栈(一)
  • 11111111
  • angular2 简述
  • eclipse(luna)创建web工程
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js 实现textarea输入字数提示
  • leetcode98. Validate Binary Search Tree
  • Sublime Text 2/3 绑定Eclipse快捷键
  • windows下使用nginx调试简介
  • 阿里云应用高可用服务公测发布
  • 仿天猫超市收藏抛物线动画工具库
  • 分享一份非常强势的Android面试题
  • 技术:超级实用的电脑小技巧
  • 阿里云服务器购买完整流程
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​如何在iOS手机上查看应用日志
  • #Java第九次作业--输入输出流和文件操作
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (独孤九剑)--文件系统
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (三)elasticsearch 源码之启动流程分析
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)UDP基本编程步骤
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)iOS字体
  • (转)memcache、redis缓存
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net反混淆脱壳工具de4dot的使用
  • .Net接口调试与案例
  • .NET项目中存在多个web.config文件时的加载顺序
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • [20171106]配置客户端连接注意.txt
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [Android] Upload package to device fails #2720
  • [BZOJ3757] 苹果树
  • [c++] C++多态(虚函数和虚继承)
  • [CISCN2019 华东南赛区]Web4