Отправляем данные серверу. Http протокол. HTTP протокол: Hypertext Transfer Protocol (HTTP, протокол передачи гипертекста) - это язык, которым клиенты и серверы World Wide Web пользуются для общения между собой. Он, по сути дела, является основой в Web. Из всего протокола нам нужно уяснить структуру его пакета - тип(только в пакетах клиент-сервер)+заголовоки+данные. В заголовках передается информация о клиенте, или о сервере (инфа отправителя и инфа о содержимом данных). Вот дамп данных, идущих сереру от FireFox`a: первые 2 строчки обязательны - в них указывается тип запроса, и хост, на который он идет, далее идет инфа от браузера и всякий бред Наиболее интересными и частоизменяемыми в хакерских целях являются поля: кукисы, передаваемые серверу: Cookie: L=1173559675.28403277; mesort=from; поле Referer - откуда нас сюда послали: Referer: http://ya.ru и поле X_FORWARDED_FOR, которое передает неанонимный проксисервер : X_FORWARDED_FOR: 12.153.13.24 ведь сюда мы можем подставить все, что угодно, а серверное ПО может обработать такую информацию некорректно - иксс, инъекция кода и тому подобное, существует очень много уязвимостей, использующих эти поля. Итак, метод GET посылает запрос на сервер, и читает ответ - заголовки сервера и тело ответа - используется класика сплойтостроения - провести инъекцию через уязвимый параметр и получить ответ с результатом. Метод POST аналогичен методу гет, только с помощью него можно передавать больше данных - аналогично, только если данные передаются формой. Метод HEAD - отправляет запрос на сервер, но получает только заголовок - используется в брутах и досерах (когда дос идет не на отдаваемое содержимое, а на время обработки запроса). лучше 100 раз увидеть, чем 1 раз прочитать, поэтому берем снифер, и снифам за своим браузером, что он посылает и как принимает, роемся в сорцах приложения(если есть), ищем дырки, составляем запрос, и вуаля, ставьте штамп взломано! Так же снифинг трафика очень помогает изучить систему неимея ее исходного кода. вот клевый снифер WPE-PRO Более подробно ознакомиться с протоколом можно ТУТ и ТУТ WPE-PRO так.. как отправлять разобрались, а как же получить дамп пакета, идущего к серверу? лично я использую снифер WPE-PRO в нем выбираем имя приложения, и нажимаем кнопку запись, ловим дампы летящих пакетов, которые затем можем изменить и переслать либо с помощью того же WPE-PRO, либо с помощью Inet-Crack. InetCrack Качаем его отсюда: InetCrack интерфейс интуитивно понятный))) Поехали! Итак, как же отправлять запросы и получать ответы? мы рассмотрим несколько языков и методов: PHP (fsockopen) Вот небольшой кусочек кодаотправляющий запрос серверу через сокеты (CURL юзать не будем, т.к. статья для новичков - там не все видно, да и не везде он стоит): PHP: <?php // открываем сокет на хост: локалост и на 80 порт (стандартный веб) $fp = fsockopen('localhost', 80, $errno, $errstr, 30); // Проверяем успешность установки соединения if (!$fp) echo "$errstr ($errno)<br />\n"; else { $headers = "HEAD / HTTP/1.1\r\n"; // отвечает за тип протокола! $headers .= "Host: localhost\r\n"; $headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1\r\n"; $headers .= "Referer: http://ya.ru/\"\r\n"; $headers .= "Connection: Close\r\n\r\n"; // Отправляем HTTP-запрос серверу fwrite($fp, $headers); // Получаем ответ $line=''; while (!feof($fp)) { $line .= fgets($fp, 1024); } fclose($fp); } echo $line; ?> вот эта строчка: PHP: $headers = "HEAD /js.js HTTP/1.1\r\n"; указывает, что тип запроса - HEAD, т.е. мы получим только заголовки ответа сервера, вот один из ответов на денвер: если бы мы указали GET вместо HEAD, то получили бы не только заголовки ответа, но и сам ответ, как например тут: PHP: $headers = "GET / HTTP/1.1\r\n"; Примечание: в конце каждой строчки запроса дописываем: \r\nэто "символ перевода каретки". в конце каждого запроса нужно ставить двойное: \r\n\r\n (В HEX-дампе это выглядит как 0D 0A и 0D 0A 0D 0A) PHP (cURL) cURL - модуль для пшп, для начала - как его установить? т.к. по дефолту не идет, качаем: http://slil.ru/24058043 зырим в файл php.ini, находим там строчку: extension_dir = "директория", в эту директорию и кидаем скачаный плагин. Находим в том же файле php.ini строчку ;extension=php_curl.dll и заменяем на extension=php_curl.dll (если нету, то добавляем). Итак, cURL - настроен. Работа с ним абсолютно аналогична, как и с сокетами, например: PHP: function PrintPage($cookieStr, $url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'ослик маздай'); curl_setopt($ch, CURLOPT_COOKIE, $cookieStr); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_REFERER, 'http://antichat.ru/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $pageOut = curl_exec($ch); curl_close($ch); return $pageOut; } Плюсы cURL - поддерживает и https, к минусам же относится - редко установлен на хостингах, да и синтаксис его знать нужно) в сокетах его гораздо меньше), поэтому предпочтительнее использовать сокеты - и быстрее, и "переносимее", т.к. сокеты всегда есть (если не продизаблены) PERL вот отличный пример - http://www.milw0rm.com/exploits/1063 - учитесь рыться в чужих сорцах ) и вообще, милворм - кладезь информации )) да и вот две статьи: http://forum.antichat.ru/thread27981-inetcrack.html http://forum.antichat.ru/thread28960-inetcrack.html - от Gh0s7`a
Не раскрыты 3 важных вопроса: 1. Как там кукисы отсылать. 2. Как с https через php работать. 3. Как многопоточность организовать (я так понимаю curl, но возможно ошибаюсь). Особенно второй вопрос интересует.
1. PHP: $headers .= "Cookie: var1=value; var2=value \r\n"; 2. через cURL, ок, щас добавлю. 3. многопоточности в ПШП НЕТ!!! только извращения с неблокировкой сокетов. Печенька))) начальный вариант скрипта взят из книги "Головоломки для хакера на PHP", я же изменил регулярку, скрипт теперь снова живой!!! PHP: <?php // Формируем фрагменты запроса $hostname = "www.google.ru"; $button = "Поиск"; $query = "Форум по регулярным выражениям"; $path = "/search?hl=ru&q=".win_utf8($query)."&btnG=".win_utf8($button)."&lr="; // Снимаем ограничение на время выполнения скрипта set_time_limit(0); // Вызываем функцию, которая загружает страницу $contents = get_content($hostname, $path); // Регулярное выражение $pattern = '|<a href=\"([^\"]*)[^>]*>|is'; // Выполняем поиск по регулярному выражению preg_match_all($pattern, $contents, $out, PREG_PATTERN_ORDER); // Выводим результаты поиска for($i = 0; $i < count($out[1]); $i ++) { echo $out[1][$i]."<br>"; } // Функция загружающая страницу при помощи секетов function get_content($hostname, $path) { $line = ""; // Устанавливаем соединение, имя которого // передано в параметре $hostname $fp = fsockopen($hostname, 80, $errno, $errstr, 30); // Проверяем успешность установки соединения if (!$fp) echo "$errstr ($errno)<br />\n"; else { // Формируем HTTP-заголовки для передачи // его серверу $headers = "GET $path HTTP/1.1\r\n"; $headers .= "Host: $hostname\r\n"; // Подделываем пользовательский агент, маскируясь // под пользователя WindowsXP $headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1\r\n"; // Подделываем реферер, сообщая серверу, что мы повторно // нажимаем кнопку "Поиск" $headers .= "Referer: http://".$hostname.$path."\r\n"; $headers .= "Connection: Close\r\n\r\n"; // Отправляем HTTP-запрос серверу fwrite($fp, $headers); // Получаем ответ while (!feof($fp)) { $line .= fgets($fp, 1024); } fclose($fp); } return $line; } // Функция преобразования текста из кодировки cp-1251 (Windows) // в UTF-8 в формате Google function win_utf8($str) { $win = array("а","б","в","г","д","е","ё","ж","з","и", "й","к","л","м","н","о","п","р","с","т", "у","ф","х","ц","ч","ш","щ","ъ","ы","ь", "э","ю","я","А","Б","В","Г","Д","Е","Ё", "Ж","З","И","Й","К","Л","М","Н","О","П", "Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ", "Ъ","Ы","Ь","Э","Ю","Я"," "); $utf8 = array("%D0%B0","%D0%B1","%D0%B2","%D0%B3","%D0%B4", "%D0%B5","%D1%91","%D0%B6","%D0%B7","%D0%B8", "%D0%B9","%D0%BA","%D0%BB","%D0%BC","%D0%BD", "%D0%BE","%D0%BF","%D1%80","%D1%81","%D1%82", "%D1%83","%D1%84","%D1%85","%D1%86","%D1%87", "%D1%88","%D1%89","%D1%8A","%D1%8B","%D1%8C", "%D1%8D","%D1%8E","%D1%8F","%D0%90","%D0%91", "%D0%92","%D0%93","%D0%94","%D0%95","%D0%81", "%D0%96","%D0%97","%D0%98","%D0%99","%D0%9A", "%D0%9B","%D0%9C","%D0%9D","%D0%9E","%D0%9F", "%D0%A0","%D0%A1","%D0%A2","%D0%A3","%D0%A4", "%D0%A5","%D0%A6","%D0%A7","%D0%A8","%D0%A9", "%D0%AA","%D0%AB","%D0%AC","%D0%AD","%D0%AE", "%D0%AF","+"); return str_replace($win, $utf8, $str); } ?> ЗЫ он вырывает ссылки с гугла... гугла хак на автомате так сказать)
Хоть для себя ничего нового не узнал, но года три назад я бы танцевал с бубном, после прочтения этой статьи (как-раз этой темой занимался) ++ Сам батька nerezus писал - есть! http://www.php.net/pcntl-fork
есть то есть, но это многопоточность операционки, а не пшп(интерпретируемый язык) вот еще 1 из вариантов без форка: http://www.stableversion.com/2006/04/17/multithread-php/ вот неблокируемые сокеты от задохлика: http://zadoxlik.info/portscan.php.txt ну и вкусность: http://php.rinet.ru/manual/en/ref.pcntl.php все же это не потоки, в общепринятом понятии)
PHP-снифер Может применяться как и снифер для XSS атак, так и для анализа отправляемых заголовков. PHP: <?$location = $_SERVER["HTTP_REFERER"]; // откуда пришел юзер$out=$_GET['out']; // строка GET данных$headers = apache_request_headers(); // хедеры, переданные апачуforeach ($headers as $header => $value) { $out.= "$header: $value <br />"; // складываем все это все в читабельный вид}$fo=fopen("log.html","a"); // открываем лог$entry="<pre>Адрес запроса: $location $out\r\n"; // готовим данныеfputs($fo,$entry); // записываем ихfclose($fo); // закрываем лог?>
DELPHIюзаем TCP Socket или читаем дальше: http://www.delphiworld.narod.ru/base/get_post_data.html http://www.delphiworld.narod.ru/base/browser_post.html http://www.delphiworld.narod.ru/base/http_post_result.html http://www.delphiworld.narod.ru/base/http_get.html Ну и: Code: NMHTTP компонент, закладка FastNet. Там есть то что нужно - Функция post. все это было найдено за 5 сек тут: http://www.delphiworld.narod.ru/dw.html архив дв качаем тут: http://forum.antichat.ru/showpost.php?p=108830&postcount=3 ЗЫ: Люди! используйте поиск и не бомбите мне аську)) не.. бомбите - тут больше материала будет тогда)
еще 3 года назад у меня не было компьютера и я не знал как его включать ну а насчет обзора, конечно все это известно, но для новичков думаю будет познавательно почитать