web_007

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

标签:CTF | isset() | MD5加密 | PHP弱类型比较 | 代码审计

提示:被玩烂的CTF题目,PHP弱类型比较

<?php 

    error_reporting(0);  

    include_once('flag.php');  

    highlight_file('index.php');   

    $md51 = md5('QNKCDZO');  

    $a = $_GET['b'];  

    $md52 = md5($a);  

    if(isset($a)){  

        if ($a != 'QNKCDZO' && $md51 == $md52) {  

            echo $flag;  

        } else {  

            echo "false!!!";  

        }

    }  

?>

代码解释

error_reporting(0);

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

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

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

include_once('flag.php');

include_once 语句在脚本执行期间包含并运行指定文件。

此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。

这句的意思是此文件在include_once 语句在脚本执行期间包含并运行指定文件(flag.php)。


include_once('flag.php');

highlight_file — 语法高亮一个文件

使用PHP内置的语法高亮器所定义的颜色,打印输出或者返回 filename 文件中语法高亮版本的代码。

这句就是为了代码更直观。

上边的都不是关键部分,下边的才是:

$md51 = md5('QNKCDZO');

字符串'QNKCDZO'进行md5加密,得到md5值:0e830400451993494058024219903391并赋值给变量$md51。

$a = $_GET['b'];

$md52 = md5($a);

GET请求获取参数b的值并赋值给变量a,并对a进行md5加密赋值给$md52。

if(isset($a)){}

isset — 检测变量是否已设置并且非 NULL

如果a的值存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。 如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置时返回 TRUE 计算过程从左至右,中途遇到没有设置的变量时就会立即停止。 也就是说变量a必须存在且值不能为NULL

只要传参的参数b有值且不为null,判断就为true,就可以执行if里边的语句。


if ($a != 'QNKCDZO' && $md51 == $md52) {}

若变量a不为空,且不等于'QNKCDZO',并md51与md52的值相等,则可以得到 flag。 PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以“0E”开头的哈希值都解释为0,如果两个不同的值经过哈希以后,都是0E开头,那么PHP将会认为他们相同。 由于md51为0e830400451993494058024219903391,在==比较时,会被认为是0*10^830400451993494058024219903391,也就是0。


满足条件:GET传参b,b的参数值(不能是"QNKCDZO")的md5加密后是0e开头的即可


Payload:?b=240610708

Flag:flag{Wh1tE_Is_veRy_cOOl}

部分md5函数0e开头的值:

QNKCDZO

0e830400451993494058024219903391

240610708

0e462097431906509019562988736854

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

s214587387a

0e848240448830537924465865611904

s214587387a

0e848240448830537924465865611904

s878926199a

0e545993274517709034328855841020

s1091221200a

0e940624217856561557816327384675

s1885207154a

0e509367213418206700842008763514

s1502113478a

0e861580163291561247404381396064

s1885207154a

0e509367213418206700842008763514

s1836677006a

0e481036490867661113260034900752

s155964671a

0e342768416822451524974117254469

s1184209335a

0e072485820392773389523109082030

s1665632922a

0e731198061491163073197128363787

s1502113478a

0e861580163291561247404381396064

s1836677006a

0e481036490867661113260034900752

s1091221200a

0e940624217856561557816327384675

s155964671a

0e342768416822451524974117254469

s1502113478a

0e861580163291561247404381396064

s155964671a

0e342768416822451524974117254469

s1665632922a

0e731198061491163073197128363787

s155964671a

0e342768416822451524974117254469

s1091221200a

0e940624217856561557816327384675

s1836677006a

0e481036490867661113260034900752

s1885207154a

0e509367213418206700842008763514

s532378020a

0e220463095855511507588041205815

s878926199a

0e545993274517709034328855841020

s1091221200a

0e940624217856561557816327384675

s214587387a

0e848240448830537924465865611904

s1502113478a

0e861580163291561247404381396064

s1091221200a

0e940624217856561557816327384675

s1665632922a

0e731198061491163073197128363787

s1885207154a

0e509367213418206700842008763514

s1836677006a

0e481036490867661113260034900752

s1665632922a

0e731198061491163073197128363787

s878926199a

0e545993274517709034328855841020


打赏我,让我更有动力~

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

© 2016 - 2022 掌控者 All Rights Reserved.