打開題目,看到購買頁面:
嘗試購買,輸入ID=1,Price=2,發現購買失敗:
再嘗試購買最貴的獨角獸,發現有問題:
提示我們只能輸入一個字符。再加上在head標籤裏的提示:
猜測可能是編碼轉換問題,而且如果成功購買第四個獨角獸就可以成功得到flag。
題中編碼爲UTF-8編碼,我們可以用UTF-8與Unicode的編碼轉換問題來繞過一個字符的限制。
在這個網站搜索一個大於1337的數字,如:
這題的大致思路是這樣的:傳入UTF-8編碼,在後端處理的過程中,發現該UTF-8編碼無法解析爲ASCII碼,然後會將其解析爲Unicode編碼,而Unicode中的這個字符表示的值爲50000,且爲一個字符,於是就繞過了一個字符的限制,數字大小也足夠,成功購買,得到flag。
爲什麼會這樣進行解析,在這篇文章說的很清楚。
我們將該字符UTF-8編碼中的0x換成%,即可成功購買,得到flag。
還有一些Unicode安全問題在這裏,感興趣的可以繼續看一看。