代碼審計_urldecode二次編碼繞過


題目鏈接: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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM