ora-02289: 序列不存在_CTFweb类型(二十四)session序列化相关问题及例题、以及phar序列化的讲解...

56a4c175cd51cc3e4961db571e561d12.gif

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

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

 ea1d5efd4de0f4a4543709076ccddc5d.png

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

d5cc62c78f876350de915f8febdd9d69.png

demo

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

0d8ee9bb13dbacbe55c06acf2784deef.png

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

3e82520da53f05d521dba573c46d39ad.png

acd3fe361fe1216f82536ba4d34a2516.png

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

a481a0e93c903c87ed3cc642fef30312.png

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

62f25b9e62b0babbf773e905c1eb97b5.png

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

c53c1627044bc4360bf9ef3e715204cc.png

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

6e314bf79df585028c2d2da55b9101d3.png

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

安全问题

360adb119164dc8aea5bccae5b767486.png

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

4e17da3318cec59ba4d929997bcff16f.png

c15253d59b5140fe461f3c12886c200a.gif

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

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

c9f5e867c5fdebba8c034e431316ec46.png

97dc751914bcb8fa70711a0dffb3e894.gif

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

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

77546b12c45e6ee07ef959733191c90e.png

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

fbb162b7e3de3e8684fe3a7bda9d3aa1.png

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

6de53cd792d92fa8c02fb311f2b5a347.png

84ab03cd03dee51dd8aaa46a9c447da3.png

fec592ecf209e25448339ac3dfd823d9.png

一道16年的CTF题目 2ac22642180eb8c48f0909e226708ded.gif

2786726e544fd0bf8a71e4b15c7dc6ac.png

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

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

ec314667a52b018d6375ff787c12db70.png

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

fa08df8cb72428755a17f23439bb03f8.png

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

1801c25d9d10d5b78d96525939c42416.png

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

861fe9ee0f5c976bc70374dcc4e6d9d0.png

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

phar反序列化

61db2f73bb9dc3b357ea61e2e7ecf0c6.png

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

1f1124f400345b24b2977649d7e9a726.gif

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

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

94b331c21342a74e58da47a9f2ddb699.png

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

7906b3980540f0b155475f87a721f224.png

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

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

00bea4a3cae4bf5e2bfc92c9aab165a7.png

ef5dcd31ffeb2a914b18281a1ce314f6.png

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

e60a6c394b7d71cb8aeb6b97d0b27ca8.png 74894c73ef2077a1b3cd2a5cd70c66c7.gif戳”阅读原文“,我们一起进步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值