赞
踩
文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。
根据简介,主要分为上传(客户端)、解析(服务端)两大类。
通过js代码,对文件后缀进行判断。
一般使用白名单或黑名单的方式,判断文件后缀,根据后缀决定用户是否上传。
Firebug插件删除判断函数
使用靶机pikachu做例子,直接通过F12修改。
tupian.php
<?php echo phpinfo(); ?>
js检测到不符合要求
F12查看代码
checkFileExt
客户端通过onchange实践的checkFileExt函数进行检测,我们删除掉调用这个函数的部分。
删除后
我们再次上传tupian.php
文件上传成功
可以看路径,我们修改上方的url,进行访问。
代码已运行
可以看到代码已经运行。
中间人攻击-burpsuite拦截
文件名符合规则,使用burpsuite拦截后,修改文件后缀即可。方法类似下方MIME攻击
上传无法防御,可以进行文件重命名。
js的检测基本没有了,开始使用后端代码进行检测,虽然进行MIME检测是使用的后端代码,但是,依然是从客户端获取的,可以从客户端修改,我还是归于上传这一类了。
简单来说,在请求头中Content-Type:type/subtype来表明类型,常见的有
text/plain
text/html
image/jpeg
image/jpg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream
中间人攻击-burpsuite拦截
burpsuite拦截
修改Content-Type
Forward
可以看到发送过去了,后序验证同上,不再重复截图。
上传无法防御,可以进行文件重命名。
一些后端代码含有一些函数,能够判断文件类型,获取文件的一些信息。以php为例,php的getimagesize函数可以获取图像的一些信息,如果不是图像,那么无法获取信息,就会报错。
有的站点使用文件头来检测文件类型,这种检查可以在Shell前加入对应的字节以绕过检查。几种常见的文件类型的头字节如下表所示
类型 | 二进制值 |
---|---|
JPG | FF D8 FF E0 00 10 4A 46 49 46 |
GIF | 47 49 46 38 39 61 |
PNG | 89 50 4E 47 |
TIF | 49 49 2A 00 |
BMP | 42 4D |
如果你学过图像相关的课程,比如信息隐藏这门课,会使用Matlab读取图像,进行信息隐藏,你就会知道图像的一些格式,符合格式的话就是那个类型的文件,一般是头部的一些字节。我们通过将恶意代码前面添加其他类型文件的头部就可以伪造成另一个类型,进而绕过检测。
我们修改tupian.php为tupian.php.jpg,进行上传。
图片格式检测
可以看到,图片没有办法上传,虽然后缀对,但是内部是不正确的。
我们使用Linux中的xxd或od命令来查看.PNG或.png图片的信息(博主虽然是在Windows中,但是使用的是cygwin)。
2.PNG
ca.png
可以看到文件前面是一样的。
使用cmd命令 copy /b CA.png + tupian.php tupian.png
生成新图片
目录下会生成新图片tupian.png,而且符合png格式,但是在图片后面是php代码。
上传成功
打开
图片上传成功,但是打开后还是图片。
我们再使用之前的文件包含漏洞就可以了,注意url。
php代码运行成功
php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。
jsp引擎则可能会解析 jspx
/ jspf
/ jspa
/ jsw
/ jsv
/ jtml
等后缀
asp支持 asa
/ asax
/ cer
/ cdx
/ aspx
/ ascx
/ ashx
/ asmx
/ asp{80-90}
等后缀。
除了这些绕过,其他的后缀同样可能带来问题,如 vbs
/ asis
/ sh
/ reg
/ cgi
/ exe
/ dll
/ com
/ bat
/ pl
/ cfc
/ cfm
/ ini
等。
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。