渗透测试之文件上传

文件上传漏洞的介绍

  1. 上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp,aspx,php,jsp等格式的文件)。
  2. 非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为WebShell,也可以将WebShell脚本称为一种网页后门,WebShell脚本具有非常强大的功能,比如查看服务器目、服务器中的文件、执行系统命令等。

如何利用文件上传漏洞

JS检测绕过攻击

JS检测绕过上传漏洞常见于用户选择文件上传的场景,如果上传文件的后缀不被允许,则会弹窗告知,此时上传文件的数据包并没有发送到服务端,只是在客户端浏览器使用JavaScript对数据包进行检测,这时有两种方法可以绕过客户端JavaScript的检测:

1. 使用浏览器的插件,删除检测文件后缀的JS代码,然后上传文件即可绕过。
2. 首先把需要上传文件的后缀改成允许上传的,如:jpg,png等,绕过JS的检测再用BP抓包,把请求头中  filename  里的后缀名改成可执行文件的后缀 即可上传成功。 

文件后缀绕过攻击

文件后缀绕过攻击时服务端代码中限制了某些后缀的文件不允许上传

  1. 但是有些Apache是允许解析其他文件后缀的,例如在httpd.config中,如果配置有如下代码,则能够解析php和phtml文件。
AddType application/x-httpd-php .php .phtml

因此可以上传一个后缀为phtml的WebShell来绕过服务端对php后缀的检测。

  1. 在Apache的解析顺序中,是从右到左开始解析文件后缀的,如果最右侧的扩展名不可识别,就继续往左判断,直到遇到可以解析的文件后缀为止,所以如果上传的文件名类似 1.php.xxxx,因为后缀xxxx不可以解析,所以向左解析后缀php。

文件类型绕过攻击

在客户端上传文件时,通过Burp Suite抓取数据包,当上传一个php格式的文件时,可以看到数据包中Content-Type的值是application/octet-stream,而上传jpg格式的文件时,数据包中Content-Type的值是image/jpeg
如果服务端代码是通过Content-Type的值来判断文件的类型,那么就存在被绕过的可能,因为Content-Type的值是通过客户端传递的,是可以任意修改的。所以当上传一个php文件时,在Burp Suite中将Content-Type修改为image/jpeg,就可以绕过服务端的检测。

文件截断绕过攻击

截断类型:PHP%00截断
截断原理:由于00表示结束符,所以会把后面的所有字符删除。
截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态。
如果你能拿到这个实验吧的flag那你的文件截断绕过攻击就可以入门了。 如果不会找度娘

竞争条件攻击

一些网站上传文件的逻辑是先允许上传任意文件,然后检查上传的文件是否包换WebShell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作),攻击者就可以利用这个时间差完成竞争条件的上传漏洞攻击。

攻击者先上传一个WebShell脚本10.php,10.php的内容是生成一个新的WebShell脚本shell.php,10.php的代码如下所示:

<?php
  fputs(fopen('../shell.php','w'),'<?php @eval($_POST[a]) ?>');
?>

当10.php上传成功后,客户端立即访问10.php,则会在服务端当前目录下自动生成shell.php,这时攻击者就利用时间差完成了WebShell的上传。

文件上传修复建议

  1. 通过白名单的方式判断文件后缀是否合法。
  2. 对上传后的文件进行重命名,例如rand(10,99),date(“YmdHis”).".jpg"
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值