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

最近做专心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文件包含:

复制代码
 1 //All of these function:
 2 /*
 3     include()
 4     include_once()
 5     require()
 6     require_once()
 7 */
 8 <?php
 9     include($_GET["file"]);
10 ?>
11 //http://localhost/include.php?file=phpinfo.php
12 /*
13 Remote -> allow_url_include = 1 & allow_url_fopen = 1
14 //http://localhost/include.php?file=//http://localhost/phpphpinfo.php
15 */
16 //pgpinfo.txt:
17 <?php
18  phpinfo(); 
19 ?>
复制代码

4、JSP文件包含

复制代码
1 //分为静态和动态:
2 //静态
3 <%@include file="page.txt"%>
4 //动态:
5 <%String pages = request.getParameter("file") %>
6 <jsp:include page="<%=pages>"></jsp:include>
7 //http://localhost/include.jsp?file=xxx.jsp
复制代码

5、文件包含的利用:

  (1)读取敏感信息:

    #/etc/passwd

    #/etc/shadow

    #my.cnfphp.inihttpd.confaccess_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、对用户输入的特殊字符例如.和/以及进行过滤

博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:pigeon_code@163.com
原文地址:https://www.cnblogs.com/mutudou/p/15029660.html