文件上传漏洞

目录

前言

1.原理

2.类型

3.复现

3.1环境

3.1.1函数介绍

3.2过程

3.2.1客户端绕过

3.2.2服务端绕过

        黑名单检查后缀

        白名单检查后缀


前言

文件上传漏洞是wb安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒。恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。本文仅关联相关安全问题无其他导向

1.原理

程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过js代码进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如aspphpaspxphp3php5等文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。

2.类型

客户端绕过、服务端绕过

3.复现

3.1环境

upload-labs靶场+phpStudy小皮

GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场一个想帮你总结所有类型的上传漏洞的靶场. Contribute to c0ny1/upload-labs development by creating an account on GitHub.https://github.com/c0ny1/upload-labs小皮面板(phpstudy) - 让天下没有难配的服务器环境!phpStudy官网2019正式推出phpStudy V8.0版本PHP集成环境,支持Windows与Linux系统,支持WEB面板操作管理,一键网站开发环境搭建配置,另经典版本phpStudy2016/2018/JspStudy环境套件同步更新中,欢迎网站开发者或运维下载使用!https://www.xp.cn/

3.1.1函数介绍

trim()作用:从一个字符串的两端删除空白字符
deldot()作用:从字符串的尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止
strrchr()作用:查找字符串在另一个字符串中最后一次出现
strtolower()作用:转换大小写
str_ireplace()作用:字符串替换操作,不区分大小写

https://www.jb51.net/article/239371.htm#_label1https://www.jb51.net/article/239371.htm#_label1

3.2过程

3.2.1客户端绕过

原理

由于程序猿只在前端通过js代码进行后缀检验,正是他的粗心导致了可利用的漏洞

方法

(1)停用JavaScript(适用于upload-labs靶场的第一关)
ctrl shift+i-->设置-->偏好设置-->停用Javascript

总结

文件上传漏洞中如果是出现前端js限制这种情况,那么绕过方法非常简单就是停用浏览器的JavaScript,这种前端黑名单的限制方法是不应该出现的,更加严谨的是需要前端后端都需要进行限制,upload-labs的第二关就是对后端也进行了限制

3.2.2服务端绕过

原理

通过后端限制的缺陷来进行绕过,一般都是在网页上写一段javascript脚本,校验上传文件的后缀名是否合法,有白名单和黑名单两种形式,区别就是,黑名单明确了不能上传的文件格式,白名单则明确了可以上传的文件格式

黑名单检查后缀

方法 

(2)使用抓包工具burp修改包数据(适用于upload-labs靶场的第一、二关)
创建一句话-->修改后缀满足“.jpg|.png|.gif”(绕过前端限制)-->设置浏览器代理(burp代理)-->通过burp抓包然后修改上传文件后缀然后放行

(3)通过大小写的方法绕过(适用于upload-labs靶场的第五关)
PHP、Aspx等

(4)空格绕过(upload-labs靶场第六关)
后缀使用空格技巧通过,绕过原因为后端并没有过滤空格,这里前提也是在Windows下利用它的特性会去除文件名空格

(5)使用点绕过(upload-labs第七关)+burp抓包绕过
由于没有过滤点,我们可以通过后缀加点的方法绕过,这里是依据Windows系统自动去除上传文件的点

 

(6)Windows数据流特性,完整的数据后面是含有::$DATA的而这个::$DATA就称为数据流,只不过在文件的后缀中不会显示出来,所以利用这个特性我们就可以通过upload-labs靶场的第八关

(7)路径拼接绕过(upload-labs靶场第九关)
第九关虽然限制的看似没有问题但是恰恰问题就出现在它的限制顺序中,我们考虑如果我们按照它的限制顺序让它把过滤的都过滤掉只剩下我们需要上传的就可以了

(8)双写绕过(upload-labs靶场第十关)
通过burp抓包+双写后缀来绕过

(9)php后缀特性绕过(upload-labs靶场第三关)
php2、php3、php5、phtml等,一般php配置文件中不会设置这样的特性,所以不会生效

(10)利用.htaccess配置+图片马绕过(upload-labs靶场第四关)
利用它的伪静态特性,首先在.htaccess配置文件中写入命令让传入目标文件下的文件都用php执行,然后我们通过cmd合成一个图片马传入目标文件目录下,然后通过.htaccess文件的特性来使用php执行该图片马

编写.htaccess配置文件通过vscode进行修改内容如下,并将它传入目标路径下

<FilesMatch "image">
SetHandler application/x-httpd-php
</FilesMatch>

在cmd中通过以下命令生成图片马,test.php中的内容为我们写入的一句话木马

copy aa.png/b + test.php/a image.png

白名单检查后缀

方法

(1)MIME类型绕过
服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法
burp抓包修改content-Type实现绕过

常见的MIME类型 - Scivous - 博客园1,常见的MIME类型(通用型): 超文本标记语言文本 .html text/html xml文档 .xml text/xml XHTML文档 .xhtml application/xhtml+xmlhttps://www.cnblogs.com/scivous/p/14059858.html

(2)00截断漏洞&get型(出现于php5.2版本漏洞)(upload-labs第十一关)
使用burp抓包添加%00然后修改php后缀名的方式绕过

00截断原理:\0截断了后面的执行语句让其默认已经执行完成了,所以导致恶意文件上传成功 

 

(3)00截断漏洞&post型(upload-labs第十二关)
get传参首先在url要解码所以你就需要提前将\0进行编码成%00,而post传参不需要所以要把这里的%00解码
使用burp抓包添加%00先对%00进行url-decode然后修改php后缀名的方式绕过

 

引入特别的Windows特性
实例:U-Mail邮件系统
在Windows+php+iis(phpstudy2018)环境下Windows具有以下特性
小于号(<)相当于星号(*)
大于号(>)相当于问号(?)
双引号(")相当于小数点(.)
这里我们又知道在操作系统中*星号表示所有的意思,所以利用这个特性我们可以去绕过一些特别的限制eg:当我们将这样的bypass.<<<文件上传到目标路径下相当于匹配了php后缀也就是bypass.php那么就可以达到我们想要的效果
(4)文件包含漏洞绕过(upload-labs靶场第十三、十四、十五关)
生成图片马方法和前面的第4关中一样,然后上传验证是否成功

文件包含漏洞形成原因是:用户可以控制你包含的文件

文件包含漏洞解决方法:如果你使用了文件包含函数,那么你就需要将文件包含的文件写死,不要让用户可以去控制(url中输入的文件使包含成功)

(5)特殊的文件包含漏洞绕过(upload-labs靶场第十六关)
使用了imagecreatejpeg()函数,通过010editor工具对比上传前后函数变化的位置,将一句话木马写入到未改变的位置来实现绕过

   

通过010工具对比修改前后的位置差异来插入一句话实现绕过 

(6)时间型竞争漏洞(upload-labs第十七关)
依据“先上传后删除的特性+burp抓包进行时间竞争绕过

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值