00:00
上午
周一
1月1日
枫-WIKI

任意文件上传

YOUZAI2023/05/10常见漏洞WEB安全

漏洞原理

web 应用开放了文件上传功能,并且对上传的文件没有进行足够的限制;另一方面,程序开发部署的时候,没有考虑到系统特性和过滤不严格;再者就是,攻击者通过 web 服务器解析漏洞绕过显示,导致可以上传任意文件。

漏洞危害

  • 文件上传漏洞最直接的威胁就是上传任意文件,包括恶意脚本、可执行程序、如果是 Linux 系统且开启了 ssh 可以上传公钥至服务器替换,达到控制服务器的目的。
  • 如果 web 服务器所保存上传文件的可写目录具有执行权限,那么就可以直接上传后门文件,导致网站沦陷。
  • 如果攻击者同通过其他漏洞进行提权操作,拿到系统管理权限,那么直接导致服务器沦陷。
  • 同服务器下的其他网站无一幸免,均会被攻击者控制。

修复建议

  • 将文件上传目录直接设置为不可执行。
  • 文件类型检查:强烈推荐白名单方式,结合 MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传)。
  • 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件。
  • 对于图片的处理可以使用压缩函数或 resize 函数,处理图片的同时破坏其包含的 HTML 代码。
  • 单独设置文件服务器的域名。

测试方法

  • 如果是前端检查后缀名,将文件名修改成 test.png,上传后抓包修改成 test.php
  • 修改 Content-Typeimage/png 等。
  • 修改文件后缀名,使用大小写或者双写,如 test.PHPtest.pphphp
  • 上传 .htaccess 文件,文件内容SetHandler application/x-httpd-php,作用是当前目录以及子目录所有文件将会被当作 php 解析。
  • 使用文件流特性,test.php::$DATA
  • 文件名后缀加上 %000x00
  • 替换文件的头部信息,<0x89>PNG <0x47>GIF <0xFF>JEPG
  • 文件后缀名加空格或者点,test.php test.php. test.php..
  • 使用图片马,需要配合文件包含漏洞,copy test.png /b + test.php /a test.jpg
  • 使用条件竞争,利用服务端删除文件的时间差,一个线程上传文件,一个线程访问该文件。
  • 使用.user.ini

.user.ini:

# 绕过跨目录限制
open_basedir=:/
# 在php文件代码执行前用require包含进指定文件
auto_prepend_file=top.html
# 在php文件最后用require包含进指定文件
auto_append_file=down.html

# 利用条件
服务器脚本语言为PHP
服务器使用CGI/FastCGI模式
上传目录下要有可执行的php文件

user.php:

<?php
	eval($_post["pass"])
?>

Last Updated 2023/6/30 16:13:01