一个非常详细测试上传的姿势
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个非常详细测试上传的姿势相关的知识,希望对你有一定的参考价值。
【情况】
上传点界面:
这个上传点只有一个界面,且上传后会自动删除。成功突破会返回一串秘钥。
上传点抓包界面如下:
上传一个普通图片,返回路径upload/20160226222154_920.jpg
可以看到,整个上传包没有任何多余的参数。除了文件头+本地文件名+图片内容+按钮
就没别的东西了。
发现会自动重命名,然后下面就是想办法搞清楚它的上传验证机制,通过以下动作探测。
1.验证允许上传的文件后缀类型。
1-1.上传.jpg,成功上传并返回路径。
【得知】
上传文件被重命名
1-2.上传.gif,成功上传但是返回的是.jpg
1-2-1为了验证是否支持.gif,所以把文件头和文件类型都改为gif的,仍然返回后缀为jpg。
【得知】
除白名单以外的后缀类型(不识别的后缀类型),均提交为jpg后缀上传。
1-3.上传.php后缀则失败。
1-3-1.上传.php1或1php或pHp或1phP1同样失败。
1-3-2.考虑用冷格式代替脚本,故上传.cdx和.htr 上传成功但是返回后缀为jpg。
【得知】
匹配到后缀中含有php则上传失败,并且会转为小写。
1-4.把上传类型image/gif修改为php的application/octet-stream 上传.php上传失败,上传.jpg同样失败。
【得知】
验证了上传类型
1-5.上传x.php.jpg返回后缀为jpg。
【得知】
上传文件是从右边匹配的,反之应该上传失败的。
1-6 为了测试截断的支持情况。故;
1-6-1.上传x.jpg□.php返回正常jpg路径。
1-6-2.上传x.php□.jpg则上传失败。
【得知】
1-6-2上传失败说明被成功截断了。至于上传失败的原因在于1-3
1-7.上传x.php.返回jpg后缀。
【得知】
.作为特殊符号,不在后缀匹配范围内。所以.php.可以上传成功。是因为把.作为后缀的一部分,所以上传按照1-2的原则来上传。
1-8.上传x.j正常返回。上传x.正常返回。上传x正常返回。上传.正常返回。
.上传成功
通过以上分析得出此上传点;
1.支持截断,但是没什么卵用。因为截断后的x.php不给上传。
2.只要匹配到后缀有php,则上传失败。不识别的脚本格式均作为jpg上传。
附上传失败的截图:
了解了他的上传机制以后基本上就没有思路了,主要是无处下手。别说path改路径之类的了,就连一个多余的参数都没有。除了文件头+本地文件名+文件内容+按钮。再也没有多出一样东西。
然后想着既然确定了验证上传文件类型,那我们在添加个php的类型。
1.添加好以后是两个上传类型并存,我们先试试jpg能不能正常上传。测试定义两种类型对上传的影响。
可以看到,左边是image/gif(只要是图片类型都可以) 右边是php的类型application/octet-stream
可以正常上传。
接着上传php,如下图:
上传失败。
如果把文件类型定义为application/octet-stream 那么上传任何后缀都是失败的,但是gif和jpg的就可以。还是说明1.验证上传类型为图片 2.后缀验证。
虽然搞清了上传验证规则,但是没卵用。还是突破不了,非常遗憾。直到两天后,看到答案以后。整个人脑子都不好使了。
【突破方法】
将multipart/form-data的大小写改下就可以绕过了
参考资料:http://www.wooyun.org/bugs/wooyun-2015-0125982 这是逐浪CMS爆出的一个漏洞。
我看到突破方法以后很失望。首先是这种情况极少,对实际渗透的意义不大。再者就是也没有给出分析过程和原理。
这样我唯一的收获就是:遇到类似验证的上传点可以改下文件类型大小写试试。
又看了一下乌云给出的上传代码。
大概能看出来原理了。唉,还是有点失望。不过对以后突破上传还是有帮助的。
以上是关于一个非常详细测试上传的姿势的主要内容,如果未能解决你的问题,请参考以下文章