session存页面相关的问题_CTFweb类型(二十四)session序列化相关问题及例题、以及phar序列化的讲解...

本文探讨了PHP中session的存储方式,包括正常键值对形式和php_serialize处理方式,强调了不同处理方式可能引发的安全问题。通过示例展示了如何利用php_serialize控制序列化过程实现反序列化攻击。同时提及了phar文件在特定情况下触发反序列化的风险,并给出了官方手册中关于phar文件反序列化利用的说明。
摘要由CSDN通过智能技术生成
3338b43e3737fd18c71b6aff1b4ed786.gif

点击上方蓝色字体,关注我们

PHP session序列化及反序列化处理器

 feeeceff97a6e77553e7bf6ed59ebf9f.png

在php中存储session时存储的数据结结构是有区别的,正常情况下,session是以键值对的形式存在。

8bcabb22871d3de7ecf4c4357f06feb5.png

demo

这里设置处理方式是php的,它会去存储一个session,开一个标签,session是存储在temp目录里,一个session及它存储位置是怎么判断呢?来看这个phpinfo.php,session发现存储的位置:

db9834c431fcd89a6a6e90076890e08a.png

然后去访问一个E,传递一个值a=123:

33075f6d6811faaebfc3f79d9285edc9.png

78a8eeb1614877070e9fd195551fcac6.png

那么它这里就会生成一个session的文件,里面保存了一个session可以看到session的值:

72dde158adb5ae32ec255628e2f3ccfa.png

cb17086cac041b885fb7248a731ef539.gif可以肯定是在序列化之后生成的序列,读取session过程中会触发一个反序列化。反序列化的数据来源是session中存在的文件。序列化生成的序列是由session放进去的,反序列化也是一样的,好像并没有什么办法去操纵他。继续往下看。这里我们用的是php的处理方式php_serialize,然后我们再看第2个php_serialize,如果说在这里的时候,我们就对他传入一个session,我这里换成一个2,去传一下,我们再去看session文件,比如a等于123传进去,如果是php的话,它会键名+竖线+经过serialize()函数反序列生成的序列。 d73c9a8ba0cd293e9c8d937e9204651c.gif

2906d29ffcd1b3c16a49df54157f60e2.png

接下来php_serialize再来传一下,它的session结构不一样了,这个的话刚好一个直接序列化之前的内容,序列化生成的序列直接放在里面,二者会有区别。

f002677a5faf2489e6ae60669b974981.png

如果说序列是一个反序列化,那么在读取群里直接把序列做一个反序列化。如果你是php的处理方式,可以直接读取session的内容,以竖线作为分隔符,把竖线后面的内容拿来做一个反序列化,所以会有这样的一个效果同时也可能会引发配置问题,在这次session初始化设置中设置处理方式,可以知道它是在什么情况下去实现的。配置

db6b2eb557328561439f48e71147ec5d.png

类似题目特征也是非常明显的,后面我们也会拿一道例题来讲一下,用这个参数去设置php的处理方式。

安全问题

b1f2b719eb2367ba079d32db44b1107a.png

 如果用php_serialize是直接把整个序列化之后的字符串放在里面的。如果在两个文件中用不同的方式去处理对应的session,那么它就有可能造成一个安全问题。

abc5edf58e1065c01712044597b04551.png

2bc0b03dccbf8638bc21f4a111b15320.gif

使用php会生成一个竖线,它就是一个序列那么其实你在这里看到的时候,只要能控制里面的序列,就能让它实现一个反序列化的影响,但是实际上不管任何一种,进去的序列和出来的序列其实都是同一个序列,是没有办法去实现一个控制的。

如果说存在两种方式,就是一次一整套文件中都存在两个文件,这两个文件对session的处理方式是不一样的,那么就有可乘之机。为什么这样说?

87ec47e88e0c425eb3ecadd267cf0c45.png

29684492a88966e182ccf356953844e4.gif

可以理解一下,就当存储的时候是php_serialize处理的,在调用php去处理,那么这时候一开始我们去注入的数据就是一个比如说是A等于一个竖线,那么接下来它生成的需求就会变成这样子。

然后再对应到用php去处理时,就会把后面这个东西作为一个序列去读取出来,然后对这个字符串做一个反序列化,这个到时候其实我们就已经实现了可控的序列,不再局限于session生成的格式序列,此时就可以对它实现一个反序列化的攻击。这就是一个session的demo,这个地方,通过php_serialize去传入一个序列。

8fe3d7b48db7e410446166da204aa714.png

最初我们先传一个A会生成一个session,session中肯定是存在竖线,这个序列中一定要包含一个竖线,那么对内利用的class是不是就是这个class生成一个反序列化的序列,去定义一个变量,然后去给他的内容去改变一下。

9c6d36797b59911a298ec42d2fca2319.png

ae24617aa2bbf6558b01659920b424fb.gif在我们去执行一下,就会有这个序列,我们就把序列给传进去。这个序列的话,我们传进去的时候,一个竖线我们去执行一下,生成一个session,我们就可以看接下来我去对做存取出来的时候,我再去访问,这个地方其实它是有选项配置的。

f375cd10003e242a3433e8b62071680f.png

cf4957dccd0f405457f084d194820695.png

781311a1cbf42ffd66b223f96bc3fddc.png

一道16年的CTF题目 80df284fe41db22b37335b83cb23942d.gif

71cb98eb91dbacaed44162f785d1bf1f.png

这是道反序列化的题目,去访问时会存一个session,以php的方式处理会存在一个竖线(在index中它的处理方式是php),保存的session是存在一个竖线加序列,存入的是serialize的过程。

de571d1492a54d6a78dbc9fa6f96c22a.png你会发现像这个地方,我这个地方是这样操作的,但在phpinfo中,它又存在这样一个行为,Session_start这个位置是处理保存session的一个方式,它这个时候是phpserialize,对应过来在phpinfo这个页面中,所谓的php的方式就是所以他直接放了一个序列,那么其实对我们刚才讲的思路就非常简单,如果说你知道bug,你只要对这个页面通过访问页面去生成一个session,访问这个页面触发反序列化实现攻击,但是会有非常多的问题,例如因为session从我的请求中去读取参数保存进去,像现在会发现session都不可控没办法去操纵session,其实这个地方也是一个比较难的地方,但是之前讲文件包含的时候,讲到过一个情形,就是能够显示一个文件上传进度的过程。 de571d1492a54d6a78dbc9fa6f96c22a.png 85670609e8189af2548c845f8097ff86.png

8c7195f64c33153e3d368f56dce8db7d.png

2bc0b03dccbf8638bc21f4a111b15320.gifphpsession upload progress选上传进度参数默认开启,生成一个部分可控的session,我们这边也是用这种方式去生成一个session,还有一个问题就是这里开启了另外一个参数,方便演示session把它设置成clean up,不会去立马删掉文件上传进度的文件。

8998f1dc87c098b2658a39a3a680205b.png

这个页面当然就不是这个页面了,我去生成的是通过传这个页面,然后放出文件。

47b196340be3f04fe69a46363f1de6f1.png

先开个bp提到查询试一下,目前是没有文件的。直接传上去之后会生成一个session:

077051e240e2c185f3cc85ca57d60853.png

这个就是上传文件中的字段,说明了我们能够去控制session传入参数。

phar反序列化

c01eb273b2d26b9acbacad2d860359ef.png

在Blackhat2018有国外的安全研究院提出来的一种新型的攻击方式,主要是在实际中找到几个漏洞案例,但是这个漏洞在2017年的时候就有人提出来利用了。

ae24617aa2bbf6558b01659920b424fb.gif

实现文件包含时的一个利用,对它做一个反序列化,特点就是利用不需要用到unserialize的过程去做一个反序列化,就能够就做一个触发。

首先要有一个phar文件,那就是这段代码去可以生成一个phar的文件。

89c02cc4fee1634cf8989593aa2f9736.png

这边就会看到一个phar这文件拿来其实就是说可以看到它的16进制,你在这边就会看到反序列化之后的就序列化之后生成序列化串。

426f39edc734b7d63494ad6faab52ef9.png

这串东西在某些特定函数中去传入这个文件的话,它就会触发一个反序列化,这边的话他就给出了一些看起来好像没有无害的函数,examples of so far harmless looking code。

这边最主要是来给大家演示一下它的一个效果。

6b4215d3b791d9dccc9acd89ccb5ecfd.png

d4aa14e2a1e54a9953b5ce0d459f885c.png

在官方手册中也提到过phar文件对反序列化的利用,不需要unserialize函数去触发反序列化,但它同样与传统那种序列化的序列可以去反序列化。 

9b92f70460b278574e8b3197a9f163e1.png c72899199041172b2dea30031ec50d3c.gif戳”阅读原文“,我们一起进步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值