PDA

Просмотр полной версии : Отправляем данные серверу.


Talisman
10.03.2007, 21:32
HTTP протокол:
Hypertext Transfer Protocol (HTTP, протокол передачи гипертекста) -
это язык, которым клиенты и серверы World Wide Web пользуются для общения
между собой. Он, по сути дела, является основой в Web.
Из всего протокола нам нужно уяснить структуру его пакета - тип(только в пакетах клиент-сервер)+заголовоки+данные.
В заголовках передается информация о клиенте, или о сервере (инфа отправителя и инфа о содержимом данных).
Вот дамп данных, идущих сереру от FireFox`a:
GET / HTTP/1.1
Host: www.yandex.ru (http://www.yandex.ru)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.2) Gecko/20070219 Firefox/1.5.0.8, AlexaToolbar YB/2.0.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5..Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3..Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: L=1173559675.28403277; mesort=from;первые 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 (http://ipload.ru/file.php?File=11571885272)

Более подробно ознакомиться с протоколом можно ТУТ (http://phpclub.ru/detail/article/http_request) и ТУТ (http://forum.antichat.ru/showthread.php?p=306650#post306650)

WPE-PRO

так.. как отправлять разобрались, а как же получить дамп пакета, идущего к серверу? лично я использую снифер WPE-PRO (http://ipload.ru/file.php?File=11571885272) в нем выбираем имя приложения, и нажимаем кнопку запись, ловим дампы летящих пакетов, которые затем можем изменить и переслать либо с помощью того же WPE-PRO, либо с помощью Inet-Crack.
InetCrack

Качаем его отсюда: InetCrack (http://www.old.antichat.ru/inetcrack/InetCrack.zip) интерфейс интуитивно понятный)))
Поехали!



Итак, как же отправлять запросы и получать ответы? мы рассмотрим несколько языков и методов:

PHP (fsockopen)

Вот небольшой кусочек кодаотправляющий запрос серверу через сокеты (CURL юзать не будем, т.к. статья для новичков - там не все видно, да и не везде он стоит):
<?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;
?>вот эта строчка:
$headers = "HEAD /js.js HTTP/1.1\r\n";указывает, что тип запроса - HEAD, т.е. мы получим только заголовки ответа сервера, вот один из ответов на денвер:
HTTP/1.1 200 OK
Date: Sat, 10 Mar 2007 17:19:51 GMT
Server: Apache/1.3.33 (Win32) PHP/4.4.4
Last-Modified: Wed, 28 Feb 2007 21:07:58 GMT
ETag: "0-30c-45e5ef2e"
Accept-Ranges: bytes
Content-Length: 780
Connection: close
Content-Type: application/x-javascript
если бы мы указали GET вместо HEAD, то получили бы не только заголовки ответа, но и сам ответ, как например тут:
$headers = "GET / HTTP/1.1\r\n";HTTP/1.1 200 OK
Date: Sat, 10 Mar 2007 17:07:00 GMT
Server: Apache/1.3.33 (Win32) PHP/4.4.4
Last-Modified: Wed, 28 Feb 2007 21:07:58 GMT
ETag: "0-30c-45e5ef2e"
Accept-Ranges: bytes
Content-Length: 780
Connection: close
Content-Type: application/x-javascript

function Popup(i)
{
myElement = document.getElementById("ce");
if(myElement != null)
{
var hilfe = "<div class=\"popup3\"><iframe frameborder=\"0\" id=\"Frame\" src=\"hilfe.php?s="+ i + "\" width=\"415\" height=\"400\" border=\"0\"></iframe></div><a href=\"#\" onClick=\"Close()\"><img src=\"img/un/a/x.gif\" border=\"1\" class=\"popup4\" alt=\"Schlie&szlig;en\"></a>";
myElement.innerHTML=hilfe;
}
}Примечание: в конце каждой строчки запроса дописываем: \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 - настроен. Работа с ним абсолютно аналогична, как и с сокетами, например:
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 (http://forum.antichat.ru/member.php?u=29784)`a

vmn
10.03.2007, 22:30
Не раскрыты 3 важных вопроса:
1. Как там кукисы отсылать.
2. Как с https через php работать.
3. Как многопоточность организовать (я так понимаю curl, но возможно ошибаюсь).

Особенно второй вопрос интересует.

Talisman
10.03.2007, 22:35
Не раскрыты 3 важных вопроса:
1. Как там кукисы отсылать.
2. Как с https через php работать.
3. Как многопоточность организовать (я так понимаю curl, но возможно ошибаюсь).

Особенно второй вопрос интересует.
1.
$headers .= "Cookie: var1=value; var2=value \r\n";
2. через cURL, ок, щас добавлю.
3. многопоточности в ПШП НЕТ!!! только извращения с неблокировкой сокетов.
Печенька)))

начальный вариант скрипта взят из книги "Головоломки для хакера на 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);
}
?>
ЗЫ он вырывает ссылки с гугла... гугла хак на автомате так сказать)

fucker"ok
10.03.2007, 23:11
Хоть для себя ничего нового не узнал, но года три назад я бы танцевал с бубном, после прочтения этой статьи (как-раз этой темой занимался)
++

3. многопоточности в ПШП НЕТ!!! только извращения с неблокировкой сокетов.
Сам батька nerezus писал - есть!
http://www.php.net/pcntl-fork
;)

Talisman
10.03.2007, 23:17
есть то есть, но это многопоточность операционки, а не пшп(интерпретируемый язык)
вот еще 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
все же это не потоки, в общепринятом понятии)

Talisman
11.03.2007, 10:36
PHP-снифер
Может применяться как и снифер для XSS атак, так и для анализа отправляемых заголовков.
<?
$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); // закрываем лог
?>

Talisman
17.03.2007, 14:34
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
Ну и: NMHTTP компонент, закладка FastNet. Там есть то что нужно - Функция post.

все это было найдено за 5 сек тут: http://www.delphiworld.narod.ru/dw.html архив дв качаем тут: http://forum.antichat.ru/showpost.php?p=108830&postcount=3
ЗЫ: Люди! используйте поиск и не бомбите мне аську))
не.. бомбите - тут больше материала будет тогда)

p-range
19.03.2007, 17:15
Хоть для себя ничего нового не узнал, но года три назад я бы танцевал с бубном, после прочтения этой статьи (как-раз этой темой занимался)
еще 3 года назад у меня не было компьютера и я не знал как его включать :D

ну а насчет обзора, конечно все это известно, но для новичков думаю будет познавательно почитать ;)