加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php弱语言特性-计算科学计数法

发布时间:2020-12-13 21:26:19 所属栏目:PHP教程 来源:网络整理
导读:php处理字符串时存在一个缺陷问题,如果字符串为“1e1”,本该是一个正常的字符串,但是php会将它认为是科学计数法里面的e; 也就是按照数学的科学计数法来说:1e1=10^1=10,因此php会把这个字符串里面的1e1进行科学计数法计算,得出来就为“10”,即遇到“0

php处理字符串时存在一个缺陷问题,如果字符串为“1e1”,本该是一个正常的字符串,但是php会将它认为是科学计数法里面的e;

也就是按照数学的科学计数法来说:1e1=10^1=10,因此php会把这个字符串里面的1e1进行科学计数法计算,得出来就为“10”,即遇到“0e212”这些字符串直接看作为“0”.

?

CTF中遇到的一些代码审计题,如果出题者想利用这一缺陷,往往会配合MD5值来运用。

它会让你使两个GET或者POST变量的值不相等,但是让他们的MD5值相等,正常来说不可能,很难找出字符串不等且MD5相等的两个字符串。

?

因为MD5值为数字加字母,因此我们就可以使用php的这个缺陷,让MD5的第一位为数字0,然后第二位数字为e就行了,后面不管是什么计算出来都是0,因此就达到 MD5值相等的目的了。

这里附上一些字符串进行MD5加密后前两位为“0e”的一个地址:

http://www.cnblogs.com/Primzahl/p/6018158.html

配合一个CTF进行讲解:

bugkuctf的web题:备份是个好习惯

?

?进去之后发现没什么线索,备份是个提示,直接御剑扫,扫出备份文件

最后扫出了一个bak备份文件,打开是index.php的代码

?

?很明显,大致的意思是要让两个get变量key1,key2的MD5值相等且本身不相等,并且这里用str_replace将key关键字替换为空;

这里就可以使用双写绕过,kekeyy即可;

然后我们利用php科学计数法缺陷,从我上面给的地址里面找两个字符串分别赋值给kekeyy1,kekeyy2即可

?

?然后满足了if条件,flag就出来了!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读