news 2026/4/15 20:46:22

[CISCN2019 华东南赛区]Web4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[CISCN2019 华东南赛区]Web4

1.打开是一个欢迎界面

然后点击这个read something会跳转到这个页面

看到这个https://baidu.com,知道这里是可以 ssrf的,使用file看一下

发现触发了waf,使用其他的试一试,最后发现 直接加路径也能进行访问

还有一种方法就是使用local_file也能进行读取

local_file通常指的是本地文件路径

看到这个read,感觉可能是使用的路由为read,那么盲读一下app/app.py,这是flask的常用源码路径

读取到了源码

2.分析代码

首先是导入了一些模块

re:用来进行正则匹配

random:伪随机数生成器

uuid:用于获取机器标识(uuid.getnode()返回网卡MAC地址)

urilib:用于发送HTTP请求并读取响应(用于urlopen)

这里使用的是python2的urllib,python3的是urllib.request

从flask导入Flask(创建应用)、session(Flask session)、request(请求对象)

创建Flask应用实例,__name__用于模板/静态路径解析

使用uuid.getnode()返回一个整数的MAC地址,然后用MAC地址初始化随机数生成器

再利用random.random()生成一个0~1之间的伪随机小数,再乘以233并转换字符串作为flask的secret_key

启用falsk的调试模式

一个根目录路由

定义了一个index函数

会将session中的username的值设置为www-data

然后返回一个hello world加上一个外链

一个/read路由

定义了一个read函数

然后获取他get传参的url参数的值,赋值给url

然后使用正则匹配,匹配url中是否以file协议或以file开头,不区分大小写,然后将值赋值给m

再使用正则匹配,检查url中的flag字段不区分大小写,然后将结果赋值给n

然后if判断m或者n中有一个为true,就返回no hack

下面是一个向url发送HTTP请求并读取响应,然后将值赋值给res,再返回read读取res的值

定义了一个/flag路由

里面定义了一个flag函数

if检查session中的username的值为fuck,那么就打开/flag.txt并进行阅读,然后使用return返回出来,否的话就回显一个没权限

3.思路分析

首先是看到他这里面有一个secret_key是可以自己构造的,结构为用生成的MAC地址初始化随机数生成器,再将random.random()生成的0~1的伪随机数小数,乘一个233,并转换为字符串就是他的secret_key,这里MAC地址通常出现在这几个路径下

file:///sys/class/net/eth0/address

file:///sys/class/net/ens33/address

file:///sys/class/net/enp0s3/address

file:///sys/class/net/wlan0/address

发现为ce:d0:15:29:3e:5c

然后按照他里面的生成方法给进行一个伪造secret_key

首先就是先random.seed使用这个进行一个伪随机数初始化,这里的MAC地址要变成为十六进制,然后再利用random.random生成0~1的随机数乘一个233,注意!!!,这里环境使用的是python2,所以运行这个代码的时候要使用python2运行
因为python3和python2的生成精度不同,生成出来的值也不同

python3

python2

这里使用python2生成的种子值,来当成secret_key

伪造出密钥了以后,就是看需要伪造什么了,看到数据包中session是一段以ey开头并且使用点号分为三段,那么指定值JWT加密了,那么使用这个密钥进行一个解密

可以看到成功解出值,那么就是可以开始最后的构造了

4.开始构造

题目要求是username的值为fuck,再访问/flag就能得到flag,那么进行一个伪造

这个时候直接复制上面解密出来的{'username': b'www-data'},然后将里面的www-data修改为fuck

最后将其替换上去,再访问/flag得到flag

5.知识点

从这题中又学到了一个local_file也能进行一个ssrf的文件读取

local_file:local_file通常指的是本地文件路径,他在ssrf中,也能进行一个伪造请求的方法,用以读取本地文件的路径

还有就是

python2的发送HTTP请求并读取响应是urllib

python3的发送HTTP请求并读取响应是urllib.request

JWT伪造

JWT他是由三部分组成,分别是头部、载体、签名

通常用于身份验证,也可以用于交换信息

参考文章:

https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

https://www.cnblogs.com/ityouknow/p/10856177.html(cookie和session)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 6:08:52

前端——TailwindCSS在管理系统中的应用技巧

TailwindCSS作为一个功能类优先的CSS框架&#xff0c;在后台管理系统中有独特的优势。 1 响应式布局 <!-- 响应式网格布局 --> <div class"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"><div class"bg-white rounded-lg shadow p-6&q…

作者头像 李华
网站建设 2026/4/12 15:39:21

盲盒小程序开发✨全玩法覆盖不踩坑!

盲盒小程序开发✨全玩法覆盖不踩坑&#xff01;做盲盒小程序怕玩法单一&#xff1f;我们全搞定&#xff01;&#x1f389;爬塔闯关赢稀有赏、经典一番赏抽限定款、无限赏解锁持续惊喜&#xff0c;还有对对碰互动 PK&#xff0c;玩家粘性直接拉满&#xff01;社交 商城双 buff …

作者头像 李华
网站建设 2026/4/5 19:40:28

Jmeter进行http接口测试,这一篇就搞定

jmeter-http接口测试脚本 jmeter进行http接口测试的主要步骤&#xff08;1.添加线程组 2.添加http请求 3.在http请求中写入接口的URL&#xff0c;路径&#xff0c;请求方式&#xff0c;参数 4.添加查看结果树 5.调用接口&#xff0c;查看返回值&#xff09; 针对接口添加heade…

作者头像 李华
网站建设 2026/4/12 16:07:56

LobeChat能否支持WebGL可视化?三维数据呈现设想

LobeChat能否支持WebGL可视化&#xff1f;三维数据呈现设想 在AI助手逐渐从“问答工具”演变为“智能工作台”的今天&#xff0c;用户不再满足于冷冰冰的文字回复。工程师想看神经网络的拓扑结构&#xff0c;科研人员需要直观展示分子空间构型&#xff0c;设计师希望实时预览3D…

作者头像 李华
网站建设 2026/4/15 22:24:13

Fail2Ban 一键部署 + 管理脚本(可直接执行)

将以下内容保存为 fail2ban_setup.sh&#xff0c;执行 sudo bash fail2ban_setup.sh 即可完成「配置 Web 界面 常用命令封装」&#xff0c;无需手动敲命令&#xff01;bash运行#!/bin/bash # Fail2Ban 一键部署脚本&#xff08;适配 Ubuntu 20.04/22.04&#xff09; # 作者&a…

作者头像 李华
网站建设 2026/4/2 5:01:22

软件工程与系统,容器,进程,架构,组织,结构和部署的关系概论

考虑软件工程作为一个学科&#xff0c;它涉及软件开发的整个生命周期。在这个生命周期中&#xff0c;系统、容器、进程、架构、组织、结构和部署是不同层次和阶段的关键概念。下面将详细阐述它们之间的关系&#xff0c;以及它们的核心机制和原理&#xff0c;并举例说明。 系统&…

作者头像 李华