【反序列化漏洞】session反序列化

  • A+
所属分类:安全文章

一、漏洞原理简介:

当php.ini配置文件中设置的"session.serialize_handler",与php后端页面中的"session.serialize_handler",设置不一致时,就有可能造成反序列化漏洞


例如:

php.ini配置文件中设置的"session.serialize_handler"为php_serialize,而在php后端程序中编写了如下代码进行设置:

ini_set('session.serialize_handler', 'php');




二、session反序列化漏洞实例

我们就由一题cft题来讲解session反序列化漏洞

题目地址:

http://web.jarvisoj.com:32784/index.php

【反序列化漏洞】session反序列化



源码分析:

根据源码可以得知通过GET方式传入phpinfo的值,当phpinfo有值就会实例化OowoO类,当类被实例化时会自动调用__construce()构造方法,在构造方法中对mdzz属性进行了赋值为phpinfo(),而当对象被销毁时会自动调用__destruct()方法,在此方法中利用eval()函数将字符串作为代码执行,所以会执行输出phpinfo相关信息。


从phpinfo中可以看到session.serialize_handler默认是php_serialize,而题目使用的是php,反序列化和序列化使用的处理器不同,由于格式的原因会导致数据无法正确反序列化,那么就可以通过构造伪造任意数据进行反序列化漏洞利用

【反序列化漏洞】session反序列化




因为题目中没有能操作$_SESSION的地方,所以可以利用php的upload_progress机制:

【反序列化漏洞】session反序列化



所以利用的思路为:

需要先构造上传文件的表单将请求提交到index.php中,然后表单中通过POST传入一个与session.upload_process.name相同的变量名,后端会自动将POST的这个同名变量作为键进行序列化然后存储到session文件中,下次请求就会自动反序列化session文件,从中取出这个键,触发payload




1、构造如下表单:

【反序列化漏洞】session反序列化



2、然后访问此表单,随便上传文件后利用burp抓包:

【反序列化漏洞】session反序列化



3、然后我们可以构造序列化payload:

修改mdzz属性的是为payload即可,由于题目环境开启了disable_funtions,所以这里利用如下函数进行列目录:

<?phpsession_start();
class OowoO{ public $mdzz="print_r(scandir(dirname(__FILE__)));";}$obj = new OowoO();echo serialize($obj);?>


执行并获取序列化后的内容:

【反序列化漏洞】session反序列化



为防止双引号被转义,在双引号前加上反斜杠:

|O:5:"OowoO":1:{s:4:"mdzz";s:36:"print_r(scandir(dirname(__FILE__)));";}


除此之外还要加上" | ",因为php处理器的存储格式如下:


【反序列化漏洞】session反序列化



然后将序列化的内容替换上传文件请求包中的filename字段,发包后可以看到当前目录内容:

【反序列化漏洞】session反序列化



目录已经被列出来了,接下来就是找flag,在目录中发现一个疑似flag文件的命名,所以我们可以通过获取index.php文件的绝对路径,从而获取相同目录下flag文件的绝对路径,从而读取其中flag的内容:

【反序列化漏洞】session反序列化



通过网站根目录可以得出绝对路径就是:

/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php



然后可以通过file_get_contents()获取flag文件内容:

|O:5:"OowoO":1:{s:4:"mdzz";s:88:"print_r(file_get_contents("/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php"));";}

【反序列化漏洞】session反序列化




☆ END ☆

点个赞和在看吧,欢迎转发!

【反序列化漏洞】session反序列化



相关推荐: 【红蓝对抗】内网不出网机器上线CobaltStrike

场景提出已渗透至内网,获取到DMZ区出网机器CS权限发现内网不出网(此时又分为两种情况:1、内网和DMZ区互通;2、DMZ可通内网但内网不通DMZ),根据以上叙述可以简单搭建测试环境。给出简单拓扑:C2服务器:123.56.108.135跳板机(双网卡):19…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: