直接查看源码

<!--$test=$_GET['username']>这一行

源码的下面给了我们一些提示:我们输入的username经过md5加密后会赋值给test。当test为0时就会跳出新的东西,这时候我们就要构思,如何才能让test为0?
显然将0提前md5解密是不行的,而在php中==是只进行值的比较,不管二者的类型。当两个字符串进行==比较的时候,PHP会把类数值的字符串转换为数值进行比较,如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值。比如: ‘3’ == ‘3ascasd’结果为true。
利用这个漏洞,我们就可以搞事情了:只需要找到解密后开头为0的就行了。

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,

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

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

这里我们在网上找到几个这样的字符串:240610708,aabg7XSs,aabC9RqS 
随便选一个后,输入到username中,得到新的回显

SO,访问http://ctf5.shiyanbar.com/10/web1//user.php?fame=hjkleffifer  查看源码,如果password什么,就输出flag

补充知识,查手册:

unserialize() 对单一的已序列化的变量进行操作,将其转换回反序列化 PHP 的值。
返回的是转换之后的值,可为 integer、float、string、array 或 object。
如果传递的字符串不可解序列化,则返回 FALSE,并产生一个 E_NOTICE。

序列化与反序列化: 
把复杂的数据类型压缩到一个字符串中 
serialize() 把变量和它们的值编码成文本形式 
unserialize() 恢复原先变量

定义一个array数组,key为键名,www就是对应的array[‘key’]的键值

我们现在再回头看源码,只有user和pass都等于’???’时,才输出flag。但我们现在并不知道???到底是啥,这时候就涉及另一个知识点:bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。
所以我们在这里构造password:

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

(a代表array,s代表string,b代表bool,而数字代表个数/长度)
这个用数组的形势表述就是:
Array ( [user] =>1 [pass] => 1 ),因为这里两个元素都是bool型元素,所以只有1和0两种。这里我们给他们赋值为1,就都为true,就满足==的条件了,输入过后就满足条件,得到flag

部分内容取自https://blog.csdn.net/qq_41618162/article/details/81321451

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

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

    天网你敢来挑战嘛 格式:ctf{ } 解题链接: http://ctf5.shiyanbar.com/10/web1/ 打开链接后,嗯,光明正大的放出账号密码,肯定是登不进的,查看源代码 看来是和md ...

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

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

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

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

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

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

  5. 实验吧web题(26/26)全writeup!超详细:)

    #简单的SQL注入 http://www.shiyanbar.com/ctf/1875 1)试着在?id=1,没有错误 2)试着?id=1',出错了,有回显,说明有注入点: You have an e ...

  6. 实验吧web解题记录

    自以为sql注入掌握的还是比较系统的,然而,做了这些题之后才发现,大千世界无奇不有,真是各种猥琐的思路...还是要多学习学习姿势跟上节奏 登录一下好吗?? http://ctf5.shiyanbar. ...

  7. 20145231熊梓宏 《网络对抗》 实验8 Web基础

    20145231熊梓宏 <网络对抗> 实验8 Web基础 基础问题回答 ●什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入信息的元素,表单在网页中主要负责数据采集 ...

  8. 实验八 Web基础 SQL注入原理

    实验八 Web基础 实验要求 (1)Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2)Web前端javascipt ...

  9. 实验吧web题:

    实验吧web题: 这个有点简单 因为刚了解sqlmap,所以就拿sqlmap来练练手了 1,先测试该页面是否存在sql注入漏洞 2.找到漏洞页面,复制url,然后打开sqlmap 先查看当前数据库 然 ...

随机推荐

  1. Typescript 接口(interface)

    概述 typescript 的接口只会关注值的外形,实际就是类型(条件)的检查,只要满足就是被允许的. 接口描述了类的公共部分. 接口 interface Person { firstName: st ...

  2. docker如何创建支持SSH服务的镜像

    一般情况下,Linux系统管理员通过SSH服务来管理操作系统,但Docker的很多镜像是不带SSH服务的,那么我们怎样才能管理操作系统呢?在第一部分中我们介绍了一些进入容器的办法,比如用attach. ...

  3. [翻译] TSMessages

    TSMessages https://github.com/KrauseFx/TSMessages This library provides an easy to use class to show ...

  4. November 18th 2016 Week 47th Friday

    Get a livelihood and then practise virtue. 先谋生,而后修身. If you can't earn a life, all the things you ha ...

  5. DOM、JDOM、DOM4J的区别

    dom是解析xml的底层接口之一(另一种是sax)   而jdom和dom4j则是基于底层api的更高级封装    dom是通用的,而jdom和dom4j则是面向Java语言的       DOM 是 ...

  6. DotNET中的幕后英雄:MSCOREE.DLL

    现在做.NET Framework的开发的朋友应该是越来越多了,但是可能并非人人都对MSCOREE.DLL非常了解.而事实上,毫不夸张地说,MSCOREE.DLL是.NET Framework中最为核 ...

  7. 使用ubuntu desktop是可能会用到的配置

    1.ubuntu desktop12.04 接双显示器 想要12.04版本在接上双显示器时能很好的工作,则需要进行如下设置: (1).编辑/etc/X11/xorg.conf文件: /etc/X11/ ...

  8. javascript 的MD5代码备份,跟java互通

    var MD5 = function (string) {                   function RotateLeft(lValue, iShiftBits) {            ...

  9. oc的静态函数static

    oc的静态函数与类函数不同: 1.静态函数与c++中表现一致,只在模块内部可见: 2.静态函数内部没有self变量: 3.静态函数不参与动态派发:没有在函数列表里:是静态绑定的: @implement ...

  10. 1297. [SCOI2009]迷路【矩阵乘法】

    Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...