漏洞简介
文件上传,顾名思义就是上传文件的功能行为,之所以会被发展为危害严重的漏洞,是程序没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。文件上传漏洞是漏洞中最为简单猖獗的利用形式,一般只要能上传获取地址,可执行文件被解析就可以获取系统WebShell。
漏洞原理
网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门。
漏洞危害
恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件。
文件上传的绕过脑图
如何判断上传漏洞类型?
文件上传绕过姿势
0x01、本地JS绕过
- 首先我们将上传文件后缀由phpjpg
- 通过Burp抓包将jpgphp
0x02、MIME验证绕过(Content-Type)
-
首先我们上传webshell时提示,文件类型不正确
-
将Content-Tepy 由application/octet-stream
改为 image/png 成功绕过 -
-
上传成功
Content-Tepy类型扩展
0x03、黑名单绕过
- 尝试上传webshell
可以通过提示或源码可以看出,上传点对后缀做了黑名单限制
因为是php,我们尝试使用php5等绕过黑名单验证
后缀绕过拓展
0x04、大小写绕过
大小写过滤原理:windows对大小写不敏感,linux对大小写敏感
将文件后缀名改成大写,成功上传。
0x05、空格绕过
原理:windows等系统下,文件后缀加空格命名之后是默认自动删除空格。查看网站源代码发现过滤了大小写,没用过滤空格。
在php后缀添加空格 成功绕过
0x06、点绕过
原理:同空格绕过原理一样,主要原因是windows等系统默认删除文件后缀的.和空格,查看网站源码发现,没有过滤点。
在文件后缀添加个”.“成功绕过
0x07、双写绕过
原理:查看源码发现,没有过滤点,空格,大写等,估计这种不是放在windows下的,这里可以用点大写空格:$DATA等绕过,不过这里的目的不是这个,是让学习双写绕过,看源码发现str_ireplace这个函数将php,php5,php4等后缀变成空格,且只执行了一次,所以可以尝试构造文件后缀为pphphp绕过。
绕过姿势:上传文件后缀为pphphp的文件,发现上传成功,
0x08、%00截断
原理:查看源码发现使用了白名单,只允许jpg,png,gif文件的上传,所以前面使用的方法都不适用,然后我们发现路径img_path函数是让文件位置(save_path)加时间随机数(rand)的方法生成文件位置和文件名称,所以这里我们可以尝试在save_path的地方使用%00的方法截断后面的语句,burpsuite抓包发现,是可以更改save_path的,不过此方法有使用的限制。
使用限制:
1、php版本小于5.3.4
2、php.ini的magic_quotes_gpc为OFF状态
(magic_quotes_gpc)函数的的底层实现是类似c语言,所以可以%00截断
move_uploaded_file遇到\x00字符后会截断路径名,在实现上存在安全漏洞
绕过姿势:
(get传输):上传php文件,burpsuite抓包,修改save_path如图所示,发现上传成功
YJ连接成功
0x09、图片木马
查看源码:采用白名单限制上传的只能是图片,故考虑图片木马
那我们要制作张php图片马
copy 1.png/b + 2.php/a 3.jpg 上传
上传成功,需要配合文件包含利用
0x10、竞争条件
查看源码:发现上传的文件先被存储在服务器,然后进行判断,如果不是jpg png gif 则unlik()删掉,是的话重命名
绕过姿势:在判断删除前,进行访问,竞争时间
shell.php 如下,当然也可写其他木马或者生成木马的php文件,上传用burpsuite抓包,当然可以写脚本
绕后构造访问连接:http://127.0.0.1/upload-labs-master/upload/shell.php 用burpsuite抓包发送和上传一起开始 如何不行可以尝试线程调大点,或者写脚本