零、前言

  最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件、底层安全、漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘。不是大神、博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限)。

一、文件上传:

1、这本身是一个功能,但是如果没做好,就成为一个大漏洞。本质:

  对上传文件没有进行类型检查,没有做进一步处理,上传文件保存路径泄露,且可访问可执行。

2、文件payload部分:

  文件:

  (1)一句话小马

  (2)大马

  (3)其他配置文件.htaccess   /   crossdomain.xml等

3、上传文件的方式:

  (1)直接上传

  (2)绕过前端扩展名限制上传(firebug)

  (3)绕过后端扩展名限制上传:

    #Apache的:1.php.rax.rax.rax。

    #lighttpd的:xx.jpg/xx.php。

    #IIS的:1.asp;abc.jpg,1.jpg%00.asp。

    #Nginx:1.jpg  访问的时候http://localhost/1.jpg/x.php 当版本低时,存在xx.jpg%00.php解析漏洞。

    #低版本IIS 会将/asp/目录下的所有文件都按照asp解析,或者webdav目录下上传.txt move 成.asp#

    其他手段:

       #截断 1.php%00.jpg。

       #转换大小写:1.PHP。

         #修改文件类型对抗检查content-type。

         #终极大招:使用copy a.gif /b + b.php /a c.php 构造包含恶意代码的正常类型文件。

4、防御:

  (1)接受文件使用临时路径,然后转存、文件名更换为随机字符串。

  (2)不泄露文件最终保存目录。

  (3)使用没有解析漏洞的高版本服务器。

  (4)严格限制上传扩展名--白名单机制。

  (5)做文件类型mime-type检查,对图像文件做二次渲染。

二、文件包含:

1、本质:

  当上传的文件不能直接被执行时,可以借助文件包含来搞定。什么是文件包含,其实就是编程中的文件或者包引入

2、分类:

  (1)本地文件包含

  (2)远程文件包含

3、PHP文件包含:

 //All of these function:
/*
include()
include_once()
require()
require_once()
*/
<?php
include($_GET["file"]);
?>
//http://localhost/include.php?file=phpinfo.php
/*
Remote -> allow_url_include = 1 & allow_url_fopen = 1
//http://localhost/include.php?file=//http://localhost/phpphpinfo.php
*/
//pgpinfo.txt:
<?php
phpinfo();
?>

4、JSP文件包含

 //分为静态和动态:
//静态
<%@include file="page.txt"%>
//动态:
<%String pages = request.getParameter("file") %>
<jsp:include page="<%=pages>"></jsp:include>
//http://localhost/include.jsp?file=xxx.jsp

5、文件包含的利用:

  (1)读取敏感信息:

    #/etc/passwd

    #/etc/shadow

    #my.cnf\php.ini\httpd.conf\access_log等等

  (2)远程包含shell小马(一句话)。

  (3)配合访问上传的文件。

  (4)使用封装协议,也就是说file参数后面可以是各种协议伪协议表示的文件。

  (5)绕过waf和防火墙。

6、防御:

  (1)包含文件白名单。

  (2)用户输入过滤掉. / \ 和伪协议关键词。

  (3)包含的文件不允许外部可控。

三、任意目录文件遍历:

1、原因:

  web服务器配置不当,导致可以访问到web根目录(www目录)以外的文件,应该是绝对禁止的。且web程序设计没有对访问的目录做检查和限制。

2、比较容易发生的位置:

  (1)下载类

  (2)图片等文件显示类

3、检测:

  (1)file = /etc/passwd 或者 C:/Users/

  (2)file = ../../../../../../../../../../../../etc/passwd

  (3)http://www.test.com/index/index.php/../../../../../../../../../etc/passwd

4、防御:

  1、配置不能访问WEB根目录之外的项目。

  2、对可以访问的文件放在一个资源文件夹下。

  3、对用户输入的特殊字符例如.和/以及\进行过滤

WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历的更多相关文章

  1. 微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载

    微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 1.不同类型文件的选取 1.1 常用的图片 视频 对于大部分开发者来说,需要上传的文件形式主要为图片,微信为此提供了接口. wx.ch ...

  2. 一个PHP文件搞定微信H5支付

     / 更新于 2018-07-02 / 8 条评论 过年期间也坚持要撸码啊接着给博客除草,在这个小除夕是情人节的一天,祝大家新年快乐,情人节能够顺利脱单~~~ 回归正题,这篇文章介绍一下微信H5支付, ...

  3. (一)React Ant Design Pro + .Net5 WebApi:先搞定服务器,顺手装个Nginx

    腾讯云搞定服务器,具体过程就不赘述了,文档都有,咨询客服或者自行百度,体验一下过程. 一. 服务器 1. 云服务器 cvm 1核2G centos8.0 2. 域名注册 www.homejok.com ...

  4. 《手把手教你》系列技巧篇(五十三)-java+ selenium自动化测试-上传文件-上篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  5. Web 在线文件管理器学习笔记与总结(19)上传文件

    dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...

  6. 基于vue+springboot+docker网站搭建【二】搞定服务器

    搞定服务器 双11在阿里云用家人的身份证注册账号,买了两台打折的服务器.2核4G一台3年799块:1核2G一台3年229块.机器配置如下图. 1.买的时候注意相同地区的相同可用区.比如我两台机器都选择 ...

  7. SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)

    读取Excale表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; ...

  8. 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程

    第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...

  9. 风炫安全web安全学习第三十六节课-15种上传漏洞讲解(一)

    风炫安全web安全学习第三十六节课 15种上传漏洞讲解(一) 文件上传漏洞 0x01 漏洞描述和原理 文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把 ...

随机推荐

  1. oozie中使用sqoop导入hive表时提示hive找不到

    根据出错信息是找不到hive的位置,所以想到的解决方法是: 在sqoop的workflow中添加job-xml,属性写hive-site.xml在hdfs上的位置. (fail) 直接配置一个hive ...

  2. Python写自己主动化之邮件发送(匿名)

    为了可以实现邮件发送功能.首先.我们须要了解一下邮件的发送过程是什么样子的,此处不再具体说明,请大家自行搜索或查看p=438">http://www.sogouqa.com/?p=43 ...

  3. nodejs 模块以及加载机制,主要讨论找不到模块的问题

    最主要的一个思想,加载模块无非就是找到模块在哪,只要清楚了模块的位置以及模块加载的逻辑那么找不到模块的问题就迎刃而解了.本文只是综合了自己所学的知识点进行总结,难免出现理解错误的地方,请见谅. nod ...

  4. R工具包

    直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和爬一些R的资料,看着看着就入迷了,这就是个大宝库了,以前怎么没发现,看来还是太狭隘了.直到前几天我看到这个 ...

  5. C语言 字面量

    在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation). 几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数.浮点数以及字符串: 而有很多也对布尔类 ...

  6. 统一建模语言 UML

    目录 统一建模语言 UML UML定义了5类10种模型图 一用例图用于建立需求模型 二静态图主要描述系统的静态表示和关系包括类图包图对象图 三行为图描述系统动态模型和对象组成的交换关系包括状态图和活动 ...

  7. TopK的一个简单实现

    转自:http://rangerwolf.iteye.com/blog/2119096 题外话: <Hadoop in Action> 是一本非常不错的交Hadoop的入门书,而且建议看英 ...

  8. 关于Cocos2d-x中音效重复播放问题的解决

    在做一些动作的时候,有时候只希望播放一次音效,但是触发音效的前提条件是要按着某个按钮,如果直接把播放音效的语句写在MOVED的case中,就会重复播放音效 解决方法就是把播放音效的语句写在BEGAN的 ...

  9. selenium定位方法(java实例)(二)

    从下图中可以看到selenium有三类定位元素的方法,一种是直接通过属性.标签以及链接来定位,一种是XPath方式,最后一种是CSS方式. 下表列举了元素定位的例子 selenium之页面元素定位方法 ...

  10. Ubuntu之Docker安装

    1.添加官方的GPG key到系统 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 2.添加D ...