php 科学计数法 运算,php弱语言特性-计算科学计数法
php處理字符串時存在一個缺陷問題,如果字符串為“1e1”,本該是一個正常的字符串,但是php會將它認為是科學(xué)計數(shù)法里面的e;
也就是按照數(shù)學(xué)的科學(xué)計數(shù)法來說:1e1=10^1=10,因此php會把這個字符串里面的1e1進行科學(xué)計數(shù)法計算,得出來就為“10”,即遇到“0e212”這些字符串直接看作為“0”.
CTF中遇到的一些代碼審計題,如果出題者想利用這一缺陷,往往會配合MD5值來運用。
它會讓你使兩個GET或者POST變量的值不相等,但是讓他們的MD5值相等,正常來說不可能,很難找出字符串不等且MD5相等的兩個字符串。
因為MD5值為數(shù)字加字母,因此我們就可以使用php的這個缺陷,讓MD5的第一位為數(shù)字0,然后第二位數(shù)字為e就行了,后面不管是什么計算出來都是0,因此就達到 MD5值相等的目的了。
這里附上一些字符串進行MD5加密后前兩位為“0e”的一個地址:
http://www.cnblogs.com/Primzahl/p/6018158.html
配合一個CTF進行講解:
bugkuctf的web題:備份是個好習慣
進去之后發(fā)現(xiàn)沒什么線索,備份是個提示,直接御劍掃,掃出備份文件
最后掃出了一個bak備份文件,打開是index.php的代碼
很明顯,大致的意思是要讓兩個get變量key1,key2的MD5值相等且本身不相等,并且這里用str_replace將key關(guān)鍵字替換為空;
這里就可以使用雙寫繞過,kekeyy即可;
然后我們利用php科學(xué)計數(shù)法缺陷,從我上面給的地址里面找兩個字符串分別賦值給kekeyy1,kekeyy2即可
然后滿足了if條件,flag就出來了!
總結(jié)
以上是生活随笔為你收集整理的php 科学计数法 运算,php弱语言特性-计算科学计数法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink SQL Client初探
- 下一篇: 动态规划算法php,php算法学习之动态