文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

CTFSHOW 年CTF(web部分)

2023-09-05 17:10

关注

除夕

科学计数法绕过
payload
?year=202.2e1

初三

考的变量覆盖。
首先来看下这个函数

$_=function($__,$___){    return $__==$___?$___:$__;};

作用比较明显,接收两个参数,如果两个参数弱相等则返回第二个参数,否则返回第一个参数。
接着往下看

$$__($_($_GET{    $___}[$____]{    $_____}(),$flag));

先来看里面的这一部分

$_($_GET{    $___}[$____]{    $_____}(),$flag)

其实就是调用了刚才说的自定义函数,他的第一个参数是

$_GET{    $___}[$____]{    $_____}()

第二个参数是$flag
那么如果第一个参数整体可控的话让他弱等于$flag就可以了。
不过这只是返回值,没有回显的。
所以我们可以让最外层的$$__是个可打印的函数,比如var_dump
所以可以确定的是__=z&z=var_dump
再看里面的应该怎么传,$_GET{$___}[$____]{$_____}
中括号花括号一样的用法,简化下$_GET[$___][$____][$_____]
其实就是个三维数组嘛,可以直接传
x[b][c]=phpinfo&___=x&____=b&_____=c
这样最终$_GET[$___][$____][$_____]的值就是phpinfo。
为啥选phpinfo呢,以为phpinfo的返回值是true。
所以最终payload
?__=z&z=var_dump&x[b][c]=phpinfo&___=x&____=b&_____=c

初六

先来看最终利用点

    function __get($arg){        global $flag;        $arg="get".$arg;        $this->$arg = $flag;        return $this->secret;    }

在这个地方
$flag给了$this->$arg,并且同时触发了__set魔术方法

    function __set($arg,$argv){        $this->secret=base64_encode($arg.$argv);            }

在__set魔术方法中 $arg就是get,$argv就是$flag
最终将secret的值和flag联系了起来。
所以现在的目的就是怎么进get。
我们知道要触发这个魔术方法,要么是调用不存在的属性,要么调用私有变量。
很明显需要进入invoke,而invoke需要把对象当作函数处理。
可以看到在__call魔术方法中的$this->key我们是可控的,只要赋值成当前对象就可以了。
然后想触发__call就得调用不存在的函数,就需要进__toString魔术方法,里面有个$this->secret()
想进__toString就得把对象当作字符串处理,在createSecret中存在变量的拼接。而createSecret又是在getSecret中调用的。
所以整条链就完整了。
payload

 class happy2year{        private $secret;        private $key;        function __construct(){                $this->key=$this;        }}echo urlencode(serialize(new happy2year()));

实际上payload很简单,但是整个过程比较复杂,还是比较有意思的一道题。

来源地址:https://blog.csdn.net/miuzzx/article/details/128787159

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯