文件上传漏洞

文件上传漏洞

原理:

服务器端对用户上传的文件缺乏严格的验证或过滤机制,导致攻击者能够上传可执行的恶意脚本文件(如WebShell),并在服务器上执行这些文件,从而获取服务器权限。

前提条件

  1. 成功上传文件到服务器
  2. 文件能够被访问到
  3. 文件被解释器解析执行

检测方式:

前端检测:JavaScript验证

后端检测:

​ 1.检测MIME类型

​ 2.检测后缀名

​ 3.检测文件内容

判断检测方式:

检测绕过方法

前端检测:

禁用JavaScript即可:打开F12,在设置中关掉JavaScript,重新上传文件。(上传完后注意重新打开)

后端检测:

MIME类型检测

用bp抓包后,再报文中找到Content-Type字段,修改其MIME类型,一般改为图片。

常见MIME类型
超文本标记语言.html文件:text/html
普通文本.txt文件:text/plain
PDF文档.pdf:application/pdf
PNG图像.png:image/png
GIF图像.gif:image/gif
MPEG文件.mpg、.mpeg:video/mpeg
后缀名检测
1.黑名单检测

(1)其他可解析后缀绕过

Apache服务器能够使用PHP解析.php3.php5.phtml

可尝试将后缀名改为:

PHP:php2php3php5phtmlpht
ASP: asacercdx
ASPX:ascxashxasac
JSP:jspxjspf

(2)配置文件绕过

.htaccess文件(或者分布式配置文件),全称是Hypertext Access(超文本入口)。提供了针对目 录改变配置的方法。即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目 录及其所有子目录

1.上传.htaccess文件

<FilesMatch "木马文件名,如:as.png"
setHandler application/x-httpd-php
</FilesMatch>

2.上传木马文件(as.png)

2.白名单检测

00截断绕过:0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系 统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。这个可以用在对文件类型名的绕过 上。

但要注意是文件的16进制内容里的00,而不是文件名中的00 !!!就是说系统是按16进制读取文件 (或者说二进制),遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x 开头表示16进制,也就是所说的0x00截断。%00是被服务器解码为0x00发挥了截断作用。 前提条件:PHP版本 < 5.3.29且php.ini文件的magic_quotes_gpc的值为Off。

文件内容检测
1.文件幻数绕过

文件格式幻数(Magic Number),它可以用来标记文件或者协议的格式,很多文件都有幻数标志来表 明该文件的格式。

png:89 50 4E 47 0D 0A
Gif:47 49 46 38 39 61
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇