天网你敢来挑战嘛

格式:ctf{ }

解题链接: http://ctf5.shiyanbar.com/10/web1/

打开链接后,嗯,光明正大的放出账号密码,肯定是登不进的,查看源代码

看来是和md5碰撞有关的了,

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

攻击者可以利用这一漏洞,
通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,
如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,
尽管并没有真正的密码。

0e开头的md5和原值:
(加密后值为0)

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

我们随便选一个,将用户名改为s878926199a

将url改为该地址,进入后审计代码

$unserialize_str = $_POST['password'];

$data_unserialize = unserialize($unserialize_str);        #unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。

if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???') { print_r($flag); }

伟大的科学家php方言道:成也布尔,败也布尔。 回去吧骚年

1.需要构造序列化的password填入,代码意思是把post提交的password值经过"反序列化"得到一个数组,
要求数组里的user和pass都等于某个值时就打印flag。
2.bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。
 
序列化与反序列化:
把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
 
自己实践序列化函数

从结果可以看出,要构造bool类型的序列化数据经过反序列化后为true,user和password的值应写成  "a:2:{s:4:"user";b:1;s:4:"pass";b:1;}",
最后我们将该值提交得到flag

实验吧CTF天网管理系统的更多相关文章

  1. 实验吧web天网管理系统

    直接查看源码 <!--$test=$_GET['username']>这一行 源码的下面给了我们一些提示:我们输入的username经过md5加密后会赋值给test.当test为0时就会跳 ...

  2. 【实验吧】因缺思汀的绕过&&拐弯抹角&&Forms&&天网管理系统

    <?php error_reporting(); if (!isset($_POST['uname']) || !isset($_POST['pwd'])) { echo '<form a ...

  3. 实验吧之【Forms、天网管理系统】

    Forms 原题链接 http://ctf5.shiyanbar.com/10/main.php Form 其实是个提示,代表html表单 F12 查看源码,发现 <input name=&qu ...

  4. 实验吧_密码忘记了(vim编辑器+代码审计)&天网管理系统(php弱比较+反序列化)

    密码忘记了 一开始尝试了各种注入发现都无效,在网页源码中找到了admin 的地址,输入地址栏发现并没有什么有用的信息,随便输个邮箱,网页返回了一个地址 ./step2.php?email=youmai ...

  5. 实验吧CTF题库-WEB题(部分)

    看起来有点难 提交admin http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&actio ...

  6. ctf实验吧天网管理系统

    这明显不可能登上的,所以直接看源代码 这里如果不懂得,php中处理哈希值的方式,是只要是0e开头的哈希值,都认为是0,通过输入一个这样的0e开头的字符串,会被php解释成0. 这个可以去在线工具上得到 ...

  7. 【转载】C语言综合实验1—学生信息管理系统

    http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的 ...

  8. 实验吧CTF练习题---WEB---Forms解析

    实验吧web之Forms 地址:http://www.shiyanbar.com/ctf/1819 flag值:ctf{forms_are_easy}   解题步骤: 1.查看页面源代码,从中发现&q ...

  9. 实验吧CTF练习题---web---登录一下好吗解析

    实验吧web之登陆一下好么   地址:http://www.shiyanbar.com/ctf/1942 flag值:ctf{51d1bf8fb65a8c2406513ee8f52283e7}   解 ...

随机推荐

  1. struct与class区别联系(转)

    传送门:struct与class区别联系 注意C中的struct和C++中的struct是不一样的,c中的struct比较原生,仅仅是将一些属性封装起来构成一个整体,没有OO的相关特性.而c++中的s ...

  2. Maven搭建私服

    为什么要搭建私服?搭建私服有什么好处? 以我最近技术调研和相关的使用为起点概述: 首先说明,为什么要搭建私服? 搭建私服的目的是,通常企业项目开发,特别是使用maven作为项目管理,现在非常流行使用m ...

  3. QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译

    由于工作要求,今年需要基于Qt搞跨平台的GIS.前期未曾接触过Qt,最近也简单学习了下,开源的QGIS是非常不错的学习资源,下了最新版的QGIS源码,不过在VS2015下却没法直接打开.网上查了很多资 ...

  4. Posts Tagged ‘This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register问题的解决办法

    HowTo Install redhat package with YUM command without RHN February 26, 2014 in Redhat / Linux Tips a ...

  5. Python2.7-anydbm

    anydbm模块,把各种数据库模块(dbhash (requires bsddb), gdbm, or dbm)的接口进行了统一.打开后返回的对象操作和字典类似 模块方法: anydbm.open(f ...

  6. Java并发(一)并发编程的挑战

    目录 一.上下文切换 1. 多线程一定快吗 2. 测试上下文切换次数和时长 3. 如何减少上下文切换 4. 减少上下文切换实战 二.死锁 三.资源限制的挑战 四.本章小结 并发编程的目的是为了让程序运 ...

  7. C#委托+回调详解

    今天写不完,明天会接着写的,,,, 学习C#有一段时间了,不过C#的委托+回调才这两天才会用,以前只是知道怎么用.前面的一篇文章,函数指针,其实是为这个做铺垫的,说白了委托就相当于C语言中的函数指针, ...

  8. 在ado.net中实现oracle存储过程调用两种方式

      1.常规的存储过程调用 String or=ConfigurationManager.ConnectionStrings["conn"].ToString(); OracleC ...

  9. stm32中assert_param的用法说明

    stm32中assert_param的用法说明   首先是要知道条件判断语句 这个运算符分成三部分: (条件) ? (条件成立执行部分) :(条件不成立执行部分) 就这么简单 例如:a=(x>y ...

  10. ADO.NET TransactionScope使用说明(转载)

    TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物.使用之前必须添 ...