文章目录
一,定义
文件上传漏洞是指用户上传了可执行的恶意脚本文件,并通过此脚本获得了控制服务器端的能力。
(1)文件上传漏洞的一般问题
- ①上传文件是web脚本语言,服务器的web容器解释并执行了这个恶意脚本,攻击者获得webshell
- ②上传文件是木马,病毒文件,诱骗用户或管理员下载执行
- ③上传钓鱼文件
(2)webshell
- ①恶意脚本文件
- ②也可以称为网页后门
- ③功能强大,比如查看服务器目录文件,执行系统命令等
二,常用的绕过姿势
(1)JS检测绕过(前端检测)
如果上传的文件的后缀不被允许,前端JS检测不合格,弹窗
【JS源码分析】
-
selectFile()
函数 --> 获取后缀 --> 判断 --> 不合法弹窗
【如何判断】
- 上传.php文件,只弹窗,不发包。☞证明为前端检测
【如何绕过】
- 使用浏览器插件,删除检测文件后缀的JS代码
- 修改恶意脚本的后缀为允许的后缀,JS检测后发包,用抓包工具抓包改后缀。
(2)文件后缀绕过
服务器端代码限制某些后缀不允许上传。
利用容器的解析漏洞绕过上传。
【源码分析】
pathinfo() --> 得到后缀 --> 判断合法
【绕过方法】
- ①大写绕过(eg:.PHp)
- ②找到黑名单扩展的漏网之鱼(eg:phtml,php3,php4…)
(3) content-type文件类型绕过
【原理】
后端通过前端http request包中的content-type判断文件类型,通过抓包修改。
【【实列】】
①只能上规定的图片格式
②burp抓包修改content-type
③发包
④查看源码分析
(4) 图片马原理
在php中存在相似文件的上传漏洞,PHP函数getimagesize()
可以获取图片的长,宽,高等信息。
通过该函数判断是否为图片,若不是,不允许上传。
制作图片马,将webshell的代码追加到图片文件中上传绕过
利用图片马的前提:
Apache 的 conf 里添加一行配置AddType application/x-httpd-php .png
- 目的:png格式的文件也能运行php程序
【源码分析】
(5)文件后缀截断绕过攻击
【原理】
- 截断类型:PHP的
%00
截断- 原理:截断符将后面的所有字符删
- 条件: PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
文件名XXX.PHP%00.png
通过截断的操作文件名为XXX.php
实验环境:php版本为5.2.17
①先上传.php测试
②添加%00.png再次上传测试
③通过URL访问这个文件
- 由于%00截断作用,文件变为phpinfo.php
- 注意:由于URL编码问题,要将
%
-->%25
(6)文件头部内容验证绕过
【检验原理】
- 后端通过上传文件的头部标识来识别文件类型
.【绕过思路】
- 在一句话马文件的前面添加允许文件格式的头部
(7)配合文件包含漏洞绕
【应用环境】
- WAF或者后端在当文件后缀为php时,检测文件内容
- 站点存在文件包含漏洞时
【绕过思路】
分离
- 1. 当允许php文件上传,不过会检测危险函数内容时
- ①先上传
<?php include(XXX.txt) ?>
的A.php- ②上传木马后缀且命名为 XXX.txt
- ③访问A.php
- 2.当站点存在文件包含漏洞时
- ①将php文件的后缀修改为.png;并上传
- ②访问尝试,无法执行
- ③利用文件包含漏洞执行php代码
(8)配合服务器解析漏洞绕过
apache的从右往左
…
(9)利用配置错误绕过
当apache的配置文件中有如下时
AddType application/x-httpd-php . png
------文件后缀为png的文件可以以php方式执行
.AddHandler php5-script .php
------只要文件名包含php,就会当中php文件执行
(10)黑名单防护时配合.htaccess
文件绕过
条件
- httpd.conf中的设置允许读取.htaccess文件中的配置指令
【exp】
①抓包修改为.htaccess
.
②在httpd.conf没有设置AddType application/x-httpd-php . png
的前提下依然可以执行图片马等文件
.
③若override None
或者管理员发现删除了.htaccess
文件
三,文件上传的防护
-
添加白名单判断文件的后缀是否合法
-
对上传的文件进行重命名
-
文件上传的目录设置为不可执行
-
使用随机数改写文件名和路径,使得攻击者无法访问