zoukankan      html  css  js  c++  java
  • 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题:备份是个好习惯

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

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

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

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

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

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

  • 相关阅读:
    闭包 (Closure)
    RSA算法
    HTTPS
    SSH
    HDU1754 I hate it_线段树(入门级别)
    HDU1166 敌兵布阵_线段树
    c++运算符优先级表
    归并排序练习.
    HDU 1969 精度二分
    uva10944 状态压缩bfs or DP
  • 原文地址:https://www.cnblogs.com/-chenxs/p/11653058.html
Copyright © 2011-2022 走看看