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ß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
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ß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