BUU27 [SUCTF 2019]CheckIn1

ops/2025/2/8 14:49:28/

题目是上传文件

直接上传muma.jpg还不成功:

  好吧,那做一个图片马上去,换马以后发现还是不行,呃啊啊啊啊

干啥啥不行,搜wp第一名,哎

新面孔:exif_imagetype 函数在 PHP 中用于检测一个文件是否为有效的图像文件,并返回该图像的类型。如果函数返回 false 或者不是预期的图像类型,通常意味着文件不是图像文件或者文件损坏。

exif_imagetype()函数会读取图像的第一个字节,并检查其签名,如果发现了恰当的签名则会返回相应的常量,否则返回false ,我们可以在一句话木马前面加上一个GIF图片文件头前缀GIF89a进行绕过,让函数误认为我们是合法的后缀

所以需要在一句话木马前面加上GIF89a(GIF图片文件头前缀,让这个函数误以为我们是合法后缀)png:塒NG  |   .gif:GIF89a  |  .jpg:塒NG

好歹是绕过了,接下来就该传.htaccess了

.htaccess类型还是不对,不要紧,在他前面加个GIF89a不就好了吗 

 居然连不上,考!

再次看wp

正常想到的是.htaccess,但是这个服务器是nginx,而.htaccess是针对apache的

所以引入一个php目录配置文件 .user.ini

它比.htaccess用的更广,不管是nginx/apache/IIS,只要是在使用 CGI/FastCGI 模式的服务器上都可以使用.user.ini

在 PHP 环境里,.user.ini 文件是一种用户自定义的配置文件,它能够为特定目录及其子目录下的 PHP 脚本提供个性化的配置选项。

auto_prepend_file 是 PHP 的一个配置指令,其作用是指定一个文件,在执行每个 PHP 脚本之前,PHP 解释器会自动将这个指定文件的内容包含进来并执行。也就是说,当设置 auto_prepend_file = muma.jpg 后,PHP 会尝试在执行任何 PHP 脚本之前,先包含并执行 muma.jpg 文件的内容。

内容:GIF89a

          auto_prepend_file=muma.jpg

我们指定一个文件(如a.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./a.jpg);

这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()时该设置无效)

新建了个 .user.ini 文件,但怎么写也写不进去,抓包内容都是空的

那就直接在包里面写,反正Content-Type也要改

 该有的都有了,开始连蚁剑: 

注意这里用蚁剑连接不是连 muma.jpg,而是index.php

 连接成功,拿到flag

其他不用蚁剑手动POST的技巧:

uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=var_dump(scandir("/"));

// 扫描当前目录下的文件,并打印出来

uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=system('cat /flag');

uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=var_dump(file_get_contents("/flag"));


http://www.ppmy.cn/ops/156747.html

相关文章

预训练语言模型(笔记)

笔记来源:Transformer、GPT、BERT,预训练语言模型的前世今生(目录) - B站-水论文的程序猿 - 博客园 预训练语言模型的发展并不是一蹴而就的,而是伴随着诸如词嵌入、序列到序列模型及 Attention 的发展而产生的。 一、…

第三个Qt开发实例:利用之前已经开发好的LED驱动在Qt生成的界面中控制LED2的亮和灭

前言 上一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145459006 中,我们是直接利用GPIO子系统控制了LED2的亮和灭,这篇博文中我们利用之前写好的LED驱动程序在Qt的生成的界面中控制LED2的亮和灭。 之前已经在下面两篇博文中实现了LED驱动…

[数据结构] 哈希表

目录 概念 冲突-概念 冲突-避免 冲突-避免-哈希函数设计 常见哈希函数 1.直接定制发--(常用) 2. 除留余数法--(常用) 3.平方取中法--(了解) 4.折叠法--(了解) 5.数学分析法--(了解) 冲突-避免-负载因子调节(重点掌握) 冲突-解决-闭散列 1.线性探测 2.二次探测 冲…

01C#入门篇(D1_C#入门前的认知)

目录 学习须知 学习路线 一、Dotnet 1. 了解C#之前,我们有必要先了解下Dotnet 2. Dotnet 发展历史: Framework ⇒ Core 2.1. .Net Framework(2002年) 1> 运行时(CLR) 2> CTS(通用类型系统&…

游戏引擎学习第87天

当直接使用内存时,可能会发生一些奇怪的事情 在直接操作内存时,一些意外的情况可能会发生。由于内存实际上只是一个大块的空间,开发者可以完全控制它,而不像高级语言那样必须遵守许多规则,因此很容易发生错误。在一个…

PySpark学习笔记5-SparkSQL

sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java,Scala,python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…

GlusterFS源码讲解:如何实现最终一致性

引言 在分布式文件系统中,由于网络延迟、节点故障或临时分区原因,很难保证写操作在所有节点上立即生效。为了解决这一问题,很多系统采用最终一致性模型:写操作可能一开始没有同步到所有节点,但经过一段时间后&#xff…

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架,旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念,使得开发者可以通过声明式的方式轻松管理数据和…