文件上传

文件上传 #

网站可能会提供文件上传的功能,如上传图片等,这些功能可能存在漏洞。

ctf web题目中,如果涉及考查文件上传知识点,则对应web大概率是由php编写,文件上传利用的主要过程或目的是以下全部2点:

  1. 利用提供的上传功能,上传一句话木马或者php脚本
  2. 想办法触发上传php脚本的执行,并得到脚本返回

以上2点如果有未完成的情况,则整个文件上传的过程都没有太大意义

脚本上传阶段 #

此阶段的工作流程如下:

  • 上传正常合法文件
  • Burpsuite抓包
  • 发送到repeat模块,不断尝试修改,直到上传成功

对上传文件的限制有以下几种:

  • 文件后缀限制:
    • 黑名单限制了php,但是php[123457],phtml,pht 这些其中的某些是可以的
    • 白名单只允许jpg等,那后续触发执行阶段再想办法
  • 文件Magic Number限制:
    • 需要添加对应文件的Magic Number,如image/gif的Magic NumberGIF89a
  • 文件内容限制:
    • 不允许有php:则可以使用<script language='pHp'>phpinfo()</script>
    • 不允许有eval:则可以使用assert,或者动态拼接<?php $_GET['a']($_POST['b'])?>,利用?a=assert&b=system("ls");,利用了php动态函数调用特性,允许使用变量作为函数名进行函数调用

触发执行阶段 #

文件上传成功后,需要以某种方式将上传的脚本以php代码的形式执行:

  • 如果提示了存储路径或能够猜测路径,则可以尝试直接访问路径,并测试是否能够执行成功
  • 如果以上无法执行成功,则可以搭配文件包含或.user.ini机制触发脚本执行

确定能够执行后,使用蚁剑/hackbar之类的工具连接,获取想要的数据即可;或者直接修改上传脚本,从网页回显中获得执行结果

绕过 #

TODO

题目 #