ctfshow文件上传漏洞做题记录

折翼的小鸟先生 / 2024-03-08 / 原文

ctfshow文件上传漏洞做题记录

前言:之前发的博客已经做了文件上传漏洞的一些做题,今天来记录一些理论的知识以及之前没做完的题

1.1 前置基础知识

检测层面:前端和后端

检测内容 : 文件头 完整性,二次渲染等

检测后缀: 黑名单 白名单 MIME检测等

1.2 ctfshow web 158

相比前几个题,这个题还多过滤了() 这时候之前的后门就没法用了,我们想要调用eval函数总是需要括号,这时

候考虑直接输出我们的flag,但是括号又不能用了,该如何解决呢? 这时候就要使用反引号了。

php中反引号会将其中的内容放在system()中执行,但需要注意的是执行的结果并不会自己输出,所以我们要手动

输出。所以我们根据此原理我们可以写出后门

<?=`tac ../f*`?>

1.3 ctfshow web 159

payload和上一题没有任何区别,应该是加了点过滤,秒了

1.4 ctfshow web 160

本题过滤掉了反斜杠,我们需要更换思路了

我们已知在nginx下会将请求的Ua头记录在默认的日志文件中,那我们将后门代码写入ua头,然后包含日志文件即

可实现后门的写入。

在ngnix下日志记录文件存储于 /var/log/nginx/access.log

因此我们有了payload的写法

<?include"/var/lo"."g/nginx/access.lo"."g"?>

将payload写入a.png,利用.user.ini包含a.png,然后a.png中的代码包含了日志文件,然后在随便上传一个图片,

或者访问一下upload,直接在ua头处直接写入

<?=`tac ../fla*`?>

然后访问upload/下即可获得flag

1.5 ctfshow web 161

本题除了上面的过滤,还设置了对文件头的过滤

文件头是位于文件开头的一段数据,操作系统通过识别文件头,可以识别文件的类型,并决定用何种程序来打开该

文件。在本题中只有gif文件的文件头能通过前端验证gif的文件头为GIF89a

其余步骤和上一题相同。