1.文件上传漏洞常见地方
可以上传文件的地方,比如个人用户中心的头像上传,后台管理文章等
2.文件上传漏洞的常规步骤
找到上传文件的地方->绕过防护->上传木马文件成功->利用蚁剑,菜刀等等连接->获取目标
3.常规的防护
按照验证的位置可以分为:前端和后端
前端一般是指javascript语言写的部分,这个部分在网页可以直接查看源代码,去查看过滤的规则。
后端一般指的是我们看不见的过滤规则,这部分一般用php,java等开发
按照检测的东西可以分成:对于后缀名,对于内容,完整性,二次渲染等等
对于后缀名,一般会使用白名单或者黑名单和MIME
白名单:指的是只允许
黑名单:过滤特定的后缀
MIME:在http抓包中有一个部分是content-type,这个部分会自动检测文件的后缀格式
这三个中,最容易的是MIME,因为可以直接在抓包后修改,其次是黑名单,ctf中大多数也都会采用黑名单方式,毕竟是要可以做出来的,最难的是白名单,基本我们只能去上传白名单的格式,就可以不在后缀上下功夫了,可以考虑是否存在文件解析漏洞等等。
对于内容,一般是对于文件头的解析,不同的文件的文件头都是不一样的,比如gif格式的是GIF89A,我们可以再php文件最前面加入这个,让对于内容的检测失效,其他格式文件也有类似的,可以自行查网上内容
二次渲染指的是在文件上传网站后,网站对于文件进行了大小的改变,上传到服务器的文件已经和原来上传的大小等等不一样了,这一般会造成我们已经放入的木马没有起到效果
手工:我们这个时候可以上传文件后,再把我们上传的这个从网站上下载下来,一起放入C32ASM中,利用16进制查看之后,对比,我们可以看见网站到底修改了些什么,在未修改的部分插入木马就可以成功了
C32ASM下载链接:C32ASM下载_C32ASM(反汇编软件)免安装版下载2.0.1.0 - 系统之家 (xitongzhijia.net)
这个链接我试过,浏览器是信任的,有些网站下载之后可能会显示不安全
脚本工具:有时候我们手工比较麻烦,我们可以使用脚本去插入php代码
4.常见的绕过方式
1.利用文件解析
当确定无法上传一个php后缀文件的时候
在一开始初学怎么制作一个带有木马的图片文件的时候,我经常觉得,如果一个文件上传禁止了php的话,我上传带木马的图片文件不就可以了吗,在有一段时间我一直是这么觉得的,而忽略的重要的条件------需要一个图片解析成php,才能让木马生效
在服务器上一般都是按照文件的格式去解析文件的,就像我们只能用python去解析.py后缀的python脚本文件一样,在安装python之前,我们无法去解析一个python脚本,而让服务器去无缘无故的用php格式解析png格式文件更是显得有点智障,这个时候,我们就需要文件解析相关的内容了
文件解析:简单来说就是让服务器按照一定的方式去解析文件
方法:本身存在文件包含,文件解析,我们自己上传.user.ini和.htaccess文件,这些都可以让服务器去按照我们的想法解析文件
.user.ini:在php5.3以上的版本存在该配置文件,在里面我们可以我们可以设置解析,条件就是,php版本和在目标目录下有index.php去包含.user.ini执行
具体怎么写入命令可以看大佬的博客:文件上传-.user.ini的妙用-CSDN博客
.htaccess:是Apache和Ngnix中间件的配置文件和.user.ini差不多,条件是中间件开启了相关配置,我们可以修改这个文件
有一些服务器会设置该上传文件夹为不可以执行解析,这个时候我们需要把文件上传到其他可以执行域下,比如用/..这样的文件名尝试
2.内容检测绕过
在内容检测中有些可能会过滤特殊的字符,比如php的,<?;'"{[这些在写代码中常用到的特殊字符,当发现我们的文件格式绕过了,但是没有上传成功时,可以把里面的内容修改,尝试上传,看是不是对于内容的检测
绕过也就是把特殊字符替换,这部分直接搜字符替换的方式就可以,比如{}去代替[]这样
3.网站自动删除文件
当我们上传成功,但是在网站访问这个文件时出现404情况,一般都是服务器把这个文件删除了
情况:1.什么文件都删除:条件竞争
2.只删除了带后门的:修改代码/条件竞争
条件竞争:主打的就是速度,在一个文件上传成功到服务器删除的操作之间很可能存在了时间间隙,我们的操作就是要在这个间隙去访问文件,这个文件内我们可以写入传递flag和其他信息的代码,在这个访问解析的间隙,把我们要的信息传递到我们的远程服务器
具体原理可以看:CTF | 天下武功唯快不破之条件竞争漏洞 - FreeBuf网络安全行业门户
4.中间件与编辑器
当我们在信息收集阶段发现了,该网站使用了一些特定的中间件,或者存在漏洞的中间件,还没打补丁,我们可以利用这些漏洞去获取信息
IIS6.0:解析漏洞,在文件名为x.asp;x.jpg,目录名为x.asp/x.jpg的情况下,文件会解析x.asp,条件就是,我们可以自定义上传文件的名字
Apache:解析漏洞:用回车去避开黑名单,如x.php%0a,当是白名单就没用了
配置不当:x.php.jpg,在配置.htaccess的时候把所有文件名带有php的都当php解析
Ngnix:解析漏洞:x.jpg%20%00.php解析成php
配置不当:x.jpg/*php 把jpg解析成php
编辑器:在很多网站写文章的地方会应用外部的编辑器如ueditor,fakeditor,kindeditor等等。这种三方的 编辑器,我们可以收集资料看是否在编辑器上存在漏洞
5.日志文件等
当是在是没什么办法了,我们可以再UA头里面去写入木马传输信息,让服务器主动访问我们的远程服务器来达到目的,日志文件会记录这个UA内容,当然也需要服务器按照脚本类型去解析日志文件等等。
5.思路
功能->是否存在上传文件的地方->前端有没有验证->后端有没有验证->能不能绕过
6.案例
待补充,可以收藏或关注,以后会慢慢补上