• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Лабораторная по Perl

  • Автор темы Nemiana
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Nemiana

Лабораторная по предмету "Основы защиты информации". Все бы хорошо, только Perl я в глаза не видела, а задание надо сделать. Помогите решить эту хитрую задачу.

Задание. Можно ли удалить файл /etc/passwd используя ошибку фильтрации вводу пользователя (переменная par1) приведенного ниже фрагмента cgi-программы написанной на языке Perl? Если да, запишите необходимое значение переменной par1 в www-url-encoding форме. Если нет - объясните, почему это невозможно.

$cgidir=”/etc”; open(DATA,"$cgidir/data/$par1.pass");
 
V

Vovochka

Я не спец в компьютерной безопасности, но думаю, что нет.
Не смотря на то, что выйти из папки /etc/data можно, имя открываемого файла всегда будет заканчиваться на ".pass".
Как узнаете правильный ответ, поделитесь ;)
 
N

Nemiana

Vovochka, спасибо и на этом )) Если вдруг узнаю правильный ответ, обязательно напишу.
 
?

????

Nemiana
теоретически возможно.

Поэтому, если наш запрос showhtml.cgi?filename=%2Fetc%2Fpasswd%00, файл будет называться my $filename = "/etc/passwd\0.html" и нашему удивленному взору предстанет кое-что не являющееся HTML.

Что случилось? Команда strace показывает, как Perl открывает файл:

/tmp >>cat >open.pl << EOF
> #!/usr/bin/perl
> open(FILE, "/etc/passwd\0.html");
> EOF
/tmp >>chmod 0700 open.pl
/tmp >>strace ./open.pl 2>&1 | grep open
execve("./open.pl", ["./open.pl"], [/* 24 vars */]) = 0
...
open("./open.pl", O_RDONLY) = 3
read(3, "#!/usr/bin/perl\n\nopen(FILE, \"/et"..., 4096) = 51
open("/etc/passwd", O_RDONLY) = 3

Последний open(), показанный strace, соответствует системному вызову, написанному на C. Мы можем видеть, что расширение .html исчезает, что позволяет нам открыть /etc/passwd.

проверять влом

в догонку
 
N

Nemiana

????
Спасибо за помощь! *Углубляюсь в чтение*
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!