首页 > 其他分享 >文件包含,文件上传笔记

文件包含,文件上传笔记

时间:2023-04-09 21:31:43浏览次数:34  
标签:文件 include url 笔记 allow php 上传 gj

get用来获取数据,post用来发送数据,get请求参数会放到url中,但是隐私性和安全性较差,且请求的数据长度有限,post请求没有长度限制,存放在body中。

文件包含漏洞定义:在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

危险函数:include(),include_once(),require(),require_once().

加highlight_file(__FILE__);才可在前端显示,否则就在后台执行

echo相当于C语言中的printf

例如:echo "XiXi $age $文件包含,文件上传笔记_服务器age和$height的值,<br>意思是换行。此时并未给$age和$height值,所以只会输出XiXi。

include "message.php";意思就是把message.php文件里的内容粘贴到此文件。在message.php中写入

$age=18;

$height=166cm;

此时再执行echo"XiXi $age $height<br>";则执行结果为XiXi 18 166cm

但是如果没有对message.php进行限制的话,可能造成文件被读取或者利用。

判断是否存在文件包含:查看/etc/passwd

ctf常见flag文件位置:flag、flag.txt、/flag、flag.php

PHP的一些伪协议:

file:// 访问本地文件系统,在CTF比赛中常用来读取本地文件

用法:file://[文件的绝对路径和文件名]

条件(php.ini):allow_url_fopen=off/on   on off都可

eg:http://www.example.com/index.php?file=file://D:/PhpStudy/WWW/flag.txt

php://协议

php://filter

                用法:读取网页源代码

                条件(php.ini) : allow_url_fopen=off/on

                                      allow_url_include=off/on on off都可

               ini无法获取的话,可以利用:(如果不是base64编码(特征是最后有                 ==),就会当成php执行,就看不到源码了)file=php://filter/read                 

=convert.base64-resource=index.php拿burp或hacker decode一                 下,就看见源码了。

php://input

                 用法:可以访问请求的原始数据的只读流,将post请求中的数据                     作为PHP代码执行

                  条件(php.ini) : allow_url_fopen=off/on

                                        allow_url_include=on

                                        只要include开启,就可以当成php代码执行

data://协议

                将php代码使用data://协议发送执行

                data://text/plain;base64;PD9waHAgc3lzdGVtKCJkaXliKTsgPz4=

                条件:allow_url_fopen, allow_url_include=on

while(strstr($page,"php://)){    //检查page变量中是否含有字符串"php://"

$page=str_replace("php://","",$page);//将page变量中的"php://"用空字符代替

}(但协议不区分大小写,我们可以用"Php://"绕过)

文件上传漏洞

概述:

文件上传漏洞是指Web服务器允许用户在没有充分验证文件名称、类型、内容或大小等内容的情况下将文件上传到其文件系统。未能正确执行这些限制可能意味着即使是基本的图像上传功能也可用于任意且具有潜在危险的文件。这甚至可以包括启用远程代码执行的服务器端脚本文件。

在某些情况下,上传文件的行为本身就足以造成损害。其他gj可能涉及对文件的后续HTTP请求,通常是为了触发服务器执行该文件

漏洞影响:

在最坏的情况下,文件的类型没有得到正确验证,服务器配置允许某些类型的文件(例如.php和.jsp)作为代码执行。在这种情况下,gj者可能会上传一个充当Web shell的服务器端代码文件,从而有效地授予他们对服务器的完全控制权。

如果文件名没有得到正确验证,这可能允许gj者通过上传同名文件来覆盖关键文件。如果服务器也容易受到目录遍历的gj,这可能意味着gj者甚至可以将文件上传到意外位置。

未能确保文件大小在预期阈值范围内还可能导致某种形式的拒绝服务(Dos)gj,gj者借此填满可用的磁盘空间

一句话mua:就是只需要一行代码的mua,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话mua出现了无数种变形,但其本质是不变的:mua的函数执行了我们发送的命令。

常见的:<?php@eval($_GET['shell']);?>

eval函数用于执行php代码,参数为字符串(即需要执行的代码)

$_POST[]即取post请求的data参数的值

用到的工具:中国菜刀,蚁剑,冰蝎......

前端js校验

绕过方法:上传的文件改为允许的后缀绕过js检测后再抓包,把后缀名改为可执行文件。

MIME头检测

检测:Content-Type

绕过方法:更改Content-Type为允许的即可

文件头绕过

GIF:47 49 46 38 39 61

png:89 50 4E 47 0D 0A 1A 0A                      十六进制

JPG:FF DB FF E0 00 10 4A 46 49 46

.htaccess文件绕过

在文件里写入:

<FilesMatch "123.jpg">

SetHandler application/x-httpd-php

</FilesMatch>

或者AddType application/x-httpd-php.jpg

使123.jpg文件可以被当作php代码执行。

标签:文件,include,url,笔记,allow,php,上传,gj
From: https://blog.51cto.com/u_16036037/6179235

相关文章

  • 协同文档:OT与CRDT实现协同编辑笔记
    讲协同编辑,先回顾下从BBS、邮件,到IM信息的异步传播信息的生产和消费异步发生。典型的场景如论坛,博客,文档库,邮件。我在写这篇文档的时候,你们看不到。你们看的时候,我早已写完。异步场景下,信息的生产者会谨慎的推敲措辞,以确保自己的意思被准确的传达。表达方式的丰富性很重要,除了......
  • .NET Core 离线 生成 Tron 波场私钥和地址笔记
    NuGet引入依赖库PM>Install-PackageTron.Wallet.Net随机生成私钥和对应的地址usingTron.Wallet.Net;namespaceConsoleApp1{internalclassProgram{staticasyncTaskMain(string[]args){vartronECKey=TronECKey.GenerateKey(TronN......
  • AMBA总线(3)—— AHB学习笔记
    前面学习APB总线时,由于内容不多就直接将APB4手册翻译了下。到了AHB总线再这样学习就不好了,一是逐句翻译太累人,二是原文翻译过来划不清重点。因此APB总线以学习笔记的形式记录下来,但其实大多数也就是手册的翻译和理解。1AHB特点AHB协议相比APB协议更加复杂,性能更加优越,手册上也......
  • 【 2023 】近期一些编译调试开发 Android7&9 系统的笔记( h616 / imx8m / rk3399 )
    主要就记录一下自己食用过程中遇到的一些问题吧,板子有新有旧,但都差不多。待整理呢。https://stackoverflow.com/questions/67363030/rebuild-android-code-with-error-ssl-error-when-connecting-to-the-jack-server-thttps://note.qidong.name/2017/07/disable-jack-server/......
  • Django笔记二十之手动编写migration文件
    本文首发于公众号:Hunter后端原文链接:Django笔记二十之手动编写migration文件前面介绍过,migration文件主要记录的是Django系统model的变化,然后通过migrate命令将变化适配到数据库中。比如在某个application下新增了某张表,或者对某张表更改了字段,可以生成migration......
  • C盘爆满的解决方法,不用删除文件,使用分区助手无损增加内存
    一、分区助手傲梅科技对于我们C盘内存不足的来说,老师推荐的yyds。我的内存C盘历史最低是900多M,1.5G还是多的,经过我不断的删除文件,发现没什么用,电脑用久了C盘文件占内存自然就多了!!改变不了!!所以方法是用其他盘的内存移到C盘。一分钟解决。下载完直接看使用步骤二、下载1.1、......
  • C# WinForm操作配置文件AppSettings获取、增加、删除、修改
    在C#WinForm开发中,如果想要修改AppSettings中的值,发现用下面这个代码并没有成功。ConfigurationManager.AppSettings.Set(key,value);//修改值,但是没有成功下面提供可以用的获取、增加、删除、修改appSettings的方法。publicclassWinConfigHelper{///<summary>......
  • 物理学习笔记
    圆锥曲线&万有引力能量式:\(E=\frac{1}{2}mv^2-G\frac{Mm}{r}\)椭圆数学相关\(e∈(0,1)\)\(S=πab\)第一定义:到定点的距离和为定值第二定义:\(e=\frac{动点到定点}{动点到定直线}\),其中定点为焦点,定直线为准线\(x=±\frac{a^2}{c}\)。参数方程:\(\begin{cases}x=acos......
  • sqlite数据库在close()之后任然不能释放与db文件的连接
    conn.Close();conn.Dispose();在close和dispose后,必须要加上以下两句代码,让垃圾回收机制启动,否则仍不能释放与db文件的连接GC.Collect();GC.WaitForPendingFinalizers();......
  • Linux文件与文件夹操作
    创建文件夹/文件mkdir通过mkdir命令可以创建新的目录(文件夹)。语法:mkdir[-p][Linux路径]参数必填,表示Linux路径,即要创建的文件夹的路径,相对或绝对路径即可。-p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录。如果想要一次性创建多个层级的目录,会报错,因......