преобразуйте шестнадцатеричную строку в двоичный файл и отправьте с netcat

sudo команда может выполнить что-либо как конкретного пользователя с -u опция. Вместо того, чтобы волноваться об оболочках, просто попытайтесь cat (или выполнитесь, безотносительно), Ваш файл как Ваш целевой пользователь:

$ sudo -u apache cat .ssh/authorized_keys 
cat: .ssh/authorized_keys: Permission denied
50
11.07.2013, 01:32
3 ответа

Я использовал-r, и-p переключаются на xxd:

$ echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181

Благодаря вдохновению из ответа @Gilles вот версия жемчуга:

$ echo '0006303030304e43' | perl -e 'print pack "H*", <STDIN>' | nc -l localhost 8181
59
27.01.2020, 19:33
  • 1
    Работает отлично для шестнадцатеричного формата bytea Пост-ГРЭС, после того как продвижение \x чередуется прочь. –  nathancahill 10.05.2016, 22:38

Здесь решение без xxd или perl:

Если echo встроенный из Вашей оболочки поддерживает его (bash и zsh сделайте, но нет dash), просто необходимо использовать правильные Escape обратной косой черты:

echo -ne '\x00\x06\x30\x30\x30\x30\x4e\x43' | nc -l localhost 8181

Если Вы имеете /bin/echo от GNU coreutils (почти стандарт в системах Linux) или от busybox можно использовать его, также.

С sed можно генерировать завершенный шаблон:

$ echo '0006303030304e43' | sed -e 's/../\\x&/g'
\x00\x06\x30\x30\x30\x30\x4e\x43

Объединенный:

echo -ne "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181
26
27.01.2020, 19:33

Если Вы имеете xxd, это легко: это может преобразовать в и от шестнадцатеричного.

echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181

Я не думаю, что существует разумное (и довольно быстро) способ преобразовать шестнадцатеричный в двоичный файл с помощью только инструменты POSIX. Это может быть сделано довольно легкое в Perl. Следующий сценарий преобразовывает шестнадцатеричный в двоичный файл, игнорируя любой вводимый символ, который не является шестнадцатеричной цифрой. Это жалуется, содержит ли входная строка нечетное число шестнадцатеричных цифр.

#!/usr/bin/env perl
$^W = 1;
$c = undef;
while (<>) {
    tr/0-9A-Fa-f//cd;
    if (defined $c) { warn "Consuming $c"; $_ = $c . $_; $c = undef; }
    if (length($_) & 1) { s/(.)$//; $c = $1; }
    print pack "H*", $_;
}
if (!eof) { die "$!"; }
if (defined $c) { warn "Odd number of hexadecimal digits"; }

Если действительно необходимо придерживаться POSIX (например, на встроенном устройстве), я рекомендую использовать Base64 вместо шестнадцатеричного. Можно использовать программу uudecode для декодирования Base64. Вход должен иметь формат заголовка и линию конца, продолженную Uuencode, это не может быть необработанный Base64.

uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF
12
27.01.2020, 19:33

Теги

Похожие вопросы