web_18

kim23   ·   发表于 2019-11-26 11:23:05   ·   技术文章投稿区

web_018

 

 

标签:CTF | strcasecmp() | 代码审计 | 改后缀

提示:去了解下函数的一些小特性

传送门:http://59.63.200.79:1880/Web-Security/CTF/3/web18/index.php

打开网址

 

然后各种查找,都没发现要绕过的地方。

最后终于找到这个php文件的源码了。

访问的inde.php后加上s,组成index.phps,然后就能下载inde.phps源代码文件了.

 

打开源代码文件,现已改名为web18_index.phps

 

 

<?php

    $flag = "*******";

    if (0 == strcasecmp($flag, $_GET['key'])) {

        echo $flag;

    }

    else {

        echo "Try again";

    }

?>

 

代码解释

if (0 == strcasecmp($flag, $_GET['key'])) {}

strcasecmp — 二进制安全比较字符串(不区分大小写)

语法:strcasecmp ( string $str1 , string $str2 ) : int

参数 str1:第一个字符串。str2:第二个字符串。

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

提示:该函数与 strncasecmp() 函数类似,不同的是,通过 strncasecmp() 您可以指定每个字符串用于比较的字符数。

也就是说要么GET传参key的值和变量$flag的值,相同;要么函数发生错误,返回0,0==0返回true

第一种不可行,因为我们不知道flag的值,第二种我们传入数组,这个函数将发生错误,并且返回数值00==0返回true,条件满足,输出flag

5.3之前的php中,显示了报错的警告信息后,返回数值0

 

所以只要传入数组就可以满足条件,获取flag

 

Payload?key[]=1

Flagflag{Tkig58g987245lofgg97ert}

 


打赏我,让我更有动力~

0 Reply   |  Until 2019-11-26 | 746 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.