- 什么是文件上传漏洞?
攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。
- webshell
非法用户可利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,称为WebShell,也可将WebShell脚本称为一种网页后门,WebShell脚本具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等
- 文件上传漏洞原理
程序员在开发任意文件上传功能时,未考虑文件格式后缀的合法性校验或者是否只在前端通过js进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。
- 文件上传漏洞的利用前提
- 应有文件上传功能
- 对上传文件类型检测有漏洞
- 或检测文件类型的逻辑有漏洞(如,先保存文件,在检测文件类型)
- 文件上传漏洞的防御
- 文件扩展名服务端白名单效验
- 文件内容服务端效验
- 上传文件重命名
- 隐藏上传文件路径
- 限制相关目录的执行权限,防范WebShell攻击
- 文件上传漏洞的分类
1.无限制:
直接用1.php放一句话木马上传
2.绕过前端:
【1】JavaScript绕过
浏览器设置中选择禁用javascript即可
【2】抓包修改
bp抓包后修改文件名
3.绕过服务端:
【1】黑名单绕过
如:不允许php,jsp文件上传,则使用1.php3,1.php5等上传
【2】白名单绕过
如:允许图片只允许jpg,则抓包改后缀改php为jpg
【3】MIME绕过
通过检查http包的Content-Type字段来判断上传文件是否合法,故把类型改成允许上传的格式即可
【4】文件头欺骗
如:只允许jpg上传,且文件头必须符合jpg格式。则使用含有jpg文件头的一句话马上传即可
【5】 解析漏洞
<1>Apache解析漏洞
<2>IIS解析漏洞
<3>Nginx解析漏洞
4.大小写绕过
如果禁止php文件上传,把文件名改成pHp,PhP等绕过
5.00截断绕过
利用解析漏洞,利用00字符截止判断,例如1.php%00.jpg,或者1.php0x00.jpg
6.htaccess绕过
7.双写绕过
如禁止php文件上传,把文件名改成1.phphpp即可,其中中间的php过滤掉后仍可成功上传
8.点绕过
如果服务器开启了黑名单过滤,则可采用 1.php. 的方式绕过并解析
9.二次渲染绕过
10.DATA绕过
在1.php后加上::$DATA
1.php-->1.php::$DATA
相关文章链接见:文件上传漏洞类型汇总(详细)_上传文件漏洞_彼岸花苏陌的博客-CSDN博客
题目来源:BugKu-文件上传
打开题目,题目提示只能上传图像文件,不能上传php文件,那应该是寻找漏洞上传php文件
我们上传1.php文件,文件内容为
<?php @eval($_POST[caidao]);?>
使用bp抓包
首先修改http head里的Content-Type: multipart/form-data;
请求头部的 Content-Type 内容 随便改个大写字母过滤掉 比如 mulTipart/form-data (其t为大写)
Multipart里的部分字母改成大写的。
然后修改文件的的Content-Type: application/octet-stream,改成image/jpeg
最后文件后缀名改成php4
(依次尝试php4,phtml,phtm,phps,php5(包括一些字母改变大小写))分别将后缀名修改为php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名),发现只有php4没有被过滤
发包过去发现文件上传成功 用蚁剑连接给的文件路径
在根目录下找到了flag
解题相关wp:BugkuCTF-WEB题文件上传_bugku 文件上传_彬彬有礼am_03的博客-CSDN博客