天天看点

http路径转file会变成反斜杠_PHP session反序列化漏洞

最近有点忙,有空学习一下 感觉似懂非懂,今晚来刷个题,验证一下我的一些想法

入口:http://web.jarvisoj.com:32784/index.php?

是一个反序列化的题,源码中

http路径转file会变成反斜杠_PHP session反序列化漏洞

只是判断是否set了phpinfo 如果有就输出phpinfo,所以说这是关于session的题

session反序列化漏洞的原理网上有,总结一下就是两次处理会话的session引擎不同,一个是php 一个是php serialize,而session_start()函数的定义如下:

http路径转file会变成反斜杠_PHP session反序列化漏洞

就是如果存在现有会话,就重用,而重用的方式是从默认的session存储文件里将数据反序列化得出,如果存储使用php serialize 而反序列化取回数据用的是php 那这就导致了问题

接着题目讲,题目中没有给出写入session 的方法,这就很尴尬了。。看了前辈的wp ,原来有个叫session 上传进度的东西

http路径转file会变成反斜杠_PHP session反序列化漏洞

当PHP检测到同名post请求 就会再$_SESSION中添加一条数据 看来就是用这个来写session的

那就搞一个文件上传的同时再post一个请求:

http路径转file会变成反斜杠_PHP session反序列化漏洞

将filename 改成 poc

http路径转file会变成反斜杠_PHP session反序列化漏洞

poc 得到

,得到当前目录信息

http路径转file会变成反斜杠_PHP session反序列化漏洞

这里为什么改filename的值,不改其他的值,开始我也不太懂 后来查了PHP手册,

http路径转file会变成反斜杠_PHP session反序列化漏洞
http路径转file会变成反斜杠_PHP session反序列化漏洞

例子中上传的是两个文件,如果一个文件的化,就能看出了,filename的键值对被写进入了 所以这里修改的是filename的值

再说下这个poc ,查看phpinfo得知

http路径转file会变成反斜杠_PHP session反序列化漏洞

前面是local 后面是master

一开始上传session那个地方是使用php_serialize的,后来执行php的脚本,就变成了php的引擎 ,再重用上传的会话,用php引擎反序列化后,就会导致了问题 ,这是我的理解

讲下poc ,就是php_serialize引擎在处理session时会识别 | 这个字符,但是php引擎则会把 |

当成键值对的分隔符,所以用phpserialize处理过的session来给php反序列,就会得到问题,具体在这里体现就是实例化了一个类,完了又自动调用__destruct,,具体原理可以百度,很多前辈都写了

|O:5:"OowoO":1:{s:4:"mdzz";s:36:"print_r(scandir(dirname(__FILE__)));";} (为了防止"被转义 加了)

这个 | 后面,用php引擎解释实际上就是

new OowoO()

,print_r(scandir(dirname(__FILE__)))就是mdzz 玛德智障吗 哈哈 为什么不用system ,因为disable了

http路径转file会变成反斜杠_PHP session反序列化漏洞

后面还有,没截到

查到了当前目录的flag文件,接下来就是换命令了,当前目录在哪

http路径转file会变成反斜杠_PHP session反序列化漏洞

当前目录

整个流程补完

http路径转file会变成反斜杠_PHP session反序列化漏洞
http路径转file会变成反斜杠_PHP session反序列化漏洞

在如何写入session 和调用session 那地方感觉还是一知半解,总结就是抠脚