1z_php

Web

1z_php

?0o0[]=2023A&OoO[]=2023a

?0o0[1]=2023&OoO[0]=2023

//Yeedo told you to study hard!
echo !(!(!(!(include "flag.php")||(!error_reporting(0))||!isset($_GET['OoO'])||!isset($_GET['0o0'])||($_GET['OoO']==2023)||!(intval($_GET['OoO'][0])==2023)||$_GET['0o0']==$_GET['OoO']||!(md5($_GET['0o0'])==md5($_GET['OoO'])))))?$flag:str_repeat(highlight_file(__FILE__), 0);

三目运算符

表达式1 ? 表达式 2: 表达式3 ;

举例

x < 0 ? y = 10 : z = 20;

这个语句被称为条件表达式,它由 3 个子表达式组成,使用问号 ? 和冒号 : 分隔。这 3 个表达式分别是:x<0,y = 10 和 z = 20。

当表达式1为ture时,执行表达式2

当表达式1为faith时,执行表达式3

md5绕过方式

1.0e绕过

2.数组绕过

3.md5碰撞

4.md5sql注入

1.0e绕过

1z_php_第1张图片

0e开头的字符串在参与比较时,会被当做科学计数法,结果转换为0

比如将两个md5值进行弱类型比较

md5('QNKCDZO') == md5(240610708)

MD5加密后会变成这个样子

0e830400451993494058024219903391 == 0e462097431906509019562988736854

由于0e开头的字符串会转换为0,所以真正比较的过程会变成下面这样

0 == 0

返回结果为true,也就是说0e开头的md5值进行弱类型比较时,结果相等

常用的MD5加密后以0E开头的有

QNKCDZO
240610708
byGcY
sonZ7y
aabg7XSs
aabC9RqS
s878926199a
s155964671a
s214587387a
s1091221200a

2.数组绕过

1z_php_第2张图片

md5不能加密数组,传入数组会报错,但会继续执行并且返回结果为null

比如将两个数组的md5值进行比较

md5(a[]=1) === md5(b[]=1)

由于md5函数无法处理数组,会返回null,所以md5加密后的结果是下面这样

null === null

结果返回true,也就是说数组的md5值进行比较时,结果相等

需要注意的是0e绕过只能绕过弱类型比较(==),而数组绕过不只可以绕过弱类型比较,还可以绕过强类型比较(===)

弱类型比较(==),只判断内容是否相等,如果是字符串类型,则转换成数值型后进行判断

强类型比较(===),判断内容的基础上,还会判断类型是否相同

3.md5绕过

1z_php_第3张图片

MD5碰撞也叫哈希碰撞,是指两个不同内容的输入,经过散列算法后,得到相同的输出,也就是两个不同的值的散列值相同

4.md5sql注入

ffifdyop 的MD5加密结果是 276f722736c95d99e921722cf9ed621c

经过MySQL编码后会变成'or'6xxx,使SQL恒成立,相当于万能密码,可以绕过md5()函数的加密

md5

MD5(Message Digest Algorithm 5) 是一种常用的哈希函数算法,用于将 任意长度 的数据转换为 固定长度 的哈希值。MD5 是 MD4 算法的改进版本,由 Ronald Rivest 在 1992 年设计并广泛使用。

MD5 算法的 输出结果 是一个 128 位,即长度为 16 字节的哈希值,通常表示为一个 32 位 的 十六进制数。

韧性

1.不可逆性

MD5 是一种 单向哈希函数,具有不可逆性的特性。这意味着 无法 通过 已知的 MD5 哈希值 来准确地 确定原始输入数据。

2.雪崩效应

MD5 的雪崩效应是指 对输入数据微小改变 会导致 输出哈希值发生巨大变化 的特性。具体来说,即使输入数据只有一个比特位的改变,其计算得到的 MD5 哈希值也会产生 全局性的变化,而不仅仅在修改的位置上体现出差异。

3.唯一性

理想情况下,对于不同的输入数据,MD5 算法生成的 哈希值应该是唯一的。也就是说,不同的输入数据应该产生不同的哈希值。

4.快速性

MD5 是一种快速计算哈希值的算法,适用于对大量数据进行哈希计算的场景。

脆弱性

MD5 算法的 哈希输出空间 相对较小,仅有 128 位(仅能容纳 128 位二进制数据,而输入空间是无限的,这种 输入与输出的不匹配性 导致了哈希碰撞的可能性。攻击者可以使用巧妙构造的输入数据,通过精心选择的碰撞攻击算法,找到具有相同哈希值的不同输入。

1.碰撞攻击

由于 MD5 的设计特点和算法结构,使得攻击者能够使用巧妙构造的输入数据来找到碰撞。碰撞攻击的发现使得 MD5 不再适用于对数据完整性和身份验证进行可靠保护。

2.预计算攻击

由于 MD5 的 计算速度较快,攻击者可以预先计算常见输入数据的 MD5 哈希值并将其存储在哈希表中。这样,在实际攻击过程中,攻击者可以通过将需要进行破解的哈希值与预先计算的哈希值进行比对来实现对哈希值的快速破解。

HashMap

什么对象可以作为HashMap的key值?

从HashMap的语法上来讲,一切对象都可以作为Key值。

如:Integer、Long、String、Object等。 但是在实际工作中,最常用的使用String作为Key值

原因如下:

1.使用Object作为Key值的时候,如Class Person (里面包含,姓名,年龄,性别,电话等属性)作为Key。当Person类中的属性改变时,导致hashCode的值也发生变化,变化后,map.get(key)因为hashCode值的变化,而无法找到之前保存的value值,同样,删除也取不到值。

解决方案是重写HashCode方法

2.避免使用Long,Integer做key。有一次项目里排查bug,最后发现这个坑,由于拆箱装箱问题,导致取不到数据。 (可搜报错eg)

Array 数组

array() 函数用于创建数组。

PHP 中的 array 实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型针对多种不同用途进行了优化; 它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。 由于 array 的值可以是其它 array 所以树形结构和多维 array 也是允许的 。


 

你可能感兴趣的:(android)