0x00 前言
小菜今天在测试网站的时候,发现存在上传点,于是尝试各种姿势,环境为iis7.5,于是乎来一个解析漏洞,发现并不可以,最终百度乎,发现上传有很多种利用方法,所以小菜就去学习了一下截断上传,搜集了很多资料,做一下总结,大牛完全可以飘过,基础文章。
0x01 截断原理
首先科普一下,网上说的介绍都有神马0x00,%00,/00之类的截断,看的小菜我晕乎乎的,其实看完才知道,原来都是一样的,只是不同表示而已,截断的核心在于chr(0)这个字符,这个函数表示返回以数值表达式值为编码的字符,举个例,print chr(78) 结果是N,所以char(0)表示的ascll字符是null,当程序输出包含chr(0)变量时,chr(0)后面的数据会被截断,后面的数据直接忽略,导致漏洞产生。
0x02 0x00截断
我先把网上盛行的集中上传截断各自举个例,然后到最后总结一下阶段的核心,首先是0x00截断,00截断是将上传文件名或路径名中使用ascll码值为0的字符(也就是null)来进行截断,%00一般用在URL中用于截断url来进行文件包含,两者原理都一样,都是ascll为0的字符,只是形式不同而已。
(1)用burp工具来截断,设置代理,然后抓包,我们要修改的地方我已标注
(2)在/Upload/后面加一个空格,点开hex,将其对应的20改成00即可,就可以绕过后缀名的过滤,从而得到webshell
0x03 %00截断
我就不过多赘述了,前面原理也都讲的差不多,直接上方法,将文件名后面直接加上%00.jpg,先绕过后缀上传,然后利用burp的urldecode功能,其实和/00截断将hex20变成00一样,效果一样,两种方法都可以拿webshell
0x04 总结
上面两种其实是一个原理,下面我们就其原理总结倒腾一下,明白了原理也就发现,截断上传也不是很难,下面我们就进入正轨,最开始我也说了,截断上传的核心在chr(0)(即null)的利用。
我们可以写个代码验证一下,在网上找到了一个浅显易懂的代码,下面我们看代码
<%
path="upfiles/picture/"
file="XXX.jpg"
upfilename=path & file '最后的上传地址
%>
大家应该能清楚的看懂这个意思,path为上传的路径,file是生成的文件名,而upfilename则是最终上传后路径,试想一下,如果path是用户可以控制的,那么截断漏洞就产生了。比如我更改的path为upfiles/picture/1.aspchr(0)&XXX.jpg,chr(0)会忽略后面的东西,看看,upfiles/picture/1.asp,很熟悉吧一个webshell就这样诞生了。
0x05 后记
关于截断我就写这么多了,基本上例子和原理也都涵盖到了,希望能对某些不理解截断的人一点儿帮助,其实我还是想说,凡事还是得靠实践,实践才能出真知啊,知道原理了,就要去实践,多多实战就会更加理解,不然就会忘了,以后还得继续学,如果有什么错误还请大牛指点。
资料汇总:http://www.jinglingshu.org/?p=1339
https://www.91ri.org/2404.html
http://tieba.baidu.com/p/2158985760