欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > zyNo.19

zyNo.19

2025/2/25 20:16:33 来源:https://blog.csdn.net/2401_88743143/article/details/145369875  浏览:    关键词:zyNo.19

哈希(md5)绕过问题

本质上是弱类型问题的延申

题型

登录的哈希验证

$a != $b

Md5($a) == md5($b)

解决办法Md5绕过

var_dump ("0e123456" == "0e4456789"); //true

'0e545993274517709034328855841020'//true

参考资料0e开头的哈希看一下哈希函数0e开头的md5-CSDN博客文章浏览阅读2.5k次,点赞9次,收藏41次。这篇博客揭示了一个PHP处理哈希值的潜在安全问题。当哈希值以'0E'开头时,PHP会将其解释为0,允许攻击者通过特定构造的0E开头字符串模拟匹配数据库中的哈希值,从而可能非法登录。文章列举了一系列0E开头的MD5哈希值示例,强调了这一漏洞可能带来的风险。https://blog.csdn.net/weixin_45897324/article/details/108961503?fromshare=blogdetail&sharetype=blogdetail&sharerId=108961503&sharerefer=PC&sharesource=2401_88743143&sharefrom=from_linkhttps://blog.csdn.net/weixin_45897324/article/details/108961503?fromshare=blogdetail&sharetype=blogdetail&sharerId=108961503&sharerefer=PC&sharesource=2401_88743143&sharefrom=from_link

题目进阶

登录的哈希验证 v2

$a != $b

Md5($a) === md5($b)

解决办法(数组)

Warning: md5() expects parameter 1 to be string, array given in php shell coden line 1数组的话返回警告但不会报错仍然会执行,但是返回Null

null === null

md5(array) -> null

知识点

如何将a变为数组,在a后面加【】

如果想加个元素

...........test.php?a[l=a1&a[]=a2&a[]=a3

题目

题目思路

1.通过URL传一个$a 是数组
2. 检查$a[0]和$a[1] 很严格的过滤
3. 取$a数组的前两个元素做拼接 执行危险命令

涉及知识点题目: 2020.10.24 上海 Geekpwn
解答方法
?a[3]=命令注入的payload&a[4]=payload&a[0]=正常&a[1]=正常

........test.php?a[2]=a1&a[3]=a2&a[0]=a3&a[1]=a4

Md5 ($a)

题目进阶+

登录的哈希验证 v3

(string) $a != (string) $b

Md5 ($a)=== md5($b)

参考资料

MD5加密在CTF中的弱强比较与解题策略-CSDN博客

Md5碰撞 两个不同的东西拥有相同的md5:

 

知识点

需要绕过 intval(),由于 intval()可以处理的不仅仅是十进制,还有八进制、十六进制、
科学计数法等。写个测试脚本

<? php $a = $_GET['a']; echo intval($a) . " "; echo intval($a+1);

(传入 1e5,输出:1 100001,绕过成功——1 100001)

首先 $a 是字符串所以 intval()返回了字母前的数字,也就是 e 前面的 1

echo intval(1e10); // 1410065408

echo intval('1e10'); // 1

然后 $a+1 进行了字符串与数字相加的运算,在php 中,这种结果取决于这个字符串长什么样,就$a+1 来讲:

$a 数字开头、中间有其他字母,比如 123y1ng,将 $a 从字符串转数字,转换结果为开头的数字,实际运算 123+1

$a 字母开头,比如 y1ng,转数字结果为0,实际运算为 0+1

$a 是 1e5 这种科学计数法形式,先转成 1×10^5 也就是 10000,再10000+1

所以输入了 1e5,在进行加一之后,就从 1 变成了 100001,绕过成功

题目进阶+++

题目:http://b.y1ng.vip:2031/1.php

第二层 $md5 == md5($md5),

需要一个md5 和md5(md5)都是0e开头

解答:

1.看源码

注意md5不一定是,有可能只是普通字符串

变量覆盖问题

用传参的值替换掉原有变量的值

<? php

$a = 'abc';
$a = 'def';(将abc覆盖)

实例:将键值“Cat”、“Dog”和“Horse"賦值给变量$a、$b和$c:

涉及函数

1.Extract()

定义和用法:
extract() 函数从数组中将变量导入到当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
该函数返回成功设置的变量数目。

语法
extract (array,extract_rules,prefix)

2.Parse_str()

定义和用法:

parse_str()函数把查询字符串解析到变量中。

对a进行变量覆盖+md5+弱类型

?id=a[]=s878926199a

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词