CTF入门

tech2023-08-10  96

文章目录

1.题目2.逐句分析MD5相等的扩展

1.题目

一道经典的入门题:

<!DOCTYPE html> <html> <head> <title>经典题目</title> <meta charset="utf-8"> </head> <body> </body> </html> <?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!!!"; }} ?>

2.逐句分析

①根据代码,易发现,php标签中有东西,逐句分析一下:

error_reporting(0);

百度一下发现:

<?php // 关闭所有PHP错误报告 error_reporting(0); // Report simple running errors error_reporting(E_ERROR | E_WARNING | E_PARSE); // 报告 E_NOTICE也挺好 (报告未初始化的变量 // 或者捕获变量名的错误拼写) error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); // 除了 E_NOTICE,报告其他所有错误 error_reporting(E_ALL ^ E_NOTICE); // 报告所有 PHP 错误 (参见 changelog) error_reporting(E_ALL); // 报告所有 PHP 错误 error_reporting(-1); // 和 error_reporting(E_ALL); 一样 ini_set('error_reporting', E_ALL); ?>

所以这句话没什么太大作用,只是关闭所有PHP错误报告。


②include_once就是在脚本执行期间包含并运行一次指定文件(flag.php)。

​ highlight_file 就是对index.php文件中的代码进行高亮显示。

都无太大意义。

include_once('flag.php'); highlight_file('index.php');

③对于重点部分进行分析,

$md51首先接收QNKCDZO的一次MD5加密值。

$a接收b的GET传参,所以应该是要求我们构造参数b

m d 52 接 收 md52接收 md52a也就是参数b的md5值

$md51 = md5('QNKCDZO'); $a = $_GET['b']; $md52 = md5($a);

④对于条件语句进行分析,

第一个判断,若a!=null则执行。所以b传参就可满足条件

第二个判断,需满足 a ! = ‘ Q N K C D Z O ‘ , 但 是 又 要 求 参 数 b 也 即 a!=`QNKCDZO`,但是又要求参数b也即 a!=QNKCDZOba的md5值相等,即可输出flag变量。

因此尝试先对QNKCDZO进行md5加密:

md5(QNKCDZO,32) = 0e830400451993494058024219903391

因为,考虑到2个md5值很难相等,所以本人在此处卡住了,查阅了一番资料,md5相等及碰撞绕过

所以找个同样是0E开头的传参即可,0e开头MD5值小结,在其中随便选择一个s1885207154a即可

md5(s1885207154a,32) = 0e509367213418206700842008763514

if(isset($a)){ if ($a != 'QNKCDZO' && $md51 == $md52) { echo $flag; } else { echo "false!!!"; }}

MD5相等的扩展

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

//其中有一个双md5很有意思 md5($a) == md5(md5($b) MD5值 md5("V5VDSHva7fjyJoJ33IQl") => 0e18bb6e1d5c2e19b63898aeed6b37ea md5("0e18bb6e1************") => 0e0a710a092113dd5ec9dd47d4d7b86f 实例 CbDLytmyGm2xQyaLNhWn md5(CbDLytmyGm2xQyaLNhWn) => 0ec20b7c66cafbcc7d8e8481f0653d18 md5(md5(CbDLytmyGm2xQyaLNhWn)) => 0e3a5f2a80db371d4610b8f940d296af
最新回复(0)