论坛内里讲文件上传的很多,但是内里讲的都不全面,我就鉴戒各位先辈的结晶总结了一个相对全面的。
上传检测流程
通常web站点会有效户注册功能,而当用户登入之后大多数环境下都会存在雷同头像上传、附件上传一类的功能,这些功能点每每存在上传验证方式不严格的安全缺陷,是在web渗出中非常关键的突破口,只要颠末细致测试分析来绕过上传验证机制,每每会造成被攻击者直接上传web后门,进而控制整个web业务的控制权,复杂一点的环境是连合webserver的分析弊端来上传后门获取权限。
一个简单的图来阐明文件上传检测的流程:
通常一个文件以HTTP协议举行上传时,将以POST哀求发送至web服务器,web服务器吸取到哀求后并同意后,用户与web服务器将创建毗连,并传输data。
而一样平常一个文件上传过程中的检测如下图赤色标记部分:
A客户端java检测(通常为检测文件扩展名)
B服务端MIME范例检测(检测Content-Type内容)
C服务端目次路径检测(检测跟path参数相干的内容)
D服务端文件扩展名检测(检测跟文件extension相干的内容)
E服务端文件内容检测(检测内容是否合法或含有恶意代码
客户端检测绕过(java检测)
这类检测通常在上传页面里含有专门检测文件上传的java代码,最常见的就是检测扩展名是否合法。
打开http反向署理工具burp,先任意点击上传一个1.php
点上传,burp里也还没出现任何内容,便弹出了一个告诫框,一看就知道是个客户端验证java,只必要把它禁掉大概通过burp举行署理修改。
burp行署理修改,先将文件扩展名改成jpg
然后上传如今的文件名是1.jpg通过
在burp里将jpg改成php
然后继承上传,末了可以看到1.php乐成上传。
服务端验证绕过(MIME范例检测)
假如服务器端上的upload.php代码如下:
然后我们可以将request包的Content-Type修改
得到服务端的应答:
我们乐成绕过了服务端MIME范例检测,这种服务端检测http包的Content-Type都可以用这种雷同的方法来绕过检测。
服务器检测绕过(目次路径检测)
一样平常就检测路径是否合法,但轻微特别一点的都没有防御。比如比力新的fckeditorphp=2.6.4恣意文件上传弊端,地点:
https://user.qzone.qq.com/1299183598/main
郊果如下:
由于对目次路径的检测不敷严谨而导致可以用0x00截断举行攻击,可以看到图中,在末了将要举行写文件之前的变量状态:
sFilePath=C:/wamp/www/userfiles/image/fuck.php.gif/fvck.gif(.php背面是0x00)
当右图实行move_uploaded_file($oFile['tmp_name'],$sFilePath)这个函数时
1
先将sFilePath写入到指定位置,但是底层操纵应该是调用的雷同于c语言,碰到0x00会主动截断,以是真正写入的实际地点是C:/wamp/www/userfiles/image/fuck.php
2
把本来fvck.gif里的内容(如今应该存在临时文件,雷同于C:/Temp/phpf3at7b如许的文件)然后把C:/Temp/phpf3at7b的内容写入到C:/wamp/www/userfiles/image/fuck.php里,如许便得到了我们所想要的webshell
题目出在了io.php里的ServerMapFolder函数
当POST下面的URL的时间
服务端检测绕过(文件扩展名检测)
对于扩展名检测不强的,时常还可以连合目次路径攻击,比如filename="test.asp/evil.jpg"之类
**黑名单**
黑名单检测黑名单的安全性比白名单的安全性低很多,攻击伎俩天然也比白名单多,一样平常有个专门的blacklist文件,内里会包罗常见的伤害脚本文件。
服务端通过获取上传文件的扩展名来匹配预先界说的非法扩展名数组,假如能乐成匹配的话,以为上传文件不合法,返回报错信息,假如扩展名没有匹配到,则以为上传文件合法,举行文件生存操纵。拿上传图片举例,服务端界说的黑名单:
根据黑名单列表可以看出服务器不答应上传攻击中常用的php、htaccess、asp、aspx等脚本文件,也就是说这些文件都会被服务端所拦截,不能上传乐成。
特别文件名绕过
用像AsP,pHp之类的文件名绕过黑名单检测
名单列表绕过
用黑名单里没有的名单举行攻击,比如黑名单里没有asa或cer之类
特别文件名绕过
比如发送的http包里把文件名改成test.asp.或test.asp_(下划线为空格),这种定名方式在windows体系里是不被答应的,以是必要在burp之类里举行修改,然后绕过验证后,会被windows体系主动去掉背面的点和空格,但要留意Unix/Linux体系没有这个特性。
截断绕过
给个简单的伪代码
双扩展名分析绕过攻击(1)-基于web服务的分析逻辑
比如在Apachemanual中有如许一段形貌:
“Filescanhavemorethanoneextension,andtheorderoftheextensionsisnormallyirrelevant.Forexample,ifthefilewelcome.html.frmapsontocontenttypetext/htmlandlanguageFrenchthenthefilewelcome.fr.htmlwillmapontoexactlythesameinformation.Ifmorethanoneextensionisgivenwhichmapsontothesametypeofmeta-information,thentheonetotherightwillbeused,exceptforlanguagesandcontentencodings.Forexample,if.gifmapstotheMIME-typeimage/gifand.htmlmapstotheMIME-typetext/html,thenthefilewelcome.gif.htmlwillbeassociatedwiththeMIME-typetext/html.”
假如上传一个文件名为help.asp.123起首扩展名123并没有在扩展名blacklist里,然后扩展名123也没在Apache可分析扩展名list里,这个时间它会向前搜寻下一个可分析扩展名,或征采到.php,末了会以php实行。
htaccess文件攻击
共同名单列表绕过,上传一个自界说的.htaccess,就可以轻松绕过各种检测
分析调用/弊端绕过
这类弊端直接共同上传一个代码注入过的非黑名单文件即可,再利用分析调用/弊端
双扩展名分析绕过攻击(2)-基于web服务的分析方式
假如在Apache的conf里有如许一行设置AddHandlerphp5-.php这时只要文件名里包罗.php纵然文件名是test2.php.jpg也会以php来实行。
伤害分析绕过攻击-基于web服务的分析方式
假如在Apache的conf里有如许一行设置AddTypeapplication/x-httpd-php.jpg纵然扩展名是jpg,一样能以php方式实行。
**白名单检测**
服务端通过获取上传文件的扩展名来匹配预先界说的合法扩展名数组,假如未能乐成匹配的话,以为上传文件不合法,返回报错信息,假如扩展名能乐成匹配,则以为上传文件合法,举行文件生存操纵。
拿上传图片举例,服务端界说的白名单:```$WhiteList=array("png","jpg","jpeg","gif");```只答应上传png、jpg、jpeg、gif文件,假如攻击者上传恶意脚本文件(比方php、asp文件)就会被服务端拦截,让攻击者无法攻击服务器。
相对来说比黑名单安全一些,但也不见得就绝对安全了.
截断绕过
用像test.asp%00.jpg的方式举行截断,属于白名单文件,再利用服务端代码的检测逻辑弊端举行攻击,如今我只碰到过asp的程序有这种弊端
分析调用/弊端绕过
这类弊端直接共同上传一个代码注入过的白名单文件即可,再利用分析调用/弊端
.htaccess文件攻击
无论是黑名单还是白名单,直接点就是直接攻击.htaccess文件(着实如今我只见过连合黑名单攻击的,在背面的攻击分类里,我会把它归到黑名单绕过攻击里。但网上是把这个单独分类出来的,大概别人有一些我不知道的方式和本领吧,以是在这里我也临时保存这个单独分类)在PHPmanual中提到了下面一段话:
move_uploaded_filesection,thereisawarningwhichstates‘Ifthedestinationfilealreadyexists,itwillbeoverwritten.’
假如PHP安全没设置好,就可以通过move_uploaded_file函数把本身写的.htaccess文件覆盖掉服务器上的,如许就能恣意界说分析名单了。
服务端检测绕过(文件内容检测)
假如文件内容检测设置得比力严格,那么上传攻击将变得非常困难,也可以说它是在代码层检测的末了一道关卡,假如它被突破了,就算没有代码层的弊端,也给背面利用应用层的分析弊端带来了机遇。我们这里重要以最常见的图像范例内容检测来举例:
重要是检测文件内容开始处的文件幻数,比如图片范例的文件幻数如下:
要绕过jpg文件幻数检测就要在文件开头写上下图的值
要绕过gif文件幻数检测就要在文件开头写上下图的值
要绕过png文件幻数检测就要在文件开头写上下面的值
然后在文件幻数背面加上本身的一句话木马代码就行了
文件相干信息检测
图像文件相干信息检测常用的就是getimagesize()函数,只必要把文件头部分伪造好就ok了,就是在幻数的底子上还加了一些文件信息,有点像下面的布局:
文件加载检测
这个是最失常的检测了,一样平常是调用API或函数去举行文件加载测试,常见的是图像渲染测试,再失常点的乃至是举行二次渲染(背面会提到)。对渲染/加载测试的攻击方式是代码注入绕过;对二次渲染的攻击方式是攻击文件加载器自身。
先说下对渲染/加载测试攻击-代码注入绕过,可以用图像处理惩罚软件对一张图片举行代码注入。用winhex看数据可以分析出这类工具的原理是在不粉碎文件本身的渲染环境下找一个空缺区举行添补代码,一样平常会是图片的解释区。对于渲染测试根本上都能绕过,毕竟本身的文件布局是完备的.
但假如碰到失常的二次渲染,根本上就没法绕过了,估计就只能对文件加载器举行攻击了。
一样平常举行碰到二次渲染,想绕过,就如今个人履历还没想出方法,它相称于是把本来属于图像数据的部分抓了出来,再用本身的API或函数举行重新渲染,在这个过程中非图像数据的部分直接就被隔离开了。能想到的一个思绪就是基于数据二义性,即让数据既是图像数据也包罗一句话木马代码,就像shellcode通过数据二义性绕过IDS检测特别字符一样的原理,但如今我还不知道怎么构造出如许的图像文件。
假如要对文件加载器举行攻击,常见的就是溢出攻击,上传本身的恶意文件后,服务器上的文件加载器会主动举行加载测试,加载测试时被溢出攻击实行shellcode比如access/mdb溢出,各人可以参考下https://lcx.cc/?FoxNews=1542.html总之对文件完备性检测的绕过,通常就直接用个布局完备的文件举行代码注入即可没须要再去测到底是查抄的幻数还是文件头布局之类的了。
分析攻击
攻击角度来分是如许的:
直接分析(完全没防御或有一点简单的防御)
比如我们直接就可以上传一个扩展名是.php的文件,只必要简单地绕过客户端java检测大概服务端MIME范例检测就行了。
共同分析(有肯定程度的防御)
我们可以明白为先代码注入到服务器上,上传一个带有一句话木马的图片或文件之类让它待在某个位置,等待这一个分析的共同。(比如php的文件包罗分析,web服务器的分析弊端,.htaccess分析等)
本地文件包罗分析
重要是php的本地文件包罗(长途文件包罗不属于上传攻击绕过范畴)
htaccess分析
就不消多说了,看看之前.htaccess文件攻击的谁人案例,用户本身界说怎样去调用分析器分析文件就可以了。
web应用程序分析弊端以及其原理
Apache分析弊端
分析:test.php.恣意不属于黑名单且也不属于Apache分析白名单的名称形貌:一个文件名为x1.x2.x3的文件,Apache会从x3的位置往x1的位置开始实行分析,假如x3不属于Apache能分析的扩展名,那么Apache会实行去分析x2的位置,如许不停往前实行,直到碰到一个能分析的扩展名为止
IIS分析弊端
分析-test.asp/恣意文件名|test.asp;恣意文件名|恣意文件名/恣意文件名.php形貌-IIS6.0在分析asp格式的时间有两个分析弊端,一个是假如目次名包罗".asp"字符串,那么这个目次下全部的文件都会按照asp去分析,另一个是只要文件名中含有".asp;"会优先按asp来分析。
IIS7.0/7.5是对php分析时有一个雷同于Nginx的分析弊端,对恣意文件名只要在URL背面追加上字符串"/恣意文件名.php"就会按照php的方式去分析。
Nginx分析弊端
分析-恣意文件名/恣意文件名.php|恣意文件名%00.php形貌-如今Nginx重要有这两种弊端,一个是对恣意文件名,在背面添加/恣意文件名.php的分析弊端,比如本来文件名是test.jpg,可以添加为test.jpg/x.php举行分析攻击。尚有一种是对低版本的Nginx可以在恣意文件名背面添加%00.php举行分析攻击。
总结
写的有点多,这次就先如许了,代码层,应用层等等弊端出如今多个层面,总之安全学习之路还很长,很长.......
*泉源:i春秋社区,作者:by每天
专注信息安全人才作育
搭建企业人才供需桥梁
咨询QQ群:495066536
上一篇:游戏服务器主机设置(游戏服务器主机设置方案)「游戏服务器主机配置方案」
下一篇:标称480g的固态硬盘只有457g(480g固态硬盘为什么只表现440个g)「480g固态只有447g为什么呀?」
我要评论