文件上传漏洞 知识
定义
⽂件上传漏洞是指由于程序员未对上传的⽂件进⾏严格的验证和过滤,⽽导致的⽤户可以越过其本身权限向服务器上传可执⾏的动态脚本⽂件。如果过滤不严格,恶意⽤户利⽤⽂件上传漏洞,上传 有害的可以执⾏脚本⽂件到服务器中, 可以获取服务器的权限,或进⼀步危害服务器。
这个恶意脚本文件,又被称为webshell。
文件上传的过程
客户端
选择发送的⽂件->服务器接收->⽹站程序判断->临时⽂件->移动到指定的路径;
服务器
接收的资源程序
文件上传绕过技术
环境准备
安装2018的phpstudy
将upload-labs文件夹添加到phpstudy下载文件夹下面的\PHPTutorial\WWW之中
借助现有的rsec文件夹中的文件,作为上传的文件
如下图,启动phpstudy

进入http://localhost/upload-labs/网址,如下图示。

Pass-01 绕过前端 js 检测上传
原理
在⽂件上传时,⽤户选择⽂件时,或者提交时,有些⽹站会对前端⽂件名进⾏验证,⼀般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示⽂字。此时数据包并没有提交到服务器,只是在客户端通过 js ⽂件进⾏校验,验证不通过则不会提交到服务器进⾏处理。
把恶意⽂件改成 js 允许上传的⽂件后缀,如 jpg、gif、png 等,再通过抓包⼯具(BurpSuite)抓取post 的数据包, 把后缀名改成可执⾏的脚本后缀如 php 、asp、jsp、net 等。即可绕过上传。
操作
借助现有的rsec文件夹中的文件,作为上传的文件。
BurpSuite关闭拦截请求,点击“Open Browser”按钮。使用打开的浏览器。进入http://localhost/upload-labs/网址。

点击Pass-01,选择一个rsec文件夹下面的一个文件。

开启拦截请求

点击上传文件,拦截到的信息如下图所示。

将rsec.jpg改为rsec.php

点击发送,直到没有代码显示。发送按钮见下图所示。然后关闭拦截请求。

回到浏览器。

右键点击打开图片,可以看到新页面如下图所示。

成功绕过检测。
Pass-02 绕过 contnet-type 检测上传
原理
有些上传模块,会对 http 的类型头进⾏检测,如果是图⽚类型,允许上传⽂件到服务器,否则返回上传失败。因为服务端是通过 content-type 判断类型,content-type 在客户端可被修改。则此⽂件上传也有可能被绕过的⻛险。
操作
类似于Pass-01。网站中点击Pass-02。选择要上传的文件(phpinfo.php)之后,使用BurpSuite开启拦截请求,点击上传拦截到的部分截图如下图所示。

修改Content-Type如下图所示。

操作类似Pass-01(点击发送,直到没有代码显示。发送按钮见下图所示。然后关闭拦截请求。)
右键点击上传的图片,选择使用新标签打开图片。跳转到新页面,成功绕过检测。
Pass-03 绕过⿊名单上传
原理
上传模块,有时候会写成⿊名单限制,在上传⽂件的时获取后缀名,再把后缀名与程序中⿊名单进⾏检测, 如果后缀名在⿊名单的列表内,⽂件将禁⽌⽂件上传。
操作
在不同的中间件中有特殊的情况,如果在 apache 可以开启 application/x-httpd-php 在AddType application/x-httpd-php .php .phtml .php3 后缀名为 phtml 、php3 均被解析成php 有的 apache 版本默认就会开启。上传⽬标中间件可⽀持的环境的语⾔脚本即可,如.phtml、php3。
点击phpstudy界面的其他选项菜单,打开配置文件->点开httpd-conf

将如下图选中行取消注释。AddType 指令的作⽤是在给定的⽂件扩展名与特定的内容类型之间建⽴映射。AddType指令在给定的⽂件扩展名与特定的内容类型之间建⽴映射关系。如下图所示,将.phtml映射为.php。


类似Pass-01拦截请求。并且修改后缀为.phtml。

成功绕过黑名单检测。如下图所示。

Pass-04 htaccess重写解析绕过上传
原理
在 htaccess ⾥写⼊ SetHandler application/x-httpd-php 则可以⽂件重写成 php ⽂件。要 htaccess 的规则⽣效 则需要在 apache 开启 rewrite 重写模块,因为 apache 是多数都开启这个模块,所以规则⼀般都⽣效。
操作
点击phpstudy界面的其他选项菜单,打开配置文件->点开httpd-conf。如下图所示取消注释。

如下图所示,选择文件.htaccess。

上传之后结果如下图所示。

Pass-05 ⼤⼩写绕过上传
原理
有的上传模块,后缀名采⽤⿊名单判断,但是没有对后缀名的⼤⼩写进⾏严格判断,导致可以更改后缀⼤⼩ 写可以被绕过。如 PHP、 Php、 phP、pHp。
操作
选择文件如下图所示。
![[P5O1.png]]
上传rsec5.jpg抓包后修改⽂件名为 rsec5.PhP,如下图所示。
![[P5O2.png]]
新标签打开图片如下图所示。
![[P5O3.png]]
Pass-06 空格绕过上传攻击
原理
某些操作系统,如Windows,在处理文件名时会自动去除文件名末尾的空格或点号。攻击者可以上传一个文件名以空格结尾的文件,如shell.php (注意文件名末尾有一个空格),服务器可能会去除这个空格,从而将文件解析为.php文件,允许执行其中的脚本。
操作
选择rsec6.jpg文件。

上传rsec6.jpg,抓包在后缀名后添加空格。

绕过检测如下图所示。

Pass-07 利⽤windows系统特征绕过上传
原理
在 windows 中⽂件后缀名. 系统会⾃动忽略.所以 shell.php. 像 shell.php 的效果⼀样。所以可以在⽂件名后⾯加上.绕过。
操作
选择上传文件。

在拦截到的数据中修改如下,在文件名后面加上"." 。

成功绕过检测结果如下图所示。

Pass-08 NTFS 交换数据流::$DATA 绕过上传
原理
如果后缀名没有对::$DATA 进⾏判断,利⽤ windows 系统 NTFS 特征可以绕过上传。
操作
选择上传文件。

在拦截到的数据中修改如下 。

右键图片打开新标签是无法访问的。因为无法解析::$DATA

网址中去掉::$DATA,就可以访问网页了。

Pass-09 嵌套绕过.空格.
原理
发现⽂件保存时候⽤我们提供的⽂件名,然后过滤逻辑是先过滤.然后过滤空格,name我们.空格.进⾏绕过。
操作
选择上传文件。

在拦截到的数据中修改如下 。

成功绕过检测结果如下图所示。

Pass-10 双写后缀名绕过上传
原理
在上传模块,有的代码会把⿊名单的后缀名替换成空,例如 a.php 会把 php 替换成空,但是可以使⽤双写绕过例如 asaspp,pphphp,即可绕过上传。
操作
选择上传文件。

在拦截到的数据中修改如下 。

成功绕过检测结果如下图所示。

463

被折叠的 条评论
为什么被折叠?



