ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Release HttpProxyServer
  #1  
Старый 16.07.2007, 21:25
da_ff
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме:
413927

Репутация: 71
Отправить сообщение для da_ff с помощью ICQ
По умолчанию Release HttpProxyServer

Вот собсна решил наваять и выложить на общий суд
-язык с+api
-открывает 31337 порт
-логов не ведет
-весит мало ~10к (так я не понял откуда лишних 5к взялись а они лишние, точно)
-исходники прилагаются

HttpProxyServer

Последний раз редактировалось da_ff; 17.07.2007 в 21:58..
 

  #2  
Старый 18.07.2007, 11:49
da_ff
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме:
413927

Репутация: 71
Отправить сообщение для da_ff с помощью ICQ
По умолчанию

несколько человек добавили в репу с примерно следующим коментарием
Цитата:
Сообщение от kez  
на*** релизить ***ню всякую? давай ещё блокнот напишем?
причем тут блокнот это первый опыт в сетевом кодинге я просил посмотреть и высказать мнения, указать слабые места, показать как лучше.
 

  #3  
Старый 19.07.2007, 21:21
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

> причем тут блокнот это первый опыт в сетевом кодинге я просил посмотреть и высказать мнения, указать слабые места, показать как лучше.

НИКАК не лучше и НИКАК не хуже потому что это просто ПРОКСИ, сорцов которого полно в инете на каждом сайте.

> -язык с+api
поведуй, что это а язык такой c+api?

хотя знаешь, тупости я в сорцах немного нашел. видимо это свойство интересного языка c+api, НО
Код:
		if(wParam==IDSERVER)
		{
			char cStatServ[15];
			GetDlgItemText(hWnd,IDSERVER,cStatServ,15);
			if(!strcmp(cStatServ,"Start Server"))
вот это что?) (хотябы [16] элементов бы задал для правильности)
какой ещё GetDlgItemTextA() ? сделай флаг g_bStarted = TRUE/FALSE; и всё

далее
Код:
void CenterWindow(HWND hWnd)
{
	RECT rt;
	GetWindowRect(hWnd,&rt);
	MoveWindow(hWnd,
						 (GetSystemMetrics(SM_CXSCREEN)-rt.right)>>1,
						 (GetSystemMetrics(SM_CYSCREEN)-rt.bottom)>>1,
						 rt.right-rt.left,
						 rt.bottom-rt.top,
						 0);
}
абсолютно бессмысленно - можно просто указать что диалог будет по центру, что указывается в настройках ресурса "ДИАЛОГ"

и вот это тупо тоже
Код:
while(strncmp(cBuf+iResult-4,"\r\n\r\n",4));
если только схематично, а так нет смысла вызывать strncmp

РАЗМЕР
У тебя рантайм используется. Отключай
#pragma comment(linker,"/entry:EntryPoint")
void EntryPoint( void )
// точка входа

в WM_COMMAND:IDCANCEL
Код:
		WSACleanup();
		EndDialog(hWnd,0);
		ExitProcess(0);
неправильно, правильнее будет вызывать EndDialog()
а в обработчике WM_CLOSE делать ExitProcess() или PostQuitMessage( 0 );

ещё нужно вызывать TerminateThread( hThread, 0 );
иначе нахер ты сохраняешь хенлд созданого потока?
и ещё, поставил бы ты таймауты на поток, обслуживающий клиент.

Последний раз редактировалось KEZ; 19.07.2007 в 21:33..
 

  #4  
Старый 19.07.2007, 21:50
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Про размер я уже 100 раз писал! Больше писать не буду. Буду давать ссылку на свой пост на WASM.RU:

http://wasm.ru/forum/viewtopic.php?pid=188444#p188444
 

  #5  
Старый 19.07.2007, 22:43
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

Код:
	char *cHost=(char *)malloc(HOST_SIZE);
	int iHostBeg=strstr(cBuf,"Host: ")-cBuf+6;
	int iHostLen=strstr(cBuf+iHostBeg,"\r")-cBuf-iHostBeg;
	strncpy(cHost,cBuf+iHostBeg,iHostLen);
 

  #6  
Старый 20.07.2007, 04:22
t04
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
Провел на форуме:
246020

Репутация: 105
По умолчанию

блин, весь вечер убил на то чтобы перевести cpp>>delphi, людей подключил, в сё зря

исходник не работает на Delphi7 и как оказалось на срр тоже, все компилиться, врожде создаеться сервер, но при включении и использовании ничего не получаеться. переведенный исходник тут .

исправь код!
 

  #7  
Старый 20.07.2007, 09:06
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Цитата:
char *cHost=(char *)malloc(HOST_SIZE);
int iHostBeg=strstr(cBuf,"Host: ")-cBuf+6;
int iHostLen=strstr(cBuf+iHostBeg,"\r")-cBuf-iHostBeg;
strncpy(cHost,cBuf+iHostBeg,iHostLen);
ага, спрашивается зачем использовать strncpy, если указывается длинна переданой строки
с HOST_SIZE+1 начанается переполнение стека и возможность выполнить произвольный код...

причем сервер падает у меня при использовании Firefox'ом 2.0.0.4 при первом же запросе, и я даже не разбирался почему)
 

  #8  
Старый 20.07.2007, 11:53
NetMan
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме:
1089794

Репутация: 134
По умолчанию

Цитата:
Сообщение от KEZ  
ага, спрашивается зачем использовать strncpy, если указывается длинна переданой строки
с HOST_SIZE+1 начанается переполнение стека и возможность выполнить произвольный код...
Как защититься от переполнения?
 

  #9  
Старый 20.07.2007, 09:18
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Открыл код... сразу бросилась в глаза передача сокетов по ссылке.. вопрос - нафига?
Далее
if(!strcmp(cStatServ,"Start Server"))
это жесть. Ставить флаг быстрее будет
Код:
	struct sockaddr_in saddr;
	saddr.sin_family=AF_INET;
	saddr.sin_port=htons(port);
	saddr.sin_addr.s_addr=htonl(INADDR_ANY);
	if(bind(*s,(sockaddr*)&saddr,sizeof(struct sockaddr))==SOCKET_ERROR)
1) А кто очистит sin_zero ?
2) Нафига делать htonl(INADDR_ANY)? Тем более что inaddr_any=0
3) не sizeof(struct sockaddr), а sizeof(struct sockaddr_in).

Код:
	do
	{
		int i=recv(sSock,cTemp,iSize,0);
		if(i<1)
			return iResult;
		iResult+=i;
		cTemp+=i;
		iSize-=i;
	}
	while(strncmp(cBuf+iResult-4,"\r\n\r\n",4));
Переполнение буфера.

Код:
	struct sockaddr_in saddr;
	saddr.sin_family=AF_INET;
	saddr.sin_port=htons(HTTP_PORT);
	if((saddr.sin_addr.s_addr=inet_addr("cHost"))==INADDR_NONE)
	{
Ой это вообще без комментариев. Это не работает 100%. Что называется "полный П"
 

  #10  
Старый 20.07.2007, 11:46
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

Цитата:
Код:
	do
	{
		int i=recv(sSock,cTemp,iSize,0);
		if(i<1)
			return iResult;
		iResult+=i;
		cTemp+=i;
		iSize-=i;
	}
	while(strncmp(cBuf+iResult-4,"\r\n\r\n",4));
Переполнение буфера.
переполнение буфера всегда лечится, а вот неправильную логику подпрограммы исправлять обычно сложнее: кто сказал что браузер пошлет запрос оканчивающийся сразу на \r\n\r\n, тут и про пост-запросы сразу забываем с таким парсингом. наверное придется проверять пост-ли это, если да, тогда смотрим поле Content-Length и продолжаем читать после \r\n\r\n ровно такое количество данных.
и strstr тем же смотри у всего cBuf наличие \r\n\r\n, а не strncmp, так как данные могу поступать как угодно.
2KEZ ну и наверняка без наличия "Host: " будет идти чтение с не зарезервированного участка памяти, что к ошибке рантайм должно привести.
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ