文件上传漏洞笔记随笔
文件上传:
1、文件上传流程:
1.前端选择文件,进行提交。 我们在浏览器中上传文件
2.浏览器形成POST MultiPart报文发送到服务器。(抓包)
3.服务器中间件接受到报文,解析后交给相关后端代码进行处理。 (服务器相关编程)
4.后端代码将上传的文件内容写入到临时文件中( PHP特有 ) 。
5.写入到文件中,文件名为提交的文件名或以一定规则生成的文件名。
2、文件上传漏洞
当文件上传点未对上传的文件进行严格的验证和过滤时,就容易造成任意文件上传,包括上传动态文件(asp/php/jsp等等) 。
如果上传的目标目录没有限制执行权限,导致所上传的动态文件(比如webshell) 可以正常执行并且可以访问,即造成了文件上传漏洞。
上传一个可访问的动态文件
3、文件上传漏洞的必要条件
①存在上传点
②可以上传动态文件
上传这个网站所能解析的动态文件,对服务器进行一些操作,执行系统命令,访问数据库,控制服务器(长期)
③.上传目录有执行权限,并且上传的文件可执行
上传的文件必须可以执行
④可访问到上传的动态文件
上传且访问,本地文件包含(上传文件利用)
4、上传检测流程
waf:web应用防火墙
ips:入侵防御拦截
文件参数中的MIME TYPE
5、提交报文检测修改(前端检测通用)
①首先选择正常的文件进行上传
②而后通过Burpsuite进行截包改包或改包重放完成文件上传。
这种方法前端绕过检测中通用,无需理会具体前端的检测代码,直接绕过前端进行上传报文的修改并提交。
6、客户端检测绕过
①JavaScript检测:通过浏览器提交上传请求前,触发检测用JS脚本进行检测。
例如:普通的表单上传
②Flash AS脚本检测: . 上传用Flash中
提交上传请求前,触发检测用AS脚本进行检测。
例如: DZ的头像上传
③APP上传检测
检测写在APP客户端代码中,或者所调用的HTML页面中
7、客户端检测一般只检测文件扩展名。
客户端进行的检测,可通过对客户端代码的一些修改或直接拦截修改报文即可绕过,所以这种上传限制约等于没有。
8、前端js检测
①查看onchange、onsubmit等事件
onchange事件会在域的内容改变时发生。
onsubmit事件会在表单中的确认按钮被点击时发生,如下图示例。
②删除掉相关事件中的检测函数
首先 action是form的属性,onsubmit是事件。
要说执行的先后顺序,onSubmit在先,先验证,验证返回false时,则无法到达action="url"地址。如果是返回true或者没有返回值,则通过action转向url地址。
也就是说onsubmit可以阻止action的提交
同时,这里要注意onsubmit="return checkFun();" 这里的return是一定要写的。不能掉了return,否则表单永远会提交。
9、MIME检测绕过(服务器)
MIME (Multipurpose Internet Mail Extensions)是描述消息内容类型的因特网标准。
MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
浏览器会自动根据所上传的文件的扩展名,对应到相应的MIME类型上。
10、文件内容检测:
1.简单文件头检测
文件头是位于文件开头的一段承担一定任务的数据,
一般都在开头的部分。(百度百科)
文件头的起始部分中一般开头标记文件类型。
如gif的文件头为GIF89a或GIF87a。
2.完整文件结构检测
通过调用图像函数(如getimagesize/imagecreatefromgif/imagecreatefrompng) ,进行检测文件是否为图像,需要文件内容保持相对完整,所以无法通过上种追加头部起始字节的方法进行绕过。
针对这种检测,可以将图片文件与欲上传的文件进行合并来绕过检测。
可通过copy命令进行文件合并。
3.恶意文件内容检测
检测提交内容中是否包含Webshell等数据。
推荐使用强混淆的weevely进行尝试,Kali中自带。
https://github.com/sunge/Weevely
或者尝试开源的webshell收集项目
https://github.com/tennc/webshell
4.恶意文件内容检测,常见关键字
eval(
base64_ encode(
assert(
java.lang.Runtime
java.lang.ProcessBuilder
11、文件上传小技巧
1.文件参数多filename属性
文件.上传过程种,如果存在waf拦截一些扩展名, 可以通过尝试多个filename属性
2.目录可控时,可以尝试使用目录穿越的方法(../)
3.扩展名检测类型可控
1、可以从后台修改允许/禁止的扩展名类型
2、提交参数中存在允许/禁止的扩展名类型
3、前端单独抽出了文件扩展名进行了提交
12、常见解析漏洞
1.IIS/Nginx+ PHP fastcgi取值错误解析漏洞(配置错误)
开启了cgi.fix_ .pathinfo, 如果开启以后,所执行文件不存在,会继续查找上-级文件是否存在。
Index.php/id/2
并且未设置securty.limit_ extensions, 该选项限制可以执行的文件类型。
示例: abcde.jpg/.php
2.Nginx文件名逻辑漏洞(CVE-2013-4547)
影响版本: Nginx 0.8.41 ~ 1.4.3/ 1.5.0~ 1.5.7
上传一个以空格(%20)为结尾的文件,例如" abcde.jpg”
当访问abcde.jpg%20%00.php时,会将刚刚上传的"abcde.jpg "文件,当做PHP进行执行。
abcde.jpg%20%00.php
一般的php匹配正则: \.php$
存在漏洞时,Nginx将abcde.jpg%20认当做了脚本文件名
3.Apache解析漏洞(配置错误)
如果在Apache的conf文件中有如下配置
AddHandler aplication/x-httpd-php .php
则abcde.php.jpg也会被当做php去执行
如果在.htaccess中有如下配置,可以将扩展名.xxx当做php执行
AddType application/x-httpd-php xxx
4.IIS 5.x/6.0解析漏洞
①上传文件名: abcde.asp:;jpg
服务器默认不解析;号后面的内容,因此abcde.asp:;jpg被当做了 asp文件解析.
②向xxx.asp目录下面上传abcde.jpg
服务器会将xxx.asp目录下的文件都当做asp文件解析
12、webshell工具的使用(以upload第一题和第二题为例)
通过代码审计,发现这是一个js验证,所以通过bur抓包,改包,改成一个动态的php,放包然后查看图片网址的地址
发现图片的网址如下:
用蚁剑进行连接,查看目录,管理数据库等:
第二关:
通过代码审计,发现这也是一个js验证,所以通过bur抓包,改包,改成一个动态的php,放包然后查看图片网址的地址
发现图片的网址如下:
用菜刀进行连接,查看目录,管理数据库等:
13、bur工具的使用(最基本)
Burpsuite抓包:(设置代理127.0.0.1)
Burpsuite改包:(对已经抓到的包里面的相应的字段进行更改)
Burpsuite重放:(选择Action中的Send to Repeater,就可以进行重放操作了)
14、简述文件上传漏洞
如果未对文件进行严格的验证和过滤,那么攻击者就有可能将动态文件(jsp/asp/webshell)上传到服务器(上传任意文件),然后根据这些动态文件(webshell)可以对数据库进行操作,甚至控制整个服务器
15、文件上传漏洞成因:
文件上传漏洞的成因(复杂),一方面,Web应用开放了文件上传功能,并且对上传的文件没有进行足够的限制;另一方面,程序开发部署时候,没有考虑到系统特性和过滤不严格;再者就是,攻击者通过Web服务器解析漏洞绕过限制,导致可以,上传任意文件。
16、文件上传漏洞危害
文件上传漏洞最直接的威胁就是.上传任意文件,包括恶意脚本、可执行程序等。
如果Web服务器所保存上传文件的可写目录具有执行权限,那么就可以直接上传后门文件,导致网站沦陷。
如果攻击者通过其他漏洞进行提权操纵,拿到系统管理权限,那么直接导致服务器沦陷。
同服务器下的其他网站无一幸免,均会被攻击者控制。
17、文件上传漏洞的条件
1、Web服务器要开启文件上传功能,并且,上传api (接口)对外“开放”(Web用户可以访问) ;
2、Web用户对目标目录具有可写权限,甚至具有执行权限,一般情况下,Web目录都有执行权限。
3、要想完美利用文件.上传漏洞,就是上传的文件可以执行,也就是Web容器可以解析我们上传的脚本,无论脚本以什么样的形式存在。
18、一句话木马,小马,大马?
一句话木马:
php的一句话木马是 <?php @eval($_REQUEST['cmd']);?>
asp的一句话木马是<%eval request ("cmd")%>
aspx的一句话木马是 <%@ Page Language="Jscript"%> <%eval(Request.Item["cmd"],"unsafe");%>
实际上一句话木马也属于小马的一种,但JSP和JSPX的一句话木马比较复杂。
小马和大马都是网页类型中的一种后门,是通过用来控制网站权限的,最主要的区别就是小马是用来上传大马的。
小马:体积小,它的作用仅仅用于上传文件,能够绕过一些安全检测,如waf等,配合上传大马
大马:体积大,功能全,具有对数据的管理,命令的操作,数据库的管理,解压缩,和提权的功能
19、哪些地方可能存在文件上传漏洞?(自己的想法,不允许查找)
只要能上传文件的地方皆有可能出现文件上传漏洞
20、文件上传绕过思路(自己写的pdf)
pdf下载地址如下:
https://files.cnblogs.com/files/w1hg/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E7%BB%95%E8%BF%87%E6%80%9D%E8%B7%AF%E6%80%BB%E7%BB%931.zip