Web安全-文件上传漏洞
PHP 实现文件上传功能
首先编写一个前端的提交页面
代码:
1 | <form action="" method="post" enctype="multipart/form-data"> |
后端代码编写
通过使用 PHP 的全局数组 $_FILE 可以接收从前端传过来的文件
- 第一个参数是前端的 input name
- 第二个参数是文件的属性
- name 文件名
- type 文件类型
- size 文件大小
- tmp_name 存储在服务器上临时副本的名字
- error 文件上传导致的错误代码
创建上传脚本
1 |
|
文件上传漏洞的成因
网站要实现某些特定的功能会要求用户上传文件,如上传头像,简历等文件,由于对用户端上的数据过滤不严导致文件上传漏洞,黑客就会利用文件上传漏洞,上传一些木马文件等,对服务器进行一些敏感操作。
一句话木马
PHP:
1 | 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 |
- github
- AntSword 加载器 https://github.com/AntSwordProject/AntSword-Loader
- AntSword 核心文件 https://github.com/AntSwordProject/antSword
连接
- 打开 蚁剑 启动器,在空白处单击鼠标右键
选择添加数据
URL 地址填上传的一句话木马文件的地址,密码输入 超全局变量 $_REQUEST[] 中的参数,然后点击测试连接,不出意外就可以连接到一句话木马了。
点击添加,再双击打开网站的目录,如果权限够大就可以对网站文件随意删改,如果权限不够大则可以配合其他漏洞进行提权,然后在进行修改。
在空白处点击鼠标右键
点击 “在此处打开终端” 就可以进入命令行执行系统命令了
-
-
客户端验证绕过
简单来说就是在浏览器端进行过滤,用户可以自行修改
按 F12 审计网页元素,将 函数删除
禁用网页 JS
先上传 常规文件,使用 Burp 抓包,再将后缀名修改为可执行的脚本文件
服务端验证绕过
Content-Type 绕过 (MIME 绕过)
有些服务端会对传入的文件类型头进行检测,如果是如果是图片,则允许上传,否则进行拦截
可以修改为:
1 | Content-Type: image/png |
黑名单绕过
有些脚本会写黑名单限制,在上传文件时获取文件的后缀名,然后在黑名单列表中进行检测,如果文件后缀在黑名单中,则拦截上传的文件
绕过方法: 修改文件后缀
脚本语言 | 文件后缀 |
---|---|
PHP | php2 php3 php5 phtml |
JSP | jsp jspx jspf |
ASP | asa cer cdx |
ASPX | ascx ashx asac |
大小写绕过
- windows 系统对大小写不敏感
- Linux 系统对大小写敏感
空格绕过
在windows系统下,命名文件时在文件名末尾加上空格默认会自动删除空格。
点号绕过
和空格绕过原理一样,命名文件时在文件名末尾加上点号,windows系统默认自动删除点号。
(未完待续….)
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.