1.什么是文件上传漏洞
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解析文件。文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断, 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击者可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell!
2.WebShell简介
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
通俗来讲,Webshell是黑客经常使用的一种恶意脚本,其目的是获得对服务器的执行操作权限,比如执行系统命令、窃取用户数据、删除web页面、修改主页等,其危害不言而喻。黑客通常利用常见的漏洞,如SQL注入、远程文件包含(RFI)、FTP,甚至使用跨站点脚本攻击(XSS)等方式作为社会工程攻击的一部分,最终达到控制网站服务器的目的。
3.文件上传漏洞原理
1.文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。
2.文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。
3.一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。
4.存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏阔的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。
5.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等
4.文件上传漏洞攻击详解
<1.前端检测
<1.1原理
在点击上传文件时,游览器还没有向服务器发送请求前对本地上传文件进行的检测,这种检测主要是通过JS代码来检测文件的扩展名是否符合上传要求,并且这种检测可有可无,因为检测代码在用户游览器上运行,非常容易绕过!
<1.2绕过方法
- <1.2.1 删除或禁用JS检测代码
删除JS代码必须得能认识JS检测代码,不然怎么删?另外,这种办法不稳定! - <1.2.2 抓包改后缀名(最稳妥的方法)
<1.3攻击方法
先在php文件中写入一句话木马,例如:
接着使用BURP抓包将文件后缀改为.php格式上传!
<2.黑名单机制
<2.1原理
将危险后缀名写入数组或文件中,当上传文件在黑名单中,则不允许上传!
<2.2绕过方法
- 尝试修改后缀名
比如:黑名单中有.php/.jsp/.asp/.aspx等
可以抓包修改成jspf/asa/cer/php3~5/phtml/exee等;在默认情况下,这些都可以被解析为jsp/php格式! - 大小写绕过
我们可以通过后缀名大小写的方式绕过,除非非常老的Web容器版本会对后缀名大小写有检测,不然都不会区分大小写。
比如:要上传.php文件可以抓包修改为.pHp/.PHp等
双写绕过
对于一些检测到你上传的文件名带有危险字符时,他会自动替换成空。
例如:会将php替换成空,我们可以抓包把后缀名改成pphphp! - 后缀点空绕过
我们在windows电脑上创建文件时,如果在文件名末尾加上 .或者是空格,它都是会自动忽略或者是删除,在文件上传时也是一样,但是在黑名单中.或者是空格则不会被忽略。
比如:上传.php文件抓包在后面加上点或空格,即可上传!
这里有个循环检测机制,黑名单中会循环检测文件末尾的点和空格,可以抓包加上 (‘.空格.’)或者是(‘空格.空格’)来绕过。
windows文件流绕过
通俗的理解,就是其它文件可以”寄宿“在某一个文件里,而在资源管理器中却只能看到宿主文件!例如: 只有查看文件流才能知道2.txt!
所以利用这一特性,在上传文件后面加上::DATA即可绕过! - 解析漏洞
IIS6.0解析漏洞,实际上是IIS6.0的一些特性导致的;
我们只需上传一个asp的一句话木马
< 3.白名单机制
< 3.1原理
与黑名单机制正好相反,只有在规定条件下才能运行!但是相对而言,白名单机制更加安全些!
< 3.2绕过方法
解析漏洞
.htaccess文件解析漏洞
什么是htaccess?
全称是Hypetext.Assccess(超文本入口) .htaccess也被称为分布式配置文件,提供了针对目录改变配置的方法,在特定的文档目录中放置一个包含一个或多个指令文件,以作用于此目录及其所有子目录!这个功能默认是不开启的!但是伪静态的站一般都会开启这个功能!
这条指令是指.jpg文件会被当作php来解析!攻击时,在上传一句话木马时将文件名改为.jpg上传后,紧接着上传这个文件,.htaccess文件与一句话木马文件上传的先后顺序无影响!
我们直接是无法将文件命名为.htaccess的,这里得使用cmd来命名,在cmd中输入ren 1.txt .htaccess
%00截断与00截断
在很多网站你上传文件后,会自动重命名,但是当读取到0x00时会认为文件已经结束!
比如:上传一个1.php不行,但是可以1.php%00jpg,读取文件是从前往后的,当读取到%00时就会结束!解析文件是从后往前的,所以它会认为我们上传的文件是jpg格式!
%00实际上和00截断原理是一样的,只不过%00是经过URL编码的,解码之后就是0x00
当上传时碰到POST传参,因为POST传参是不会URL解码的,可以上传1.phpajpg用burp抓包后将a的HEX值改为00即可达到同样的效果!
<4.Content-Type方式绕过(MIME绕过)
<4.1原理
部分Web应用系统判定文件类型是通过content-type字段,黑客可以通过抓包,将content-type字段改为常见的图片类型。
<4.2常见的MIME类型
<4.3绕过方法
用BURP抓包将Content-Type改为允许的类型,如image/gif,从而绕过校验!
<5.文件头检测
<5.1原理
在每一个文件(包括图片,视频或其他的非ASCII文件)的开头(十六进制表示)实际上都有一片区域来显示这个文件的实际用法,这就是文件头标志。我们可以通过16进制编辑器打开文件,添加服务器允许的文件头以绕过检测。
<5.2常见的文件头
<5.3绕过方法
在我们编写一句话木马时,在开头处加上上面的文件头,即可绕过!
<6.图片马绕过
<6.1原理
一般文件内容验证使用getimagesize函数检测,会判断文件是否是一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。
<6.2制作流程
新建文件夹,在文件夹中准备一张图片,再准备一个写有一句话木马的.php文件,最后在cmd中输入上述命令,即可生成图片马!
为了应对对图片内容的检测,可以使用图+马+图的方式生成图片马,这种更加隐蔽一些
因为这种合成的图片马一般都在尾部,如果有检测就会失效,而图+马+图则可以有效避开尾部检测!
<7.二次渲染
<7.1原理
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
<7.2绕过方法
可以上传带有一句话木马的gif动图,因为gif比jpg和png的属性要多一些,而且一些基础属性无法改变的,但是在gif中插入一句话木马时要注意插入点,一些插入点会破坏图片!
还有可以配合条件竞争来绕过,因为二次渲染是先让你的图片上传,之后再检测!
<7.3如何判断是二次渲染
先上传一张正常图片,上传成功后下载到本地,利用16进制编辑器进行对比,看哪些数据被改变,哪些数据改变了!
<8.条件竞争
<8.1原理
条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。
<8.2绕过方法
利用图+马生成图片马的方式
意思是在他将源文件删除前在网站根目录生成一个a.php文件。
5.防御方法
<1.文件上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。
<2.判断文件类型。在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
< 3.使用随机数改写文件名和文件路径。文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
<4.使用安全设备防御。文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御,例如:图床。
6.实践出真知
我们拿到的是一台公网机器的WordPress博客系统 没有得到授权请不要进行渗透测试
寻找后台上传点 头像上传点是跳转至其他网站 说明头像上传点行不通
不过找到一个网站的通用的资料库 可以上传资料到这里 但是笔者尝试过无法上传 有后端的检测校验 笔者尝试绕过但是未成功 所以只能从服务器修改上传机制
加入这串代码
回到后台上传点 我们上传一个大马试试
成功上传后 媒体库会保存这个文件 按照路径打开
成功打开大马
登录大马
成功拿下webshell
重新上传一句话木马试试蚁剑连接
<?php @eval($_POST[123]);?>
由于php7禁用了一些函数 并且我无法打开蚁剑插件功能 所以就不执行终端命令了
相关可以参考 blog.csdn.net/qq_36241198…