我正在做一个简单的练习,复制一个 base64 编码的 cookie 值,然后进行一些更改,然后重新编码,然后使用结果以管理员身份登录网站。
我有以下编码字符串:
Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjU6ImRhZHNhIjtzOjc6ImlzQWRtaW4iO2I6MDt9
我像这样解码它:
$ echo Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjU6ImRhZHNhIjtzOjc6ImlzQWRtaW4iO2I6MDt9 | base64 --decode 1 ⨯
O:4:"User":2:{s:8:"username";s:5:"dadsa";s:7:"isAdmin";b:0;}
然后我做了一个小改动,以便能够以管理员身份登录:
O:4:"User":2:{s:8:"username";s:5:"dadsa";s:7:"isAdmin";b:1;}
他们尝试再次对其进行编码:
$ echo O:4:"User":2:{s:8:"username";s:5:"dadsa";s:7:"isAdmin";b:0;} | base64 1 ⨯
zsh: parse error near `}'
这给了我一个解析错误。前几天我做了这个,效果很好。
为什么我不能编码这个字符串?
那里不带引号的分号用作命令分隔符。与
echo foo; ls -l
运行两者相同echo
,ls
而不仅仅是echo
. The}
是一个 shell 关键字,类似于if
,then
orfi
,并且它不在语法上正确的位置,因此出现错误。(zsh 不接受 evenecho }
,所以在那里,它也可能被解析为运算符。)如果删除
}
,您将看到“找不到命令”s:5:dadsa
等错误。您可能打算引用字符串:
这里的一些问答中有一些 shell(复数)特殊字符的列表,例如
,在命令行参数中需要转义哪些字符?另请参阅如何在 Unix shell 中将特殊字符用作普通字符?以及shell 中的 "..."、'...'、$'...' 和 $"..." 引号之间有什么区别?