目录
前言
文件上传漏洞原理
Webshell介绍
一句话木马:
小马:
大马:
Webshell集合:
网站控制工具
文件上传漏洞危害
文件上传漏洞靶场练习
Pass-01
Pass-02
Pass-03
Pass-04
Pass-06
Pass-07
Pass-08
Pass-09
Pass-10
Pass-11
Pass-12
Pass-13
Pass-14
Pass-15
Pass-16
Pass-17
Pass-18
Pass-19
Pass-20
Pass-21
文件上传漏洞发现与利用
文件上传漏洞利用流程
发现
文件上传漏洞防御
文件上传漏洞发生的前提
防御
前言
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。 这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。 这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。 如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
文件上传漏洞原理
文件上传漏洞是指攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本,或者webshell等。
文件上传的漏洞条件:
- 上传的文件能够被Web服务器当做脚本执行
- 我们能够访问到上传文件的路劲
文件上传功能:
一般什么网站有上传文件的功能?
Webshell介绍
一句话木马:
代码短,只有一行代码。
场景多,可以单独生成文件,也可以插入到图片中。
安全性高,隐匿性强,可变形免杀
php中eval()函数的作用:
小马:
体积小,功能少
只有文件上传功能
大马:
体积大,功能全
能够管理数据库、文件管理、对站点进行快速的信息收集,甚至能够提权
Webshell集合:
https://github.com/tennc/webshell
网站控制工具
1、中国菜刀
2、中国蚁剑
3、哥斯拉
4、weevely
5、冰蝎
文件上传漏洞危害
文件上传漏洞是指用户上传了一个可执行的脚本文件,而且通过这个脚本文件获得了执行服务器端命令的能力。
危害:
黑链
挖矿
文件泄露
文件上传漏洞靶场练习
我们在之前的文章里已经讲述过了文件上传漏洞的原理以及及其危害,我们今天就来通过靶场来练习一下文件上传漏洞的绕过。
Pass-01
我们从第一关开始:
我们点击提示查看:
这里说了这里对上传文件的验证是在前端。
我们这里直接去上传一句话木马试试看:
显示如上,说允许上传.png .jpg .gif三种文件格式类型的文件。
我们该如何去绕过呢?
在浏览器url一栏中输入about:config
将javascript:enabled切换成Flase,以禁用前端js。
我们再来上传一下试试看:
上传成功。
Pass-02
MIME
常见类型
MIME用法
我们来看一下这关的源码:
这关校验了上传文件的MIME类型,我们只要将文件上传的MIME类型修改就可以绕过了。
我们上传shell.php文件:
然后到开Burp Suite抓包:
然后我们将 content-type字段修改为image/jpeg:
然后放包:
上传成功:
Pass-03
漏洞描述:使用黑名单的方式限制文件上传类型,后端利用$_FILES()和 strrchr()获取文件名后缀。被限制文件类型:.asp .aspx .php .jsp
我们将上传的文件后缀php改成等价的php3绕过。
上传成功:
Pass-04
漏洞描述:依然是使用黑名单限制,但几乎过滤了所有有问题的后缀名,但可以允许上传.htaccess 文件。
我们将编辑好的.htaccess 文件上传到服务器上,
然后将我们包含有一句话木马的shell.php改成后缀为a.jpg的文件:
去访问这个文件存在的路径:
访问成功:
Pass-06
上传成功:
Pass-07
对上传的文件名未做去空格的操作->trim()
我们上传文件,抓包:
然后在这里filename后面添加上一个空格:
放包,上传成功:
Pass-08
漏洞描述:对上传的文件后缀名未做去点.的操作 ->strrchr($file_name, '.')
在这里添加一个.
放包,上传成功:
Pass-09
漏洞描述:对上传的文件后缀名未做去::$DATA 处理
放包,上传成功:
Pass-10
漏洞描述:将文件名进行过滤操作后,将文件名拼接在路径后面,所以需要绕 过前面的首尾去空以及去点。
我们上传文件,抓包:
在文件后缀加上. .
放包,上传成功:
Pass-11
漏洞描述:利用 str_ireplace()将文件名中符合黑名单的字符串替换成空
我们修改上传文件后缀名:
上传成功:
Pass-12
漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径可控
在路劲后添加上%00:
放包,上传成功:
Pass-13
在upload/后面加上/shell.php+ 并把filename里的shell.php改成shell.png。
然后到16进制中将+号改为00
放包,上传成功:
Pass-14
我们以文本格式打开图片文件,可以看到恶意代码被包含在了图片里
上传我们的文件:
上传成功:
Pass-15
漏洞描述:通过 getimagesize()获取上传文件信息,图片马绕过
这一关校验了上传文件的大小,我们直接制作一个图片马,跟上一关一样:
上传成功:
Pass-16
(3)利用 x00x00x8ax39x8ax39 文件头
我们这里还是运用图片马(百试不爽):
上传成功:
Pass-17
上传成功:
Pass-18
我们上传一个条件竞争的文件,文件的内容为,保存为competition.php:
抓包:
右键:
设置如下:
然后开始爆破:
然后我们在浏览器输入上传文件的路劲,不断刷新访问,直到一句话木马被生成:
然后我们在中国蚁剑之中成功连接:
Pass-19
漏洞描述:后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以 不断利用 burp 发送上传图片马的数据包,由于条件竞争,程序会出现来不及 rename 的问题,从而上传成功
Pass-20
上传成功:
Pass-21
利用方法:数组绕过
我们上传文件,抓包:
将filename的shell.php改成shell.jpg :
MIME类型也需要改:
在这里添加上数组:
这里也需要改:
下面两个地方也需要改:
放包,上传成功:
文件上传漏洞发现与利用
文件上传漏洞利用流程
发现
工具下载地址:https://github.com/almandin/fuxploider
他这个项目可以自动去检验网站文件上传的表单有没有可以上传文件的点。