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

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

Nemiana

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

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

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

Vovochka

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

Nemiana

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

????

Гость
#4
Nemiana
теоретически возможно.
http://ldp.dvo.ru/linuxfocus/Russian/Novem...rticle203.shtml
Поэтому, если наш запрос 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.
проверять влом

в догонку http://sdteam.com/?tid=295
 
N

Nemiana

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