我正在做一个简单的练习,复制一个 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 `}'
这给了我一个解析错误。前几天我这样做了,效果非常好。
为什么我无法编码这个字符串?
答案1
echo O:4:"User":2:{s:8:"username";s:5:"dadsa";s:7:"isAdmin";b:0;}
^ ^ ^ ^
不带引号的分号用作命令分隔符。与运行相同,echo foo; ls -l
同时运行echo
和 ,ls
而不仅仅是echo
。是}
一个 shell 关键字,类似于if
, then
or fi
,并且它不在语法上正确的位置,因此会出现错误。 (zsh 不接受 Even echo }
,因此它也可能被解析为运算符。)
如果删除}
,您将看到“找不到命令”s:5:dadsa
等错误。
您可能想引用该字符串:
echo 'O:4:"User":2:{s:8:"username";s:5:"dadsa";s:7:"isAdmin";b:0;}'
这里的一些问答中有一些 shell(复数)特殊字符的列表,例如
命令行参数中需要转义哪些字符?另请参阅如何在 Unix shell 中像普通字符一样使用特殊字符?和shell 中的 "..."、'...'、$'...' 和 $"..." 引号之间有什么区别?