科学计算法+php绕过,php弱语言特性-计算科学计数法

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题:备份是个好习惯

c125f9bb18d78ca2325c8de5755f734a.png

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

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

044e991bdefe41c605a871d47df0a34e.png

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

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

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

f5255d1621f2c2c51a9e762cb7d7d1b5.png

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值