渗透测试---webshell与上传漏洞~文件上传漏洞与防御思路

php文件上传源代码:

前端上传页面:upfile.php

上传处理程序:upload.php

php文件上传过程分析:

文件长传检测控制方法:(绕过方法)

  1. 通过JavaScript检测文件扩展名(上传时改为jpg,绕过前端,再抓包改为php)
  2. 服务器端检测文件传输类型content-type(上传php文件,抓包修改content-type为jpg)
  3. 服务器端扩展名检测,设置黑白名单(未在黑名单包括,例如特殊执行文件.asa/.cer等可以在IIS执行)(上传jpg文件,利用中间件解析漏洞,使其被作为可执行文件执行)(通过截断符号,例如00,上传a.php0x00.jpg,服务器端从后往前读是jpg文件,保存文件从前往后读,00截断被当作php文件)
  4. 服务器端文件头内容检测,通过getimagesize()函数解析文件头部代码(在文件头中添加固定标识)(讲一句话木马嵌入到图片中,构造图片码,上传文件,再通过解析漏洞或其他方法还原为可执行文件)

图片格式文件头标识:

00截断演示:

上传1.jpg文件,使用burpsuite拦截抓包修改文件名为1.phpp.jpg

修改Hex中文件名中phpp的最后一个p编码为00后,在Raw中看到变化。

关闭拦截,查看输出结果。

防御思路:

既要做前端的检测,也要做后端的检测,但检测有可能会被绕过,可以对上传的图片进行压缩,改变一句话木马,使图片码失效。

原文地址:https://www.cnblogs.com/123456ZJJ/p/12859700.html