題目鏈接:https://ctf.bugku.com/challenges
題解:
打開題目
得到一段PHP代碼
代碼中的相關知識點鏈接: eregi函數:http://www.kuqin.com/php5_doc/function.eregi.html urldecode:是一種URL編碼函數
根據代碼的意思,首先看沒有經過urldecode編碼的字符串 $_GET[id] 是否匹配字符串 hackerDJ ,從代碼意思看,想要得到flag不應該匹配,但是經過urldecode編碼后應匹配字符串 hackerDJ ;因此利用了兩次urldecode第一次是瀏覽器的解碼、第二次是函數的解碼,所以我利用字符串 hackerDJ 中隨便一個字母進行兩重編碼即可。
例如:選擇最后一個字母“J”,進行雙重編碼
第一次:字母“J”對應的URL編碼為:%4A 【其對照表鏈接為:https://pan.baidu.com/s/1diPXvMA-f3rGAZSdzYHGPg】
第二次:再經過urldecode編碼【urldecode在線編碼鏈接:http://www.convertstring.com/zh_CN/EncodeDecode/UrlEncode】
即最后得到:字符“J” 經過二次編碼得到 %254A ;因此構造 payload 為:
?id=hackerD%254A
提交得到flag
同樣的道理,選取其他字符也是一樣的效果,就不再這里一一舉例了。
即flag為:flag{bugku__daimasj-1t2}