打开题目
我们买最贵的试试看,结果提示只能输入一个字符
抓包分析一下看看
从中可以发现源代码是如何处理price
的
使用的是unicodedata.numeric()
但是我们查看页面源代码,发现页面的编码是utf-8编码
所以,前端html使用的是utf-8
,后端python处理使用的是unicode
,编码不一致造成了转码问题
所以我们利用这个网址:
Unicode - Compart
我们直接搜索一万的数值用Unicode表示是什么
我们任意选择一个大于1337的数字就行
这里我们选择的是
找到它的utf-8编码
我们把0x替换成%,上传即可
或者直接输入汉字,万或者亿
还可以直接把这个字符复制过去
得到flag
知识点:
python之numeric
语法:unicodedata.numeric(chr[, default])
描述:将Unicode字符(chr)转换为等效的数值。以浮点形式返回【与chr相对应的数值】。若未定义这样的值,则返回默认值default;若未指定默认值,则抛出ValueError异常。(把一个表示数字的字符转换为浮点数。比如,可将’5’、'五’转换数值输出。与digit()不同是numeric()可以转换任意表示数值的字符,不仅仅限于0到9的字符)
示例代码如下:
print(unicodedata.numeric('四'))
print(unicodedata.numeric('a', 0)) # 'a'不能转换为数字,所以返回默认值0
输出结果为:
4.0
0
知识点参考:Python之unicodedata模块的常用函数用法_unicodedata.numeric-CSDN博客