Web安全攻防-----学习笔记(四)之文件上传

16 篇文章 0 订阅
0 篇文章 0 订阅

4.8 文件上传

4.8.2 有关知识

1.原因

上传文件时,如果服务端未代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)

2.危害

非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为WebShell,也可将WebShell脚本称为一种网页后门。

4.8.3 JS检测绕过攻击

目标地址:https://www.bihuoedu.com/vul/unsafeupload/clientcheck.php

两种方法绕过:

  • 使用浏览器的插件,删除(客户端)检测文件后缀的JS代码,然后删除==上传
  • 先将文件后缀改成允许上传的,如jpg、png等,绕过JS的检测,再抓包,把后缀名改成可执行文件的后缀即可上传成功。

采用法2:

返回成功,

4.8.5 文件后缀绕过攻击

服务端代码中限制了某些后缀的文件不允许上传,但是有些Apache是允许解析其他文件后缀的,例如在httpd.conf中,如果配置有如下代码,则能够解析php和phtml文件。

AddType application/x-httpd-pho .php .phtml

所以,可以上传一个后缀为phtml的webshell。

在Apache 的解析顺序中,是从右到左开始解析文件后缀的,如果最右侧的扩展名不可识别,就继续往左判断,直到遇到可以解析的为止 。

4.8.7 文件类型绕过攻击

如果服务端代码是通过Content-type的值来判断文件的类型,那么就存在被绕过的可能,因为Content-type的值是通过客户端传递的,可以任意修改的。

上传PHP文件时,为application/octet-stream:

上传jpg格式的文件时,为image/jpeg:

注:在php中还存在一种相似的文件上传漏洞,PHP函数getimagesize()可以获取图片的宽、高等信息,若上传的图片不是图片文件,则该函数获取不到信息。getimagesize了解:https://www.runoob.com/php/php-getimagesize.html

但是:可以将一个图片和WebShell合并为一个文件,例如使用以下命令:

cat image.png webshell.php > image.php

或者:

 此时使用getimagesize就可以获取图片信息,且WebShell的后缀是PHP,也能被Apache解析为脚本文件。

目标地址:https://www.bihuoedu.com/vul/unsafeupload/getimagesize.php

图片木马即做好了,点击上传,

尝试访问一下这个图片,

https://www.bihuoedu.com/vul/unsafeupload/uploads/2019/09/12/2019/09/12/3139975d79b2528df37250885307.jpg

可以看到图片但是木马并没有执行,接下来我们可以之前讲过的本地包含文件漏洞原理来进行操作
我们可以利用include,我们在实际中需要对一些文件包含的点去进行测试,来找到include在哪个目录里,我们在测试中手动尝试一下就行。

unsafeupload/uploads/2019/09/12/2019/09/12/3139975d79b2528df37250885307.jpg

4.8.9 文件截断绕过攻击

截断类型:PHP %00截断

截断原理:由于00代表结束符,所以会把00后面的所有字符删除

截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态。

修改参数jieduan为1.php%00.jpg,文件被保存到服务器时,%00会把.jpg和按时间生成的图片文件名全部截断,那么文件名就剩下1.php因此成功上传WebShell脚本。

4.8.11 竞争类型攻击

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

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

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

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

4.8.13 文件上传建议

  • 通过白名单的方式判断文件后缀是否合法
  • 对上传后的文件进行重命名,例如rand(10,99).date("YmdHis").jpg"

续:Web安全攻防-----学习笔记(四)之暴力破解、命令执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值