渗透之路基础 -- 文件上传

具体还是要根据实战情况来判断分析,本文仅供思路学习和参考漏洞危害可以直接上传Shell,导致服务器getshell漏洞形成Web应用程序没有对上传文件的格式进行严格过滤,还有一部分是攻击者通过Web服务器的解析漏洞来突破Web应用程序的防护;通常都会出现在,上传功能上文件上传格式及解析​没有解析漏洞的情况下,格式代码必须要和文件格式一直,否则无法正常解析运行,如果存在解析漏洞的情况下,格式代码可以...

渗透之路基础 -- 文件上传

具体还是要根据实战情况来判断分析,本文仅供思路学习和参考

漏洞危害

可以直接上传Shell,导致服务器getshell

漏洞形成

Web应用程序没有对上传文件的格式进行严格过滤 , 还有一部分是攻击者通过 Web服务器的解析漏洞来突破Web应用程序的防护;通常都会出现在,上传功能上

文件上传格式及解析

​ 没有解析漏洞的情况下,格式代码必须要和文件格式一直,否则无法正常解析运行,如果存在解析漏洞的情况下,格式代码可以和不同格式相互解析

​ 之后也会发出关于解析漏洞的文章!

漏洞防御

可以针对文件名文件大小文件内容文件类型等进行防御

  1. 检查文件上传路径 ( 避免 0x00 截断、 IIS6.0 文件夹解析漏洞、目录遍历 )

  2. 文件扩展名检测 ( 避免服务器以非图片的文件格式解析文件 )

  3. 文件 MIME验证 ( 比如 GIF 图片 MIME为 image/gif,CSS 文件的 MIME为 text/css 等 ) 3. 文件内容检测 ( 避免图片中插入 webshell)

  4. 图片二次渲染 ( 最变态的上传漏洞防御方式 , 基本上完全避免了文件上传漏洞 )

  5. 文件重命名 ( 如随机字符串或时间戳等方式 , 防止攻击者得到 webshell 的路径 )

注意:若攻击者上传了shell之后,肯定会通过某刀剑进行连接,所以尽量不要暴露文件路径,并且设置访问权限,以进一步防御

文件上传验证及突破

文件过滤,验证后缀:

  1. 文件头验证

  2. 文件类型验证

  3. 文件后缀验证

    绕过:

    1. 修改文件头,伪造文件属性
    2. 修改文件类型,伪造文件类型 MIME绕过
    3. 增加多重后缀,伪造文件后缀 命名绕过
    4. js 本地验证突破

      1. 复制js代码,创建本地文件删除相应验证代码后直接上传(无防盗链可用)

      2. 截断 shell.php.jpg => shell.php

        测试代码 upload.php

        <?php//文件上传漏洞演示脚本之js验证$uploaddir = 'uploads/';if (isset($_POST['submit'])) { if (file_exists($uploaddir)) {  if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploaddir . '/' . $_FILES['upfile']['name'])) {echo '文件上传成功,保存于:' . $uploaddir . $_FILES['upfile']['name'] . “\n“;  } } else {  exit($uploaddir . '文件夹不存在,请手工创建!'); } //print_r($_FILES);}?><!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN“ “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“><html xmlns=“http://www.w3.org/1999/xhtml“><head> <meta http-equiv=“Content-Type“ content=“text/html;charset=gbk“/> <meta http-equiv=“content-language“ content=“zh-CN“/> <title>文件上传漏洞演示脚本--JS验证实例</title> <script type=“text/javascript“>  function checkFile() {var file = document.getElementsByName('upfile')[0].value;if (file == null || file == ““) { alert(“你还没有选择任何文件,不能上传!“); return false;}//定义允许上传的文件类型var allow_ext = “.jpg|.jpeg|.png|.gif|.bmp|“;//提取上传文件的类型var ext_name = file.substring(file.lastIndexOf(“.“));//alert(ext_name);//alert(ext_name“|“);//判断上传文件类型是否允许上传if (allow_ext.indexOf(ext_name“|“) == -1) { var errMsg = “该文件不允许上传,请上传“allow_ext“类型的文件,当前文件类型为:“ext_name; alert(errMsg); return false;}  } </script><body><h3>文件上传漏洞演示脚本--JS验证实例</h3><form action=““ method=“post“ enctype=“multipart/form-data“ name=“upload“ onsubmit=“return checkFile()“> <input type=“hidden“ name=“MAX_FILE_SIZE“ value=“204800“/> 请选择要上传的文件:<input type=“file“ name=“upfile“/> <input type=“submit“ name=“submit“ value=“上传“/></form></body></html>

        上传成功之后仍然是图片格式

        *这时候需要抓包修改*

        - 注意:直接通过burp抓包修改,可能上传的文件还是shell.php.jpg  - 需要通过修改的URL编码格式: - 选中 右键选中 URL - 点击 URL-decode -  乱码则可以上传

      文件上传MIME验证突破

      ​ 测试页面 mime.php

      <?php//文件上传漏洞演示脚本之MIME验证$uploaddir = 'uploads/';if (isset($_POST['submit'])) { if (file_exists($uploaddir)) {  if (($_FILES['upfile']['type'] == 'image/gif') || ($_FILES['upfile']['type'] == 'image/jpeg') ||($_FILES['upfile']['type'] == 'image/png') || ($_FILES['upfile']['type'] == 'image/bmp')  ) {if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploaddir . '/' . $_FILES['upfile']['name'])) { echo '文件上传成功,保存于:' . $uploaddir . $_FILES['upfile']['name'] . “\n“;}  } else {echo '文件类型不正确,请重新上传!' . “\n“;  } } else {  exit($uploaddir . '文件夹不存在,请手工创建!'); } //print_r($_FILES);}?><!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN“ “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“><html xmlns=“http://www.w3.org/1999/xhtml“><head> <meta http-equiv=“Content-Type“ content=“text/html;charset=gbk“/> <meta http-equiv=“content-language“ content=“zh-CN“/> <title>文件上传漏洞演示脚本--MIME验证实例</title><body><h3>文件上传漏洞演示脚本--MIME验证实例</h3><form action=““ method=“post“ enctype=“multipart/form-data“ name=“upload“> 请选择要上传的文件:<input type=“file“ name=“upfile“/> <input type=“submit“ name=“submit“ value=“上传“/></form></body></html>

      抓包修改 Content-Type

      序号内容类型文件扩展名描述
      1application/msworddocMicrosoft Word
      2application/octet-stream bindms lha lzh exe class可执行程序
      3application/pdfpdfAdobe Acrobat
      4application/postscriptai eps psPostScript
      5appication/powerpointpptMicrosoft Powerpoint
      6appication/rtfrtfrtf 格式
      7appication/x-compresszunix 压缩文件
      8application/x-gzipgzgzip
      9application/x-gtargtartar 文档 (gnu 格式 )
      10application/x-shockwave-flashswfMacroMedia Flash
      11application/x-tartartar(4.3BSD)
      12application/zipzipwinzip
      13audio/basicau sndsun/next 声音文件
      14audio/mpegmpeg mp2Mpeg
      源文地址:https://www.guoxiongfei.cn/cntech/27161.html
      0