点击进去之后是一个购买独角兽的界面,有四种类型的独角兽,前三种的价格比较便宜,最后的独角兽价格比较贵。
我们先尝试购买前三种独角兽,输入id,然后price输入9
然后就告诉我商品错了,可能复现靶场这里没有做好
然后我们查看源代码
可以看到在charset="utf-8"后面有提示,这里非常重要。
但是很多的网站都是utf-8编码,为什么会说这里很重要?
回到购买界面,我们输入其他的价格,发现输入10的时候有提示
告诉了我们只能使用一个字符,一个字符能够购买的就只有前三只独角兽,虽然我也没有购买成功hhh
所以猜测只要购买了第四只独角兽,就能获取flag,于是我们需要找到一个字符比1337大的数字
也就是utf-8编码的转换安全问题
附上相关的链接:
https://xz.aliyun.com/t/5402#toc-0
https://blog.lyle.ac.cn/2018/10/29/unicode-normalization/
接着我们在这个网站搜索大于 thousand 的单个字符,就可以购买第四只独角兽了:https://www.compart.com/en/unicode/
有很多,我选的是这个长得丑丑的字符:
可以看到它代表的数值是10000
它的utf-8编码是0xE1 0x8D 0xBC
我们将0x换成%,得到%E1%8D%BC,输入就可以购买flag了
参考链接:
https://shawroot.hatenablog.com/entry/2019/10/29/ASIS_2019-Unicorn_shop
https://github.com/hyperreality/ctf-writeups/tree/master/2019-asis
https://www.icode9.com/content-4-441318.html
UTF-8 Encoding: | 0xE1 0x8D 0xBC |