ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[BJDCTF2020]Easy MD5 1

2022-02-07 12:33:29  阅读:288  来源: 互联网

标签:ffifdyop 二进制 MD5 Easy 等于 字符串 BJDCTF2020 true md5


考点:
1、sql注入中的md5($string,raw)
2、php类型
3、md5中数组绕过

目录

解题步骤

一、

进去先输入字符串,看变化
在这里插入图片描述
在响应头中我们可以看到password=md5($pass,true),其中(具体看这里

true是一个可选项:
默认不写为FALSE。32位16进制的字符串
TRUE。16位原始二进制格式的字符串

md5函数在指定了true的时候,是返回的原始 16 字符二进制格式。返回的这个原始二进制不是普通的二进制(0,1),而是 'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c 这种,并且与’or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c对应的字符串"ffifdyop",经md5加密后的字符串:'or’6]!r,b

为什么要用ffifdyop这个字符串,是因为他的原始二进制中‘or’6,反过来说如果一个字符串的原始二进制中有‘or’6(当然6也可以是其他数字)也可以。
这样的话就可以让sql语句永远有返回值。

二、

输入ffifdyop,可以看到这样一个页面
在这里插入图片描述
看一下源码

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
    // wow, glzjin wants a girl friend.
-->

它意思是a要不等于b,且加密后的a要等于b(弱等于)
两种绕过方法:

1、构造两个经过md5后都是以0e开头的字符串
//a=QNKCDZO&b=aabg7XSs
//php里面在做 == 的时候会先把两边的类型转成一样的,
//并且是0e开头,PHP会认为这是科学计数法,
//不管0有多少次方都为0

2、构造两个数组
//因为md5处理不了数组,只能是字符串,两边都处理数组返回false,也就相等了

三、

进入后
在这里插入图片描述
它提示我们param1要不完全等于param2,且他们两md5后要恒等于。

!==和!=是不一样的
//前者要不完全等于,也就是可以类型不一样,或者值不一样
//后者要类型转换后不等于 。

这边绕过就不能用上边的第一种绕过,要用第二种。

param1[]=1&param2[]='1'
//post传参

然后就可以看到flag了。
在这里插入图片描述

参考

sql注入:md5($password,true)
bfengj

标签:ffifdyop,二进制,MD5,Easy,等于,字符串,BJDCTF2020,true,md5
来源: https://blog.csdn.net/shinygod/article/details/122799170

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有