本篇文章将会从文件上传漏洞的基本概念讲起,然后去了解在文件上传中我们的网站都有哪些检测机制,如何去绕过这些检测机制,最后是如何去修复文件上传漏洞。
参考靶场:upload在github上搜索即可在本地搭建。
一、什么是文件上传?
大家duck不必把文件上传漏洞看的高深莫测,因为我们经常做一些文件上传的操作,就比如你发一个qq空间,发个朋友圈,在上面上传的图片就属于文件上传,只不过可能没有漏洞罢了。
比如这就是一个上传文件的窗口
二、知道了什么是文件上传,那么文件上传漏洞又是什么?
上传文件时服务器后端语言没有对上传的文件进行严格的验证和过滤,容易造成上传任意文件的情况,从而使得攻击者绕过上传机制上传恶意代码并执行控制服务器。
恶意代码文件就是php asp aspx jsp等,也被称为webshell。
本篇文章主要以php语言中的一句话木马进行介绍,比如
<?php eval($_POST['a']);?>
三、可以利用这个文件上传漏洞有哪些前提条件嘞?
-
首先这个包含一句话木马的文件可以上传
-
上传之后我知道这个文件的位置,也就是他的文件路径
-
然后这个文件路径可以正常访问
-
最后这个文件可以被解析,就是里面的内容。
四、服务器去检测我们上传的文件有哪些机制?
网络中的攻防,也要做到知己知彼,只有知道对方有哪些武器,我们才能更好的去应对。
为了各位更好的理解层次之间的关系,采用了脑图的呈现方式,主要就是包括客户端检测和服务端检测,在服务端检测中有文件后缀检测(黑名单检测,白名单检测),内容检测,MIME类型检测。下面将会围绕这些检测机制逐步展开讲解。
五、客户端检测是?
这是最容易绕过的一种检测机制,可能在现实生活中没有公司会用吧。主要来讲就是根本不会上传到服务端,在客户前端就完成了检测。
想要绕过也很简单,如果你是edge浏览器在设置里面把JavaScript检测关闭就好,在火狐中我是没找到关闭的地方,下了一个插件,也是可以关闭的。关闭之后相当于没有了检测机制,现在就可以上传任意文件了。
六、文件后缀检测是?
首先我们介绍比较容易绕过的黑名单检测机制。
黑名单也是比较容易理解,整个的流程用一个真实的例子就可以理解,比如说你和你女朋友分手了,女朋友很伤心,再也不想联系到你,所以她把你的手机号拉黑了,现在你再给你女朋友打电话还能接通吗?想都别想,根本不可能嘛,但是如果你真的渴望女朋友还能再给自己一次机会,你会怎么做?如果你想到了办法,那么恭喜你,你已经掌握了黑名单绕过的基本原理。肯定是去借一个别人的手机号,不管女朋友答不答应,起码手机号是可以接通了对吧。
基于这种情况,你打给女朋友不接通,别人打过去就可以接通,证明确实存在着黑名单这种情况,在我们网络世界那便是,你上传一个.php后缀的文件人家服务器拒绝你,但是你随便上传一个.lalala,哎,服务器竟然通过了,这就是黑名单检测。
下面我们要做的就是怎么挽回女朋友了哈哈(开个玩笑, 还是得想办法绕过这个黑名单的控制。
1.双写绕过
我上传了testconnect.php文件后在burpsuite中竟然给我把php抹了
好吧,你也暴露了嘿嘿,这个时候我们改成testconnect.pphphp就可以成功上传了。
2.大小写绕过,仅限Windows
改成testconnect.Php就OK,因为服务器会把php替换为空,但是Php有个大写嘛,就把他骗了呗,但是解析执行的时候,我们的Windows又不区分大小写,嘿嘿,搞定。
这是替换为空的代码原理,可以参考一下哈。
3.其他可解析绕过
这个比较容易理解,还是拿女朋友来讲(虽然没有女朋友,现在发现女朋友真的发挥了好大作用hahaha~),现在尽管女朋友把你的手机号拉黑了,但是,万一我有两个手机号嘞,她只拉黑的一个,我的其他的是不是可以打通,正是这种道理我们的php也有挺多别的手机号喔。
4.最后一个方法我们是浅浅打一套组合拳了,图片加配置文件绕过
绕过思路,先上传一个解析器,再把代上传的一句话木马按照指定的png方式进行上传,但是,我们提前上传的解析器会把这个png的文件解析。
关于解析器的操作:就是写一个.htaccess文件,女朋友应该不知道还有这种陌生号码吧,如果真知道,那么兄弟还是放弃吧,我黑名单检测绕过只能到这了哈哈。
在这个.htaccess文件中需要有以下内容
<FilesMatch "target.png">
setHandler application/x-httpd-php //自动转化为php文件
</FilesMatch>
现在把含有一句话木马的文件名,一字不差的改成target.png,上传成功,就可以成功上传webshell啦!
以上就是黑名单检测我所学的全部内容了,如有不当之处,欢迎大佬师傅们的指正,后续检测机制的介绍敬请期待!
我是哈皮,祝您每天嗨皮,我们下期再会!