服务端漏洞——文件上传

203 阅读2分钟

本文已参与 「新人创作礼」 活动,一起开启掘金创作之路。

在php网站中,默认会将以php结尾的文件解析为PHP代码。

文件上传

  1. 尝试上传webshell

  2. 判断验证逻辑

  3. 绕过验证逻辑

  4. 验证是否上传成功

  5. 利用webshell

    a.手动操作(构造post包,传递代码)

    b.利用工具:蚁剑

上传绕过方式:

  1. 前端验证绕过

    a.重写js,使其验证无效(直接修改返回值为永真or假)

  2. 修改Content-Type

    b.一般都是,将木马后缀.php改为.jpg,绕过前端验证再抓包修改jpg为php。

  3. 中间件解析漏洞(iis/apache低版本)

    apache解析漏洞 1>多后缀名,从右到左依次查看是否可以解析 2>罕见后缀解析 3>.htaccess文件 iss解析漏洞 1>iis6的文件名会被;截断 2>iis6中会导致将*.asp为后缀的目录中的文件当作asp文件执行 这两个漏洞需要服务器本身确实有这样的文件或文件夹,若只是通过web应用映射出来的url则无法触发 3>iis支持put方法,move方法修改文件后缀 攻击步骤:通过OPTIONS探测服务器信息 上传文本文件 通过MOVE方法改名

  4. 后缀绕过(php2,php3,php5,phtml等可以解析的文件)

  5. .htaccess绕过(解析文件。强制将jpg解析为php)

  6. php<=5.3 %00截断(a.php%00.jpg)

  7. 大小写绕过


1.文件上传原理分析 (1)文件上传方式有很多,但底层的实现都是文件的读写操作(I/O读写)

文件上传的必要前提 1) 提供form表单、method必须是post 2) form表单的entype必须是multipart/form-data 3) 提供input type=“file”类的上传输入域

(2)文件上传到本地服务器的缺点:

  1. 当服务器重启,本地服务的文件没了

  2. 搭建服务器集群:A服务器1000, B服务器......... 客户第一次上传时访问的是A服务器。 客户第二次访问文件,访问的是B服务器

(3)如何解决本地服务器上传的缺点:

(1)自己搭建一个文件服务器;不会重启,维护

(2) 使用第三方的文件服务器