攻防世界 easyphp

超级学渣渣發表於2024-05-08

開啟場景

這種難度為1的題目,可能是把程式碼都放前端,讓我們讀。可以看到要傳3個引數a、b、c

a滿足:轉換為整數後大於6000000&&長度<=3,1e7 1e8 1e9都可以

b滿足:md5加密後,後6位是8b184b,這裡暴力列舉一下就行

c滿足:json格式的陣列,有兩個索引c[m],c[n]。c[m]滿足非數字&&>2022。c[n]滿足 是陣列&&長度為2&&c[n][0]是陣列。c[n]還要滿足透過array_search()能匹配到“DGGJ”,透過逐項列舉,不真等於(===)“DGGJ”

c稍微麻煩點,首先是個jason格式的陣列{“m":"3022a",”n":[[1,2],0]}

這樣是可以透過的。但是有個問題。php8.1 array_search()應該是對底層實現最佳化了,array_search我估計是逐項列舉,判斷是否相等(==),之前的版本是轉換成數字比較,”DGGJ"會轉換成0,這樣c[n][1]=0就可以匹配上了。但是新版本是都轉換成字串,逐項比對ascii碼。所以用新版的php自己驗證可能不透過。

同樣的c[m]和2022比較,如果c[m]=102056a,舊版本會被轉換為102056,與2022比較。但是新版本可能轉換成ascii逐項比較。不過今天又復現不出來了,先記錄一下,歡迎交流