Как я могу запустить программу на своем терминале?

Вы можете передавать awkпеременные извне, используя аргумент -v. Вы можете использовать его повторно для передачи нескольких переменных.

Например, для первой строки вашего скрипта:

awk -v FIELD_DELIMITER='\036' -v WIPEOUT_CHARACTER='X' 'BEGIN{FS=OFS=FIELD_DELIMITER} {gsub(/./, WIPEOUT_CHARACTER, $13)} 1' $1 > $file_directory'/'$mask_filename$seperation$temp$DATA_SUFFIX

Я проверил GNU Awk 4.1.4, и он с удовольствием взял "\036" и интерпретировал его как разделитель записей ASCII RS (), поэтому я ожидаю, что это должно работать и для вас.

5
11.01.2021, 07:59
3 ответа

Похоже, что scriptявляется решением, как упоминал А.Б. С помощью -eвы даже получите код возврата программы. cat -vetпоказывает более явно возврат каретки ^Mи новую строку $.

$ script -q -e out -c./pusher.bin >/dev/null; echo $?
0
$ cat -vet out
Script started on Mon Dec 21 10:54:40 2020$
echo 'Catch me if you can'^M$
2
18.03.2021, 22:41

Я придумал это функциональное, но ошибочное решение:

RESULT="$(bash -c 'ID="s$(head -c 8 /dev/urandom | base64 | sed "s/[^0-9a-zA-Z]//g")"; F="$(mktemp)";  screen -d -m -S "$ID" bash -c "./escape.bin; cat >/$F"; sleep 1s; screen -S "$ID" -X quit; cat <$F; rm "$F"')"

Разбивка важных битов:

# Generate a unique session name for screen
ID="s$(head -c 8 /dev/urandom | base64 | sed "s/[^0-9a-zA-Z]//g")";

# Get a temporary file
F="$(mktemp)";  

# Run pusher in a detached (`-d -m`) screen session 
# with its own tty and read back the tty's buffer 
# using cat and write it to the temporary file
screen -d -m -S "$ID" bash -c "./pusher.bin; cat >/$F"; 

# Sleep for one second for pusher to finish (I'm a 
# aware that I can poll screen using `-list`, but 
# exec fails for some reason, help here would be 
# appreciated)
sleep 1s; 

# Kill screen session manually (again, `exec`ing 
# fails for some reason )
screen -S "$ID" -X quit; 

# Print the contents of F to stdout so that it can 
# be captured by the outermost `$(...)`
cat <$F; 

# Removes the temporary file
rm "$F"'

Этот метод достаточно надежен для моего случая использования, но у него есть очевидные проблемы:

  1. Статус выхода pusher.binпотерян.
  2. Не ожидает выхода pusher.bin, а предполагает, что он будет завершен через 1 секунду.
  3. Использует сеансы экрана, общий и -обращенный к пользователю ресурс, чтобы получить tty.
  4. Не удаляет временный файл на ранней стадии, что может привести к тому, что временные файлы останутся позади, если что-то пойдет не так.

Некоторые из них легко исправить, в то время как другие требуют больше усилий.

0
18.03.2021, 22:41

Вам нужно прочитать терминал после инъекции. Например, для одной строки:

$./pusher.bin;read a
$ echo "Intercepted: $a"

или вообще:

$./pusher.bin;cat

Возможно, вам придется внедрить EOF, чтобы catзавершилось.

Альтернативный вариант, если вы хотите видеть только введенные символы:

$ stty -echo;./pusher.bin;cat;stty echo

Вы не сможете захватить введенные строки и отличить их от обычного ввода

1
18.03.2021, 22:41

Теги

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