web_008

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

web_008

 

标签:CTF | empty() | X-Powered-By | 代码审计 | 改后缀

提示:如果能够获取源码就好了~


打开网址

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

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

访问的inde.php后加上.bak,组成index.php.bak,然后就能下载inde.php.bak文件了,现已改名为web8_index.php.bak

打开文件,发现隐藏的PHP代码

 

<?php

    ERROR_REPORTING(0);

    if(!empty($_GET['ver'])==PHP_VERSION){

     if($_GET['ver']==PHP_VERSION){

     $key = "**********";

        }

    }

?>

 

代码解释:

error_reporting(0);

error_reporting — 设置应该报告何种 PHP 错误

error_reporting(0); // 关闭所有PHP错误报告

这句的意思就是关闭所有PHP错误报告

 

if(!empty($_GET['ver'])==PHP_VERSION){}

empty — 检查一个变量是否为空

var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.

所以只有GET传参ver的值一个非空非零的值,!empty()才会为true,且值和PHP的版本号一致,才可以执行if里边的语句。

以下的东西被认为是空的:

"" (空字符串)

0 (作为整数的0)

0.0 (作为浮点数的0)

"0" (作为字符串的0)

NULL

FALSE

array() (一个空数组)

$var; (一个声明了,但是没有值的变量)

 

if($_GET['ver']==PHP_VERSION){}

GET获得的传参ver的值和PHP版本的值相等就输出flag

 

问:怎么获取PHP_VERSION呢?

答:抓包,返回包里边有。

 

X-Powered-By: PHP/5.6.40

X-Powered-By 暴露PHP版本信息

X-Powered-By不是Apache或者Nginx输出的,而是由语言解析器或者应用程序框架输出的, 这个值的意义用于告知网站是用何种语言或框架编写的。 

从隐蔽服务器信息的角度考虑可以在php.ini文件中设置:expose_php = Off

ver的值(PHP版本号)也有了,但是这里还有一个点要注意,直接传参,不要点"提交查询",因为表单是用POST提交的参数,这是一个小坑,但是依旧可以使用GET传参?ver=5.6.40获得flag因为,POST传参中的ver没有值,不然还是失效的。

Payload?ver=5.6.40

Flagflag{Y0u_G1t_th9_flag}

 



打赏我,让我更有动力~

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

© 2016 - 2022 掌控者 All Rights Reserved.