文件上传漏洞是指上传了一个可执行的脚本文件,从而获得执行服务器相关的权限和指令。如何上传文件,有很多种方法,而上传需要注意的形式也有很多。
要完成这个攻击,要满足以下几个条件:
首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。
最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。
解析漏洞这块就是在讲如何使用户可以访问到所上传的脚本文件
解析漏洞是针对不同服务器对上传文件名称的规格不同,找到相关的漏洞,通过语法、符号来上传后门文件。
一般网站的上传只能够上传图片,文章等,不能直接上传脚本文件。
解析漏洞的原理就是通过上传一些藏有代码的图片或其他文件,再让网页用脚本语言而不是图片格式去执行,从而拿到网站的后门,如何使得上传的图片用脚本语言去执行,就需要用到解析漏洞。
漏洞产生的条件有1、命名规则。 2、搭建平台类型
首先,如何在图片中植入一句话木马,将图片格式改为txt,在尾部或者中部加入一句话木马代码。还有用一些图片编辑器之类,方法有很多种,在这里先不做介绍。
假设图片名称为 easy.jpg
则正常命名访问:
www.xxx.com/easy.jpg
触发解析漏洞命名:easy.asp;.jpg 或者 easy.asp;x.jpg。 本质上我们把图片的名称修改为了easy.asp; 而图片格式(后缀)仍然是 .jpg,
而这时候访问www.xxx.com/easy.asp;.jpg则会触发解析漏洞,如果上传成功,使用菜刀连接一下,就可以拿到网站的后台。还需要确定图片上传的位置,可以通过查看上传图片界面的后台代码发现上传位置。
上述这种方式是针对上传的图片的命名跟图片本身的名称一样的情况。如果上传到网站的图片名称跟图片本身名称不一样,而是通过上传时间等数据自动给图片命名,比如上传easy.jpg图片,而传到服务器后图片被命名为20170101.jpg,这样就不能触发上述解析漏洞。这时就需要用到文件夹命名格式
正常命名访问:
www.xxx.com/image/easy.jpg
触发解析漏洞命名:
www.xxx.com/image.asp/easy.jpg
原理是在命名规则中,如果文件夹名称后带有.asp,则文件夹内的所有文件都以asp的格式去运行。
正常命名:
www.xxx.com/logo.jpg
触发解析漏洞命名:
www.xxx.com/logo.jpg/x.php
正常命名:
www.xxx.com/a.php
触发解析漏洞命名:
www.xxx.com/a.php.xxxx
针对不同服务器,网上很容易找到详细的解析漏洞语句,针对实际情况可以通过Google或百度搜索查找,在这里就不作一一介绍。
针对本地, 服务端名称不一致的情况,虽然可以通过文件夹命名形式利用解析漏洞,但是一般情况很难在服务端创建所需要的文件夹,当然不是不能够创建,我们也可以利用编辑器漏洞来达到目的,现在要说的是不通过文件夹解析漏洞。
在这里我们上传文件时通过burpsuite抓包,然后修改数据包里的内容,举例
原本filepath后内容是upfile,我们抓包获得之后可以在后面加上.asp,这样就使得upfile文件夹变成upfile.asp, 就可以触发上述文件夹命名格式的解析漏洞。 也可以在upfile/后面加上xx.asp; 这样上传的文件就变成了xx.asp;201510233(服务端自动命名).jpg, 可以触发解析漏洞达到访问目的。
Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。
百度百科中有详细的content-type的各种类型,同样用burpsuite抓包,找到content-type字段,修改上传文件类型为image/jpeg,则可以绕过检测,上传脚本文件。
用burpsuite抓包,需要包中有filepath字段,在x.asp;.jpg中,将分号改为%00,并利用burpsuite内改编码工具修改为十六进制url编码,或者选中x.asp .jpg的空格,在repater的hex中,找到空格对应的编码,空格编码是%20,修改为%00,再发送包,可以实现截断上传,
这样即保证了上传的文件的后缀是JPG 又可以上传后舍掉空格后的东西 留下x.asp
%00截断对于过安全狗有很好的效果,在上传漏洞的过程中,要根据不同情况使用不同方法,解析漏洞,filepath等,都是某些问题的解决方法,并不适用于任何情况,重点是理解原理,了解后台审核机制,从根本去解决问题。拿到shell。