07_不安全的文件下载和上传漏洞
【Web安全从入门到放弃】01_暴力破解漏洞
【Web安全从入门到放弃】02_跨站脚本漏洞
【Web安全从入门到放弃】03_跨站请求伪造(CSRF)漏洞
【Web安全从入门到放弃】04_Sql-Inject漏洞
【Web安全从入门到放弃】05_远程命令、代码执行漏洞
【Web安全从入门到放弃】06_文件包含漏洞
文件下载漏洞概述
很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。
但是,如果文件下载功能设计不当,则可能导致攻击着可以通过构造文件路径,从而获取到
后台服务器上的其他的敏感文件。( 又称:任意文件下载)
pikachu靶场例子:
点击名字就可以下载图片,然后我们看一下下载链接
http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=ns.png
它是直接将文件名上传到后台进行寻找下载,如果我们更改一下文件名是不是可以下载其他文件,尝试一下。
我在根目录下新建一个1.txt文件,然后我进行访问下载它看能不能行。
http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../../../1.txt
输入链接后跳转到下载界面,看来是能下载的。
后台源码:
当我们选择某一张图片时,就会通过a标签发送下载地址进行下载。
命令注入漏洞-防范措施
1.对传入的文件名进行严格的过滤和限定
2.对文件下载的目录进行严格的限定;
不安全的文件,上传漏洞解析概述
因为业务功能需要,很多web站点都有文件.上传的接口,比如:
1.注册时上传头像图片(比如jpg,png,gif等) ;
2.上传文件附件( doc,xIs等) ;
而在后台开发时并没有对上传的文件功能进行安全考虑或者采用了有缺陷的措施,导致攻击者可以通过
一些手段绕过安全措施从而上传一些恶意文件 (如:一句话木马)
从而通过对该恶意文件的访问来控制整个web后台。
文件上传漏洞测试流程
1.对文件上传的地方按照要求上传文件,查看返回结果(路径,提示等);
2.尝试上传不同类型的“恶意”文件,比如xx.php文件,分析结果;
3.查看htm|源码,看是否通过js在前端做了上传限制,可以绕过;
4.尝试使用不同方式进行绕过:黑白名单绕过/MIME类型绕过/目录0x00截断绕过等;
5.猜测或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试;
不安全的文件上传漏洞服务端验证
文件上传漏洞之服务端验证绕过( MIME )
文件上传漏洞之服务端验证绕过( getimagesize )
MIME介绍:
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件
用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来
打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等, 后面
定义具体的种类。常见的MIME类型,比如:
超文本标记语言文本.html,.html text/html
普通文本.txt text/plain
RTF文本.rtf application/rtf
GIF图形.gif image/gif
JPEG图形.ipeg, jpg image/jpeg
$_FILES()函数介绍:
通过使用PHP的全局数组$_ FILES ,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的input name ,第二个下标可以是"name", “type”, “size”, “tmp_ name"或"error”.
就像这样:
$_FILES[file"]["name"]
一被上传文件的名称
$_FILES["file"]["type"]
-被上传文件的类型
$_FILES["file"]["size"]
被上传文件的大小,以字节计
$_FILES["file"]["tmp. name"]
存储在服务器的文件的生时副本的名称
$_FILES["file"]["error"]
- 由文件上传导致的错误代码
MIME绕过:
先正常上传一张图片看看返回的结果,然后尝试上一句话木马。
返回结果说只能上传jph,jpeg,png格式文件。我们进行抓包修改MIME的信息进行绕过验证。
修改这里的信息为image/jpeg进行上传。
文件成功上传,用菜刀或蚁剑链接后台即可。
可以看到我们已经进入到后台页面了。
Getimagesize ( ) 函数:
Getimagesize ( ) 返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。
是否可以绕过呢?可以,因为图片头可以被伪造。
文件包含漏洞之文件上传漏洞的利用
图片木马的制作:
方法1 :直接伪造头部GIF89A
方法1.CMD: copy /b test.png + muma.php ccc.png
方法2.使用GIMP (开源的图片修改软件), 通过增加备注,写入执行命令
图片马的制作方法:
打开命令窗口:
切换到对应的路径,然后输入窗口命令
copy webshell.jpg /b + backdoor.php /a backdoor.jpg
webshell.jpg就是普通的jpg文件
backdoor.php是一句话木马
bakcdoor.jpg为生成的图片马
不安全的文件上传漏洞-防范措施
不要在前端使用JS实施上传限制策略
通过服务端对上传文件进行限制:
1.进行多条件组合检查:比如文件的大小,路径,扩展名,文件类型,文件完整性
2.对上传的文件在服务器上存储时进行重命名(制定合理的命名规则)
3.对服务器端_上传文件的目录进行权限控制(比如只读) ,限制执行权限带来的危害