漏洞学习笔记之文件上传

文件上传原理:

攻击者通过网站的文件上传功能比如头像上传,图片上传,文档上传等上传了恶意的文件通过网络协议发送到了服务器端,但前端未做好严格的过滤和检查,致使服务器端解析了恶意文件,文件被保存到服务器端。典型的一句话木马文件上传,通过蚁剑等工具进行连接从而实现控制WEB网站的目的。

文件上传流程:

检测流程:

漏洞利用流程:

文件上传界面->尝试绕过检测,上传恶意文件->获取上传的文件的位置->剑等工具连接获取服务器端权限

绕过方式:

1、前端验证检测绕过:

在上传界面会有格式验证的JavaScript代码,这个是我们可以通过禁用js防护的方式控制的(火狐浏览器的插件Javascript Switcher专门用于禁用JS))

2、后缀绕过(针对黑名单检测):

有的服务器端会对一些后缀设立黑名单,但是有一些规则过滤不够严谨。

大小写绕过:.PHp

点或空格绕过:.php.,.php ,.php.. 

       Windows对文件命名的规范导致无法直接对文件重命名后面加空格,加上点也会自动生成没有点的文件。所以要用bp抓包加空格或者加点再放过。这里有些网站也对点进行了过滤,我们可以看它这个过滤是不是循环的,如果是一次性的就bp抓包多加几个点试试。

特殊后缀绕过:服务器侧过滤规则完全匹配不够严谨,在某些特定的情况下的后缀也能够被当作php文件进行解析,例如php3、php4、phtml、pht等情况。
  /*可以使用phtml、php3、php4、php5,当然前提是apache服务器,同时在配置文件夹中需要有将AddType application/x-httpd-php .php .phtml .phps .php1 .php4 .pht 这样的一段话前面的注释删除,重启phpstudy让其生效。*/

双写绕过:服务器设置规则在匹配到关键字后编辑删除,这个时候我们可以进行后缀双写例如.pphphp。

::$DATA绕过:未对后缀名去::$DATA处理,利用windows文件系统特性可绕过检测如.php::$DATA可绕过对.php的检测,要用bp抓包加::$DATA再放过

3、后缀绕过(针对白名单检测):

双扩展名绕过:上传文件时,文件名可能包含两个扩展名,例如 shell.php.jpg。某些服务器配置可能会忽略最后一个扩展名,从而将文件当作 PHP 脚本执行。

这样的成功率是非常低的,类似于双扩展名绕过的还有00截断绕过,在双扩展的基础上提高成功率。%00为结束符,只能用于php版本低于5.3的。是针对url(get请求)中绕过例如.php%00png 0x00截断的原理与%00截断一致,0x00截断针对文件名在请求体(即post请求)中的绕过,需注意的是0x00截断并非直接加0x00,而是要加空格并将空格对应的20编码改为00(在bp中操作);

修改文件头:即使文件扩展名被限制,攻击者可能会修改文件的头部信息,试图让服务器执行隐藏在其中的代码。

MIME绕过:使用bp抓包修改http请求包中的Content-Type字段的值为合法MIME类型;

  Content-Type: image/gif(gif图像)
  Content-Type: image/jpg(jpg图像)
  Content-Type: image/png(png图像)

4、文件内容绕过(文件头,文件内容检测):

文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。网页会对文件头和文件内容进行检测
  JPEG (jpg),文件头:FF D8 FF E1
  PNG (png),文件头:89 50 4E 47
  GIF (gif),文件头:47 49 46 38

改幻数:

在文件内容开头写文本GIF89a即可绕过对文件幻数的检测;

做图片马:

可以用notepad++在图片1.jpg内容最后加上一句话木马,不过这种方法可能会出错

也可以在终端合成图片马 copy 1.jpg/b+1.php/a 2.jpg 

替换一句话木马格式:

检测到非法:<?php @eval($_POST['cmd']);?>
可替换为:<script language="php">eval($_POST['cmd'];<?script>

防护建议:

黑白名单不多赘述

设置上传目录最小权限:对上传文件到的目录做不可执行权限

随机数时间戳:这个是我自己想的,不知道可不可行,在重放攻击章节学到随机数和时间戳,在文件上传尝试绕过的时候多会利用bk抓包修改内容等,在这个过程中是否可利用此种手法使得数据包失效。

避免存储在 Web 可访问目录:将上传的文件存储在 Web 根目录之外的路径,确保这些文件无法直接通过 URL 访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值