BugkuCTF-WEB题前女友

解题流程

0、打开网页
在这里插入图片描述
发现其内有一个链接
1、点击链接,查看PHP源代码

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){  // 检测以GET方式传入的三个参数 v1、v2、v3
    $v1 = $_GET['v1']; // 变量v1等于传入的参数v1
    $v2 = $_GET['v2']; // 变量v2等于传入的参数v2
    $v3 = $_GET['v3']; // 变量v3等于传入的参数v3
    if($v1 != $v2 && md5($v1) == md5($v2)){  // v1不等于v2,并且MD5加密后的v1等于v2(典型的MD5碰撞,随意在网上搜索两个值就可以)
        if(!strcmp($v3, $flag)){ // 这里是用来比较字符串,但是查了一下,这个函数当接受到不符合字符串类型的参数就会发生错误,并返回0,比如数组
            echo $flag;
        }
    }
}
?>

2、代码审计,构造payload
我们需要构造三个参数:v1,v2,v3,其内v1和v2需要值不同且md5的值相同,利用md5函数的特性,如果使用一个不可md5的数据类型传入的话那么md5函数将返回false,这个也是返回值,题目要求的是md5函数的返回值相等,所以就可以用两个值不同但不可md5的数据类型传入即可

这里我们使用数组进行绕过,令v1[]=1, v2[]=2

继续分析,第二个是strcmp函数,需要v3和flag的值相同才返回flag的值,我们依旧利用函数特性,strcmp函数如果出错,那么它的返回值也会是0,和字符串相等时返回值一致,

依旧使用数组绕过,令v3[]=3,因为strcmp接收到不符合字符串类型的参数会发生错误

3、上传最后payload:http://114.67.246.176:16109/?v1[]=1,&&v2[]=2&&v3[]=3
或者
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得到
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值