NSCTF测试平台Code Php解题思路

在这里插入图片描述
1、点击链接,页面显示如下:
在这里插入图片描述
2、结合hint1,首先打开控制台尝试寻找
在这里插入图片描述
3、访问code.txt,代码来啦

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){
        if(!strcmp($v3, $flag)){
            echo $flag;
        }
    }
}
?>

4、分析代码,拿到flag的关键在于

  • v1、v2数值不同,但MD5相同

    PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。

    以下值在md5加密后以0E开头:

	s878926199a
	0e545993274517709034328855841020
	
	s155964671a
	0e342768416822451524974117254469
	
	s878926199a
	0e545993274517709034328855841020

	QNKCDZO
	0e830400451993494058024219903391

	s155964671a
	0e342768416822451524974117254469
	……
  • v3的值与flag不相等
	//strcmp() 函数比较两个字符串。
	//strcmp() 函数是二进制安全的,且对大小写敏感。
	strcmp(string1,string2)

strcmp()要求传入字符串。如果传入非字符串呢?
结果函数报错!但是函数返回0 。 虽然报错了但函数的判断却是 相等
所以我将v3以数组方式传递

在这里插入图片描述

5、成功拿到flag

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值