“百度杯”CTF比赛 九月场--Web 考脑洞,你能过么?

“百度杯”CTF比赛 九月场--Web 考脑洞,你能过么?


基础知识

1、文件包含简述

文件包含,就是为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。

为什么文件包含会形成漏洞呢?是因为在包含文件时候,为了灵活使用包含文件的功能,程序员会将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。

以下是几个关于PHP文件包含的函数:

include( )
当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含
进来,发生错误时之给出一个警告,继续向下执行。
include_once( )
功能与 Include()相同,区别在于当重复调用同一文件时,程序只调用一次
require( )
require()与 include()的区别在于 require()执行如果发生错误,函数会输出
错误信息,并终止脚本的运行。
require_once( )
功能与 require()相同,区别在于当重复调用同一文件时,程序只调用一次。

2、PhpStorm文件夹

phpstorm新建项目会生成.idea文件夹,打开里面有workspace.xml,这个.idea文件夹类似于这个项目的根目录文件,里面包含了一些xml文件(配置)。这个是可以删掉,但是会自动重新生成。


解题思路

1、题目分析

题目只给了一个图片,先查看源代码,会发现一些端倪,然后发现是文件包含,进去把index.php读出来, 根据 Created by PhpStorm 这个提示,我们查看workspace.xml,发现fl3g_ichunqiu.php,根据代码,用config代替“_”,然后又得到一串代码,这时候就需要认真读代码,爆破key,再爆破flag。

2、求解

根据题目给出的图片,先查看一下源代码,?jpg=hei.jpg 的内容:

在这里插入图片描述猜测是文件包含,那么我们看看能否将传入的jpg=flag.php爆破出flag:

在这里插入图片描述

在这里插入图片描述

发现不行,源代码和传入的hei.jpg是一样的,那么我们试试传入index.php:

在这里插入图片描述
发现成功了,传入index.php会出现base64编码的内容,解码出来看看:

<?php
/**
 * Created by PhpStorm.
 * Date: 2015/11/16
 * Time: 1:31
 */
header('content-type:text/html;charset=utf-8');
if(! isset($_GET['jpg']))
    header('Refresh:0;url=./index.php?jpg=hei.jpg');
$file = $_GET['jpg'];
echo '<title>file:'.$file.'</title>';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
$file = str_replace("config","_", $file);
$txt = base64_encode(file_get_contents($file));
echo "<img src='data:image/gif;base64,".$txt."'></img>";
/*
 * Can you find the flag file?
 *
 */
?>

发现是一个php的代码,然后我们到网上查到资料,Created by PhpStorm这句代码是重点之一:phpstorm新建项目会生成.idea文件夹,打开里面有workspace.xml,访问一下 url/.idea/workspace.xml

在这里插入图片描述

发现里面有一个fl3g_ichunqiu.php,很像答案的flag,这次我们传入这个看看:

在这里插入图片描述发现绕过了,再重新回去看php那段代码发现:$file = str_replace("config","_", $file); Config会被’_’取代,那么重新构造payload index.php?jpg=fl3gconfigichuqiu.php 发现页面源代码:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值