day9-渗透测试文件上传篇&认识&危害&利用&绕过&修复
一、认识文件上传
1、描述
文件上传漏洞是一种常见的网络安全问题,它存在于许多Web应用程序中。当Web应用程序在处理用户上传的文件时,如果缺乏严格的安全检查和处理,攻击者就可能上传并执行恶意文件,从而对系统安全构成严重威胁。这种漏洞可能源于对上传文件的类型、大小、内容等属性的检查不严格,或对上传文件的保存路径、文件名等信息处理不当,以及未限制用户访问上传文件的权限, 如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。
2、文件上传漏洞的危害:
- 攻击者可以利用这种漏洞实现对目标系统的入侵、控制或破坏。
- 攻击者可能通过上传恶意脚本文件(如PHP、ASP、JSP等)并执行,从而在服务器上执行任意操作,如获取敏感数据、篡改系统内容等。
- 非法用户可以上传的恶意文件控制整个网站,甚至是控制服务器,这个恶意脚本文件,又被称为 webshell,上传 webshell 后门 很方便地查看服务器信息,查看目录,执行系统命令等。
3、什么是文件上传:
文件上传是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。在Web应用中,文件上传功能非常广泛,如发微博、发微信朋友圈等都会用到文件上传功能。然而,如果文件上传功能的实现代码没有严格校验上传文件的后缀和文件类型,就可能存在文件上传漏洞,从而被攻击者利用。
4、文件上传的过程:
客户端 选择发送的文件->服务器接收->网站程序判断->临时文件->移动到指定的路径 服务器 接收的资源程序
服务器接收资源代码
客户端文件上传的代码
5、文件上传分析
文件上传时会返回一些代码 返回客户端 客户端根据这些值判断上传是否正常
值:0; 没有错误发生,文件上传成功。
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
值:3; 文件只有部分被上传。
值:4; 没有文件被上传。
6、文件上传修复方案
- 验证和限制上传类型:仅接受预期类型的文件上传,例如图片、文档等,并检查文件扩展名与实际内容是否匹配。
-
- 使用白名单控制上传文件类型,即只允许指定扩展名的文件上传。
- 对上传文件后缀与MIME Type进行匹配校验,对文件头信息与文件后缀进行匹配校验。
- 设置大小限制:设定合理的文件大小上限,防止大体积恶意文件的上传。
- 禁止执行权限:确保所有上传的文件保存在无执行权限的目录下,防止通过文件包含(include或exec)命令执行恶意脚本。
- 使用安全的存储路径:使用随机生成的哈希值作为文件名,而不是直接使用用户提供的名称,增加攻击者猜测原文件名的难度。
- 启用Content-Disposition头部:在响应头中指定文件名,浏览器会下载而非直接运行,降低安全风险。
- 文件内容检查:对上传的文件进行内容检查,确保文件不包含恶意代码。可以使用杀毒软件或文件扫描工具对上传的文件进行扫描。
- 实施访问控制:只有经过身份验证和授权的用户才能上传文件,进一步减少潜在威胁。
-
- 对上传文件的访问进行严格控制,只允许授权用户或角色访问上传的文件。
- 可以使用访问控制列表(ACL)或者文件权限来限制文件的访问。
- 日志审计:记录文件上传活动,以便检测异常行为。
- 服务器配置:将上传目录和上传文件设置为不可执行,杜绝脚本执行。
- 图片二次渲染:对于图片文件进行二次渲染、压缩,避免图片写马。
二、文件上传的攻击方法
寻找测试网站的文件上传的模块,常见 头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查看上传时的返回信息,判断是否能直接上传,如果不能直接上传,再进行测试上传突破,例如上传文件的时候只允许图片格式的后缀,但是修改文件时,却没有限制后缀名,图片文件可以修改成动态语言格式如 php,则可能访问这个文件的 URL 直接 getshell,可以控制网站。
常见的网站文件后缀名
可执行脚本的文件后缀名,可被网站目录解析。
常见的后缀名asp asa cdx cer php aspx ashx jsp php3 php.a shtml phtml
有些网站会对 asp 或者 php 进行过滤转成空可用这些后缀名:aspasp asaspp phpphp
1、任意文件上传漏洞
直接获取文件名 把上传的临时文件移动到 hackable/uploads 目录下
上传文件 网页会返回路径 访问 url 即可 getshell
上传的文件可以改成其他恶意脚本或者后门,如中国菜刀一句话,后门大马。即可获得webshell。
2、绕过前端 js 检测上传
在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文字。此时数据包并没有提交到服务器,只是在客户端通过js 文件进行校验,验证不通过则不会提交到服务器进行处理。
2、1.绕过 js 检测方法
- 按 F12 使用网页审计元素,把校验的上传文件后缀名文件删除,即可上传。
- 恶意文件修改成 js 允许上传的文件后缀,如 jpg、gif、png 等,再通过抓包工具抓取 post 的数据包,把后缀名改成可执行的脚本后缀如php 、asp、jsp、net 等,即可绕过上传。
2、2.删除 js 文件
2、3.删除此段
2、4.抓包修改后缀名
2、5.查看上传路径
2、6.前端 js 检测后缀代码分析
客户段 html 上传文件时会调用 checkFile 函数,首先获取文件后缀名。如果文件为空,则弹出“请选择要上传的文件”,如果文件不为空,获取上传的文件后缀名不 .jpg、.png 、.gif 其中一种则提示“改文件不允许上传”,上传失败。
3、绕过 contnet-type 检测上传
有些上传模块,会对 http 的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务端是通过content-type 判断类型,content-type 在客户端可被修改。则此文件上传也有可能被绕过的风险。
content-type 代码分析
submit 提交判断,再检测文件类型如果是 image/jpeg 或者image/png即允许上传。
3、1.content-type 检测上传攻击
上传文件,脚本文件,抓包把 content-type 修改成 image/jpeg 即可绕过上传。
参考:https://www.runoob.com/http/http-content-type.html
修改前:
修改后并send
可以查看路径,发现上传成功
4、绕过黑名单上传
上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。
黑名单代码分析
检测 submit 是否有值,获取文件的后缀名,进行黑名单对比,后缀名不在黑名单内,允许上传
绕过黑名单上传的攻击
上传图片时,如果提示不允许 php、asp 这种信息提示,可判断为黑名单限制,上传黑名单以外的后缀名即可。 在 iis 里 asp 禁止上传了,可以上传 asa cer cdx 这些后缀,如在网站里允许.net 执行 可以上传 ashx 代替 aspx。如果网站可以执行这些脚本,通过上传后门即可获取 webshell
在不同的中间件中有特殊的情况,如果在 apache 可以开启application/x-httpd-php在 AddType application/x-httpd-php .php .phtml .php3 后缀名为 phtml 、php3 均被解析成 php 有的 apache 版本默认就会开启。上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3。
5、.htaccess 重写解析绕过上传
上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess 文件的作用是 可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定 IP 地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能。在 htaccess 里写入 SetHandler application/x-httpd-php 则可以文件重写成php文件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为apache 是多数都开启这个模块,所以规则一般都生效。
5、1.黑名单上传代码分析
如果 submit 有值, $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",
".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",
".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",
".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",
".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",
".sWf",".swf"); 上传的文件后缀名在列表内禁止上传。包括了所有的执行脚本。
5、2.htaccess 重写解析攻击
上传.htaccess 到网站里.htaccess 内容是
<FilesMatch "hpg">
SetHandler application/x-httpd-php
</FilesMatch>
再上传恶意的 jpg 到.htaccess 相同目录里,访问图片即可获取执行脚本。
三、绕过文件上传:
- 文件类型绕过:攻击者可以通过修改文件的扩展名或者伪装文件的MIME类型来绕过系统的文件类型检测。例如,将一个可执行文件的扩展名改为图片文件的扩展名,系统可能会将其误认为是图片文件而不进行进一步的检查。
- 文件大小绕过:系统通常会限制上传文件的大小,但攻击者可以通过上传一个较小的文件,然后在服务器上进行文件合并或者解压缩等操作来绕过文件大小限制。
- 目录遍历绕过:攻击者可以利用目录遍历漏洞来上传文件到系统的其他目录中。目录遍历漏洞是指攻击者通过修改文件路径中的特殊字符或者使用相对路径来绕过系统的路径限制,从而将文件上传到系统的其他目录中。
- 上传文件包含漏洞:某些系统在处理上传文件时,可能存在文件包含漏洞,攻击者可以通过上传一个包含恶意代码的文件来执行任意代码。这种漏洞通常是由于系统在处理上传文件时没有对文件路径进行充分的验证和过滤所导致的。
- 利用黑名单漏洞:
-
- 后缀大小写绕过:在对后缀的判断中,如果只是对字符串进行单独的比较来判断是不是限制文件,可以采用后缀名大小写绕过形式。
- 空格绕过:如果黑名单没有对后缀名进行去空处理,可以通过在后缀名后加空格进行绕过。
- 点绕过:如果黑名单没有对后缀名进行去点处理,利用Windows系统的文件名特性(会自动去掉后缀名最后的点),通过在文件名后加点进行绕过。
- ::$DATA绕过:利用Windows下NTFS文件系统的一个特性,可以在后缀名后加::$DATA绕过对黑名单的检测。
- 配合Apache解析漏洞:Apache解析有一个特点,解析文件时是从右往左判断,如果为不可识别解析再往左判断,利用此特性进行绕过。
- .htaccess文件绕过:上传一个自定义的.htaccess,配合名单列表绕过各种检测。
- %00截断绕过:在HTTP请求中,
%00
可以被用来截断URL参数,使得URL解析器在遇到%00
时停止解析后续的内容。攻击者在文件名中加入%00
,可能使服务器错误地处理文件,从而执行恶意代码。 - 竞争条件上传漏洞:一些网站上传文件的逻辑是先允许上传任意文件,然后检查上传文件是否包含WebShell脚本,如果包含则删除该文件。文件上传成功后和删除文件之间存在一个短暂的时间差,攻击者可以利用这个时间差完成攻击。
- 多文件上传漏洞:上传点支持多文件上传,但只对第一个文件做了过滤。攻击者可以构造特殊的POST表单,第一个文件上传允许的文件类型,第二个上传文件是恶意脚本,从而突破上传限制。
为了防止此类攻击,可以采取多种防范措施,如对上传的文件进行严格的文件类型验证、文件内容检查、限制上传文件的大小、对上传文件的路径进行充分的验证和过滤、以及将上传的文件存储在安全的位置等。
免责声明:请注意,以上内容仅供学习和了解网络安全知识所用,切勿用于非法用途。