Приветствую читателей. Статья будет короткой, но полезной. Часто, читая багтрак, я вижу, что в веб-движках преобладают XSS (CSS) уязвимости. Как-то открыв ][хакер, я прочитал, что XSS - одна из самых распространенных уязвимостей. Но искать их - долго и нудно. Как облегчить себе участь? Это вопрос. С помощью Perl. Это ответ. Сейчас мы напишем сканер, который будет искать XSS-ки в GET-переменных. Как он будет работать? Сканеру будут передаваться 4 параметра: URL сервера (с префиксом http://), путь к скрипту (если скрипт в корне, то просто /), название удаленного скрипта и файл, в котором прописаны GET-переменные (1 переменная на строку, а поискать эти переменные придется "ручками", т.е. самим с помощью браузера). Наш сканер, используя модуль LWP (рулезная вещь для работы с WEB) будет изменять значения GET-переменных на текст, позволяющий выявить XSS. В случае удачи он будет сообщать названия переменных и показывать полные запросы к скрипту. Но довольно теории - идем в практику!
#!/usr/bin/perl #5p4x2knet's CSS scanner (for GET variables) #only for article #ну вот, когда формальности соблюдены, займемся делом =)) use LWP::Simple; #подключаем LWP if(@ARGV != 4) #если количество параметров не в норме { die "Use: n script_name url(with_"http://") path remote_script_name file_with_GET_variablesn for example: n xss.pl victim.gov / index.php vars.txt n file with variables:n one variable = one stringnnnnnn"; #говорим, как надо делать, затем выходим } $url = $ARGV[0].$ARGV[1].$ARGV[2]; #полный адрес скрипта open(FILE, "; #в массив его close(FILE); #закрываем print "$url ...n vullnerability:nn"; #это просто любезность =) foreach $line(@gets) #создаем цикл Foreach { $line =~ s/n//; #убираем из GET-переменных переводы строки $line =~ s/ //; #и пробелы (позже я узнал, что есть такая штука, как chomp=)) $req = get "$url?$line=x55, x55, x55!0ur 5c4nn3r c001"; #подставляем в переменную строку, которая поможет узнать, уязвима ли #переменная, но подставляем такую строку, которую ни один нормальный #админ не напишет в трезвом виде =))) if($req =~ /x55, x55, x55!0ur 5c4nn3r c001/i) #если уязвимость есть { print "$line ($url?$line=x55, x55, x55!0ur 5c4nn3r c001)n"; #выводим название переменной, а также сделанный запрос } } print "Done n"; #сообщаем о конце сканирования
На портале статья отобразилась косячно, сделай вот что: на 9-й строке поставь обратные слеши перед кавычками, будут еще баги - исправляй, ошибки при компиляции/интерпретации отлавливаются быстро. Надеюсь, ты также поймешь, где я писал n, а где хакзона убила бэкслеш в переводе строки =)))) Вот, мы написали этот сканер. Это делается очень легко, т.к. модуль LWP - очень хорошая вещь для веба; как вероятно заметил читатель, я использовал функцию get. Она получает код странички (слабо сделать "Наш ответ lynx"? =))), принимая в качестве аргумента URL. Что-нибудь вроде этого можно сделать и на сокетах (соединяться на 80-й порт, посылать запросы, обрабатывать ответ сервера...), но это сложно и совершенно нам не нужно. Ладно, до встречи в виртуальности, только не забывай, что я не несу никакой ответственности за твои исследования ;)
|