这篇文章主要介绍了php函数漏洞的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
php是世界上最好的语言,是的,php在世界上养活了两类人,一类是编写php代码的人,一类是从事安全×××的这类人,因为在php中存在着有漏洞的函数。
在一定条件作用下,这些函数没有按着函数发明者的意愿去解析。
在周大福的web世界中也算待了几个月了,对学习当中的遇到的有问题的函数略做一下总结。
<强> md5()函数强>
<>之前定义:md5()函数计算字符串的md5散列问题1:经过md5()函数处理的字符串散列如果出现0 e开头的,在被php处理的时候会被认为等于0。
源码:
& lt; ? php ,,,$ user=$ _GET[& # 39;用户# 39;]; ,,,通过美元=$ _GET[& # 39;通过# 39;]; ,,,如果($ user !=通过美元){ ,,,,,,,如果(md5(用户)美元,==,md5(通过美元)){ ,,,,,,,,,,,echo “却;能够is flag"; ,,,,,,,} ,,,,,,,其他的{ ,,,,,,,,,,,echo “no no no"; ,,,,,,,} 还有,,,}{ ,,,,,,,echo “字符串不能相同“; ,,,} 祝辞;
代码功能:判断得到方法传入的参数的MD5的散列字符串是否相等,并且是在两参数值不相等的情况下。
测试结果:
原理分析:
当两个字符串被MD5加密的时候,会产生以0 e开头的哈希值。php进行判断的时候0 e…会被看成科学计数法,0的n次方都是等于零。所以这两个字符串被MD5()加密后都等于零。
var_dump (0==0 e123456)
测试:
原理分析:
md5(字符串,生)语法:字符串必须,规定要计算的字符串,生可选,规定输出格式,TRUE-16字符二进制格式;假——默认,32字符十六进制数。
函数作者规定处理的字符串类型为str字符串型,才能正常输出。传递数组无法处理。造成输出结果为空
问题3:造成sql注入漏洞
某些查询语句,特别是查询密码的时候,往往会使用md5()函数处理后再去数据库查询对比,这样就会造成一些风险。
查询语句:
从用户选择 passwd=?md5(美元密码,真实),
这个地方有一个特殊的字符串可以绕过,在你不知道密码的情况下查询到用户表的内容。
字符串:ffifdyop
测试:
这时候我们将加密后的东西拿去到数据库查询一下。
php函数漏洞的示例分析