文件上传小结

背景:服务端代码未对客户端上传的文件做严格的过滤,导致用户可以上传任意文件,包括脚本文件

原理:上传的文件能被Web服务器当作脚本来执行(经常结合文件包含和文件解析);攻击者可以访问到上传文件的路径

类型主要分为以下几种:

客户端检测

程序员使用javascript来拒绝非法文件上传,一般是限制上传类型和文件大小

绕过方式

中间人(burp)改包

**是在HTTP层做手脚

**有一个需要注意的点儿是:请求头Content-Length(实体正文长度),当filename修改时(长度会增加或减少),Content-Length也会改变,此时应当修改Content-Length(修改成实际的请求长度就行)

**上传正常文件抓包修改文件filename;抓包修改content-type

直接禁用js就行

服务器端检测

黑名单过滤

定义不允许上传的文件扩展名。只针对黑名单中没有的后缀名,文件才能上传成功。

绕过

1.从黑名单中找到开发人员忽略的扩展名 。可用burp枚举后缀名,寻找黑名单中没有过滤的后缀名

如:upload-labs-4 未禁止.htaccesss文件上传

2.如果未对文件接收到的文件名扩展名进行大小写转换操作,则可以大小写绕过黑名单验证:

windows:大小写不敏感

linux:大小写敏感

3.在windows系统下,文件以空格或 “.“作为结尾,系统会自动去除 ”.“或空格。因此可上传文件的后缀名 为”.php_“(下划线为空格)、”.php.“,Windows将会自动去除小数点和空格, 服务器端接收到的文件后缀名都是“.php”。

4.特殊符号绕过

windows下文件名后+” ::DATA“,如上传文件名为test.php::DATA则会在服务器上生成一个test.php文件,其内容和所上传内容相同,并被解析。虽然在windows下新建的文件名中包含特殊符号不能成功创建,但可以通过burp改包

5.路径拼接:

eg:用户新建 1.php.+空格+(具体根据源码来构造)

6.双写绕过:

如果只对黑名单中的内容进行替换,且只替换一次,可造成双写绕过

7.%00:

上传 a.php.jpg 抓包后在php后添加一个字符修改其HEX值为%00,解析后就为a.php

  1. .htaccess 和 .user.ini 绕过:

.htaccess-------是伪静态环境配置文件,用于lamp,只适用于apache

条件: ①、Allow Override All
②、LoadModule rewrite_module modules/mod_rewrite.so #rewrite模块为开启状态

内容:

LINUX:
(1)AddType application/x-httpd-php .jpg
(2)
<FilesMatch "BaiZe">
setHandler application/x-httpd-phpBZ
</FilesMatch>  
将所有文件名包含BaiZe的文件作为php文件来解析
Windows:
AddHandler fcgid-script .png
    FcgidWrapper "D:/phpstudy_pro/Extensions/php/php5.6.9nts/php-cgi.exe" .png

.user.ini-------lnmp文件,放在根目录下,存储用户网站的文件夹路径地址。防止跨目录访问和文件跨目录读取

内容:

Linux:
AddType application/x-httpd-php .jpg

<FilesMatch "BaiZe">
setHandler application/x-httpd-phpBZ

9.竞争条件攻击----利用较短的时间差

将文件(1.php)先上传到临时目录,然后再检测,检测在删除

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

上传成功后,客户端立即访问1.php。然后就会在服务端当前目录下自动生成2.php

白名单

定义允许上传的扩展名,如果上传文件的后缀名被允许(命中),则认为该文件合法,否则不允许上传

绕过

1.%00绕过:

一般上传的文件不是直接送到服务器,而是先放到临时目录,然后再重命名(如网上图片的数字),最后再发往服务器。再url中%00表示ascll中的0,而ascll中0作为特殊字符保留,表示字符串的结束。%00只针对GET传参(走url栏), 适用于php>5.3.42,且服务器中的php.ini中的magic_quotes_gpc = Off。

2.竞争攻击

同黑名单

3.图片马-----------------图片 + 代码

进入图片文件(1.png),一句话木马文件(1.php)所在目录,cmd窗口打开,然后执行如下命令

coopy 1.png/b + 1.php/a 1.jpg

然后生成1.jpg这个图片马

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值