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

ctfshowWeb应用安全与防护(第四章)wp

Session固定攻击

登录test账号,给admin发送消息

image-20250917114638166

回到主页发现用户名变成了admin,获得了flag

image-20250917114721292

JWT令牌伪造

先随便输入一个用户名,获得jwt token

image-20250917114913621

JWT伪造网站 JSON Web Tokens - jwt.io

由于没有校验签名, 我们可以采用 None 攻击,将alg改为none,admin改为True

image-20250917115114939

修改cookie,刷新

image-20250917115155858

Flask_Session伪造

点击读取网页,进入了百度

image-20250917115339904

发现url参数,尝试任意文件读取,发现file协议可以使用

image-20250917115500771

常见伪协议

1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址
3 ftp:// — 访问 FTP(s) URLs
4 php:// — 访问各个输入/输出流(I/O streams)
5 zlib:// — 压缩流
6 data:// — 数据(RFC 2397)
7 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档
9 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音频流
12 expect:// — 处理交互式的流

想要伪造flask_session需要拿到secret_key,先读取源码,flask工作目录一般都是/app/app.py

image-20250917120606034

# encoding:utf-8 
import re, random, uuid, urllib.request 
from flask import Flask, session, request 
app = Flask(__name__) 
random.seed(uuid.getnode()) 
app.config['SECRET_KEY'] = str(random.random()*100) 
print(app.config['SECRET_KEY']) 
app.debug = False 
@app.route('/') 
def index(): session['username'] = 'guest' return 'CTFshow 网页爬虫系统 读取网页' 
@app.route('/read') 
def read(): try: url = request.args.get('url') if re.findall('flag', url, re.IGNORECASE): return '禁止访问' res = urllib.request.urlopen(url) return res.read().decode('utf-8', errors='ignore') except Exception as ex: print(str(ex)) return '无读取内容可以展示'
@app.route('/flag') 
def flag(): if session.get('username') == 'admin': return open('/flag.txt', encoding='utf-8').read() else: return '访问受限' 
if __name__=='__main__': app.run( debug=False, host="0.0.0.0" )

思路很简单,伪造flask_session,将其中的用户改成admin,访问/flag得到flag,第一步就是获取secret_key

random.seed(uuid.getnode()) 
app.config['SECRET_KEY'] = str(random.random()*100) 
print(app.config['SECRET_KEY']) 

uuid.getnode()

是Python中用于获取本机硬件地址(通常是MAC地址)的方法。它返回一个48位的正整数,表示设备的硬件地址。

random.seed(uuid.getnode())

当seed固定时,输出的random内容是一样的

image-20250917121320212

image-20250917121358850

读机器码

url=file:///sys/class/net/eth0/address
02:42:ac:0c:64:0f

计算secret_key

import randommac = int("02:42:ac:0c:64:0f".replace(":",""),16)
random.seed(mac)
key = str(random.random()*100)
print(key) # 40.655192285889655

使用flask-session-cookie-manager伪造session

image-20250917122241855

访问/flag

image-20250917122318121

弱口令爆破

导入附件的字典爆破,用户名一般都是admin

image-20250917122514487

有一条响应长度不一样,密码是834100

image-20250917122616554

http://www.wxhsa.cn/company.asp?id=6534

相关文章:

  • 创建sshkey并链接git
  • 使用bash脚本检测网站SSL证书是否过期 - sherlock
  • Python 2025:低代码开发与自动化运维的新纪元 - 教程
  • 为什么Claude Code放弃代码索引,使用50年前的grep技术
  • 【QT】使用QT编写一款自己的串口助手
  • 一句话让AI帮你搞营销?火山引擎Data Agent说:这事儿可以的~
  • debian11 使用 podman 部署 n8n
  • 网络安全反模式:无效工作生成器的根源与解决方案
  • Excel处理控件Aspose.Cells教程:如何将Excel区域转换为Python列表
  • alpine安装docker以及docker-compose
  • 运筹学
  • [CF848D] Shake It!
  • 国产化Excel开发组件Spire.XLS教程:使用 Python 设置 Excel 格式,从基础到专业应用
  • 计算机辅助筛选抗菌/抗病毒肽:以SARS-CoV-2为例,解析靶标突破与筛选策略
  • c++国外学习视频心得4-opengl
  • LOJ #3835. 「IOI2022」千岛 题解
  • (附源码)高校拼车管理系统的设计与实现 - 实践
  • Ubuntu取消vim自动对齐
  • AI产品测试学习路径全解析:从业务场景到代码实践
  • 代码随想录算法训练营第一天 | leetcode 704 27 977
  • 中文医学基准测试题库数据集:28万条标准化JSON格式医师考试题目与临床案例分析,覆盖28个医学专业领域,用于医学AI模型训练、临床决策支持系统开发、医学知识问答系统构建、医学教育辅助工具优化
  • 函数计算的云上计费演进:从请求驱动到价值驱动,助力企业走向 AI 时代
  • 【SPIE出版】第五届计算机图形学、人工智能与数据处理国际学术会议
  • 快速边缘块稀疏贝叶斯学习MATLAB实现
  • Kubernetes概述与部署
  • XXII Open Cup : Grand Prix of Southeastern Europe
  • GNSS终端授时方式
  • SpringAI接入DeepSeek大模型实现流式对话
  • 通知语音播报功能,解锁全新体验
  • 使用AI容器镜像部署Qwen大语言模型