i春秋 afr3 任意文件读取 SSTI flask模板注入 session伪造 详细题解

本文围绕一道CTF题目展开,涉及Linux系统/proc目录、Python Flask框架模板注入和session伪造等知识点。解题过程包括利用/proc目录查看进程,分析代码发现模板注入漏洞,构造注入语句并加密,最后通过burp改包实现session伪造获取flag。

---------------------------------------------------------------------------------------------------------------------------------

这道题考察的范围挺广的,对于我这样的新手很不友好,那些知识也不是一时半会就能够学完的,

我也是搞了好几天,才理解思路和相关细节。

但其实对于这道题来说,只需要从那几个知识面中,了解几个'支点'就能做出。

又回到那句话,做题扩充各种知识点,比从0到1的学,能更快的建立知识体系。

大致看完需要10分钟。

---------------------------------------------------------------------------------------------------------------------------------

目录

知识点(点击标题可查看更为详细的内容,看了不懂也没关系,直接看我的说人话环节)

Linux系统 /porc目录

python flask框架 模板注入

session 伪造

题目

解题过程

总结步骤(思路)

觉得有点难点这里


知识点(点击标题可查看更为详细的内容,看了不懂也没关系,直接看我的说人话环节)

Linux系统 /porc目录

proc — 一个虚拟文件系统 
/proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。

/proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息

下面是一些重要 的文件:

/proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等) 
/proc/meminfo - 物理内存、交换空间等的信息 
/proc/mounts - 已加载的文件系统的列表 
/proc/devices - 可用设备的列表 
/proc/filesystems - 被支持的文件系统 
/proc/modules - 已加载的模块 
/proc/version - 内核版本 
/proc/cmdline - 系统启动时输入的内核命令行参数

说人话环节:利用这个xxx文件系统,可以读取一些相关的文件,进程等信息。

这里我们需要用到的只有这一条

/proc/[PID]/cmdline                                          # 可能包含有用的路径信息

PID是需要填写的进程号,当然我们不知道,但这里我们可以用self 来表示我们自己现在正在用的进程。这里放出我们要用到的payload。

article?name=../../../proc/self/cmdline

其中../../../ 是我们要用到的目录穿越漏洞,在afr1中我们用到过,这里就不叙述了(不会的可以看我的afr2文章)。当然这里必须要三个以上的../,其实多几个也无所谓的(亲测)。

python flask框架 模板注入

       首先我们先讲解下什么是模板引擎,为什么需要模板,模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这大大提升了开发效率,良好的设计也使得代码重用变得更加容易。但是往往新的开发都会导致一些安全问题,虽然模板引擎会提供沙箱机制,但同样存在沙箱逃逸技术来绕过。

模板只是一种提供给程序来解析的一种语法,换句话说,模板是用于从数据(变量)到实际的视觉表现(HTML代码)这项工作的一种实现手段,而这种手段不论在前端还是后端都有应用。

通俗点理解:拿到数据,塞到模板里,然后让渲染引擎将赛进去的东西生成 html 的文本,返回给浏览器,这样做的好处展示数据快,大大提升效率。

后端渲染:浏览器会直接接收到经过服务器计算之后的呈现给用户的最终的HTML字符串,计算就是服务器后端经过解析服务器端的模板来完成的,后端渲染的好处是对前端浏览器的压力较小,主要任务在服务器端就已经完成。

前端渲染:前端渲染相反,是浏览器从服务器得到信息,可能是json等数据包封装的数据,也可能是html代码,他都是由浏览器前端来解析渲染成html的人们可视化的代码而呈现在用户面前,好处是对于服务器后端压力较小,主要渲染在用户的客户端完成。

说人话环节:这道题是后端渲染,我们输入的数据会被服务器执行,所以就能构造一些命令执行等危险代码。(当然,要理解我们的代码是怎么被执行的,需要多理解理解,我也是搞了好几天)

session 伪造

先介绍一下session:

session机制采用的是在服务器端保持 HTTP 状态信息的方案。为了加速session的读取和存储,web服务器中会开辟一块内存用来保存服务器端所有的session,每个session都会有一个唯一标识sessionid,根据客户端传过来的jsessionid(cookie中),找到对应的服务器端的session。为了防止服务器端的session过多导致内存溢出,web服务器默认会给每个session设置一个有效期,      (30分钟)若有效期内客户端没有访问过该session,服务器就认为该客户端已离线并删除该session。

当用户发送一个请求到服务器端时,服务器会先检查请求中是否含有sessionid(存在cookie中或者在url中),

如果不存在sessionid(说明是第一次请求),就会为该请求用户创建一个session对象,并将该session对象的sessionid(放到响应头的set-cookie中,格式set-cookie:sessionid,下次再请求时cookie中就会有一个name为jsessionid的cookie,value就是sessionid)响应给客户端。

这里就没有说人话环节了:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值