Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi http request/get flood (https://www.delphipraxis.net/142946-http-request-get-flood.html)

painrestricter 6. Nov 2009 14:01


http request/get flood
 
servuß

ich will einen http flood coden, da ich an sowas am meisten spaß hab und mich die funktionsweise interessiert
(und wie man womöglich gegenmaßnahmen ergreifen kann)

THATS ONLY PRACTICE

ich hab mal was zum test geschrieben, funktioniert aber nicht

Delphi-Quellcode:
function CreateHTTPRequest(Site: String): String;
var
  Request: String;
begin
  Randomize;
   Request := 'GET ' + Site + ' HTTP/1.1' + #13#10;
  Request := Request + 'Host: ' + Site + #13#10;
  Request := Request + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' + #13#10;
  Request := Request + 'Accept-Language: en-us,en' + #13#10;
  Request := Request + 'User-Agent: ' + UserAgents[1 + Random(11)] + #13#10;
  Request := Request + 'Referer: ' + Referer[1 + Random(5)] + #13#10;
  Request := Request + 'Connection: close' + #13#10#13#10;
  Result := Request;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Seite := Edit1.Text;
ClientSocket1.Active := true;
Label1.Visible := true;
Label1.Caption := 'Flooding on port 80...';
while flood do
 begin
 ClientSocket1.Socket.Connect(Strtoint(target));
 if ClientSocket1.Socket.Connected then
   begin
   Clientsocket1.Socket.SendText(CreateHTTPRequest(Seite));
   Clientsocket1.Socket.Disconnect(Strtoint(Seite));
   Sleep(2);
   Application.ProcessMessages;
   end;
 end;
 Clientsocket1.Socket.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

Application.Terminate;
end;


end.
die http request funktion hat ein kollege von mir geschrieben, weil ich nicht wusste wie ich es anders lösen sollte

kann mir da wer helfen?
ich hab versucht mit tclientsocket eine verbindung aufzubauen, aber scheinbar funktioniert das nicht.
hab mir schon überlegt das mit raw sockets zu machen, aber die sind ja ab sp2 deaktiviert.
wie schauts denn mit winsock aus?

achja, eigentlich wollte ich bei
Delphi-Quellcode:
Clientsocket1.Socket.SendText(CreateHTTPRequest(Seite));
nicht sendtext, sondern sendstring senden, nur das hat nicht ganz geklappt.

Valle 6. Nov 2009 14:56

Re: http request/get flood
 
Weißt du überhaupt was dieser Code da macht? Dein Problem liegt in Zeile 30, da steht Delphi-Referenz durchsuchenSleep(2). Schau mal in der Hilfe nach was das bedeutet. Wenn du weißt was HTTP-Flood bedeuten soll, dann dürfte der Fehler darin ja klar sein.

PS.: Du testest das ja sicher nur an deinen eigenen Servern?

Liebe Grüße,
Valentin

painrestricter 6. Nov 2009 15:12

Re: http request/get flood
 
natürlich weiß ich was der code macht


ich versuch eben einen webserver auf port 80 unzählig viele requests zu schicken und soviele threads wie möglich aufzumachen

wie könnte ich das anders einfach machen?

ich habe etwas über idHTTP gelesen, damit wäre es doch theoretisch einfach möglich oder?

sirius 6. Nov 2009 15:13

Re: http request/get flood
 
Zitat:

Zitat von painrestricter
ich habe etwas über idHTTP gelesen, damit wäre es doch theoretisch einfach möglich oder?

Ja, oder über XMLhttpRequest....

Valle 6. Nov 2009 15:16

Re: http request/get flood
 
Hast du dir angeschaut was Sleep(2) macht? :zwinker:

Liebe Grüße,
Valentin

sirius 6. Nov 2009 15:19

Re: http request/get flood
 
Zitat:

ich hab versucht mit tclientsocket eine verbindung aufzubauen, aber scheinbar funktioniert das nicht.
Tolle Fehlermeldung :zwinker:

painrestricter 6. Nov 2009 15:24

Re: http request/get flood
 
jo schon ^^

naja was ich auch mache, mein prog mein "keine adresse angegeben"

bzw es kommt irgendein error, den ich gleich posten werden.

naja, ich denke nicht dass es an sleep liegt. wie soll denn sleep den programmablauf stören?

Valle 6. Nov 2009 19:48

Re: http request/get flood
 
Zitat:

Zitat von painrestricter
naja, ich denke nicht dass es an sleep liegt. wie soll denn sleep den programmablauf stören?

Du scheinst nicht wirklich Ahnung von der Materie zu haben, oder? Wie vielleicht unschwer zu erkennen ist bedeutet Flood auf Deutsch Flut. Frei übersetzt heißt es also den Webserver mit Anfragen zu "überfluten". Wichtig ist dabei dir Vorsilbe "über-"! Dem Webserver macht es nichts aus alle 2 Sekunden eine Anfrage zu beantworten. Du wartest (sleep / schlafen) ja nach jeder Anfrage 2 Sekunden. Wenn du etwas flooden willst, dann muss das mehr sein.

Man sagt, um einen sogenannten DoS (Denial of Service, also Serviceverweigerung - das ist einer von vielen Vorgängen einen Dienst lahmzulegen. Ein anderer wäre simples einhacken mit anschließendem Ausschalten) auszuführen, muss man selbst mehr Anbindung haben als der Server selbst. Da das nur selten, wenn nicht sogar nie der Fall ist, benutzt man meist DDoS. Dieser Distributed Denial of Service benötigt mehrere Rechner mit nabhängigen Leitungen um den Server zu flooden. Da du aber höchst unwahrscheinlich mehr Anbindung als der zu "DoS"-nde Server hast und auch wohl kaum mehrere Server mit genügend summierter Anbindung, kannst du die Sache eigentlich vergessen.

Primär müsstest du aber erstmal rausfinden warum disee Fehlermeldung kommt, die du uns so lange verschwiegen hast. Kleiner Tipp am Rande: Fehlermeldungen haben einen guten Berechtigungsgrund, nämlich der, dass es für den Programmierer einfacherer ist den Fehler zu finden. Wenn du uns so eine Meldung verschweigst, dann können wir nicht helfen. Was es jetzt aber genau mit der Meldung auf sich hat kann ich dir nicht sagen, dafür fehlen mit die Delphi-Kenntnisse.

Auf den ersteb Blick ist deine CreateHTTPRequest-Funktion aber sowieso inpraktikabel, da Hostname und URI nicht das gleiche ist. Du verwendest dafür aber die gleiche Variable. Meiner Meinung nach solltest du dich mehr mit dem Thema beschäftigen. Das heißt du brauchst wissen über Netzwerke (TCP/IP) und Aufbau des HTTP. So wird das nichts.

Liebe Grüße,
Valentin

painrestricter 7. Nov 2009 14:56

Re: http request/get flood
 
jo du hast recht, wirklich viel ahnung hab ich nicht, aber ich bemüh mich un der wille ist da :wink:

was ddos usw ist, weiß ich :-D

wenn du es unbedingt wissen willst, ich hab die createhttprequest funktion auch aus dem acidbot von poke, also ein irc basiert ddos bot. mich interessiert das einfach wie das funktioniert.
mein kollege hat es geschafft, mit seinem pc (ich glaube dsl 3000 anbindung) unseren vps server zu flooden. der server war danach down. Aus Neugier wollte ich sowas auch versuchen. Leider codet er in vb, und das kann ich nicht ^^

ich habe mich jetzt ein bisschen mit indy und den der idhttp komponente auseinandergesetzt, bin dabei es neu zu versuchen.

Ralf Kaiser 7. Nov 2009 15:18

Re: http request/get flood
 
Zitat:

Zitat von Valle
Du wartest (sleep / schlafen) ja nach jeder Anfrage 2 Sekunden. Wenn du etwas flooden willst, dann muss das mehr sein.

Nein. Er warten keine 2 Sekunden, sondern 2 Millisekunden! 2 Sekunden wären "Sleep(2000)".

Eigentlich wartet er aber länger, die Auflösung von "Sleep()" liegt irgendwo bei 50 Millisekunden, kleiner Zeiten kann man mit "Sleep()" nicht warten (Win ist kein Echtzeitbetriebssystem).

Eigentlich verstehe ich nicht, was das "Sleep()" da überhaupt soll...

Valle 7. Nov 2009 16:54

Re: http request/get flood
 
Zitat:

Zitat von Alfi001
Nein. Er warten keine 2 Sekunden, sondern 2 Millisekunden! 2 Sekunden wären "Sleep(2000)".

Oh. Ich bin davon ausgegangen dass es in Delphi genauso so wie in Python und PHP ist. Naja, nicht so wichtig, er muss trotzdem erstmal den Request berichtigen und mehr Requests senden. Da währen einige parallele Threads wohl sinnvoll.

Liebe Grüße,
Valentin

painrestricter 7. Nov 2009 17:17

Re: http request/get flood
 
wie meinst du parallele threads?

kannst du mir da kurz ein codebeispiel geben?

painrestricter 8. Nov 2009 14:59

Re: http request/get flood
 
so ich habs jetzt nochmal versucht, diesmal mit indy idhttp

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
Label1.Caption := 'Flooding on Port 80 ... .';
while flood = true do begin
 idhttp1.Get('http://' + seite);
 idhttp1.disconnect;
 end;
 Application.ProcessMessages;
end;
leider kommt wieder ein error :(

Fehler:

Delphi-Quellcode:
 Im Projekt Project2.exe ist eine Exception der Klasse EIDSocketError aufgetreten. Meldung: Socket-Fehler #10061. Verbindung abgelehnt. Prozess wurde angehalten

was hab ich denn jetzt wieder falsch gemacht?

Valle 8. Nov 2009 20:45

Re: http request/get flood
 
Hallo,

nein, ich kann dir kein Beispiel geben. Ich kann kein Delphi.

An deinem Code sind einige Dinge etwas falsch. Zum einen kannst du dir das Application.ProcessMessages an dieser Stelle sparen. Wahrscheinlich willst du, dass das Programm nicht einfriert. Dann musst du die Anweisung aber in die Schleife setzen. Ich gehe aber auch davon aus, dass das nicht viel helfen wird. An dieser Stelle sind Threads die richtige Lösung. Du findest sicher was wenn du danach suchst. ;-) Außerdem sollte man es vermeiden auf True zu prüfen. Ersetze die Prüfung im While-Kopf doch bitte durch "while flood do". Der auftretende Fehler lässt sich wohl dadurch erklären, dass deine Seite-Variable Unfug enthält. ;-)

Liebe Grüße,
Valentin

painrestricter 8. Nov 2009 23:06

Re: http request/get flood
 
dass mit processmessages hab ich mir auch schon überlegt, hatte es auch schon in der schleife, hat nicht viel gebracht

ich habe auf meiner form zudem einen stop button, der den flood stoppen soll. das onclick ereignis ist also ganz einfach, ich setze einfach die variable flood auf false. Ich hoffe da hab ich keinen denkfehler drin.

seite enthält den string aus meinem editfeld, ich denke da kann der fehler nicht liegen.

himitsu 8. Nov 2009 23:25

Re: http request/get flood
 
Zitat:

Zitat von painrestricter
das onclick ereignis ist also ganz einfach, ich setze einfach die variable flood auf false. Ich hoffe da hab ich keinen denkfehler drin.

ohne .ProcessMessages IN der Schleife wird dein Button nur nicht reagieren können :stupid:

Zitat:

Zitat von painrestricter
seite enthält den string aus meinem editfeld, ich denke da kann der fehler nicht liegen.

und was steht in dem Edit?

Abgesehn davon:

1) warum willst du unbedingt einen Server überlasten?

Blos so aus Spaß und Langer Weile mach selbst ich sowas nicht.
Und hier wissen Einige, daß ich schon so manchen Scheiß machen.

2) du glaubst doch nicht wirklich, daß ein Server, mit 'ner ordentlichen Netzanbindung, sich von denn paar popligen Anfragen irgendwie gestört fühlt,
welche du, egal mit wievielen Threads, über deine knuffige Internetleitung rausbekommst?

painrestricter 8. Nov 2009 23:59

Re: http request/get flood
 
im editfeld steht dann zb. http://www.meineseite.de

naja, nicht aus spaß oder langeweilie, mich interessieren einfach solche sachen.
Ist einfach nur zur Übung. Und es gibt schon massenhaft doS tools, also ist es eigentlich auch schon egal ^^

danke :)

himitsu 9. Nov 2009 07:58

Re: http request/get flood
 
Zitat:

Zitat von painrestricter
im editfeld steht dann zb. http://www.meineseite.de

Dann hast du den Code wirklich nicht ganz verstanden.
Rate mal, was in folgender Zeile passiert?
Delphi-Quellcode:
idhttp1.Get('http://' + seite);
Zitat:

Zitat von painrestricter
Und es gibt schon massenhaft doS tools, also ist es eigentlich auch schon egal ^^

Wovon viele aber nichtmal wirklich was bewirken.

painrestricter 9. Nov 2009 13:28

Re: http request/get flood
 
naja, passt doch, http:// steht schon im editfeld, dann wird nur noch die url ohne http:// manuell eingegeben

letztendlich steht dann http://www.meineseite.de drin

hab jetzt versucht mehrere threads zu erstellen, ganz einfach indem ich um den eigentlich flood noch eine for schleife mit "threads" als schleifenvariable, aufgenommen durch ein textfeld erstellt hab.

jetzt funktioniert eigentlich alles soweit. Ich will aber versuchen, das ganze auf icmp und udp basis auszuweiten.

danke für die hilfe :)

Valle 9. Nov 2009 15:39

Re: http request/get flood
 
:gruebel:

Also... Ich bin kein Windows-API Fan und im Prinzip auch keinen detaillierten Plan des IP-Stacks ... aaaber eins kann ich doch mit großer Sicherheit sagen: Das was du da "Threads" nennst hat mit dem eigentlich Thema rein gar nichts zutun. Und was bitte willst du denn mit ICMP und UDP? Einen Server tot-pingen? :mrgreen:

Mein Tipp: Befasse dich lieber genauer mit HTTP und Threads. Da haste mehr von. Wenn du dich so wie ich für Sicherheit in der Informatik interessierst, dann darfst du ruhig um einiges tiefer in die Materie einarbeiten. Ich kann auch eigener Erfahrung sagen, dass das alles viel Spaß machen kann und tw. auch sehr interessant ist. Also geb dich damit nicht zufrieden, schau dir die Sache noch genauer an (zB selbst machen statt Indy benutzen) und harke bei jeder Sache nochmal nach. Was du bisher geschaffen hast ist eher der äußerst grobe Teil der Materie. ;-)

Lieber Grüße,
Valentin

himitsu 9. Nov 2009 15:49

Re: http request/get flood
 
Zitat:

Zitat von Valle
Und was bitte willst du denn mit ICMP und UDP? Einen Server tot-pingen? :mrgreen:

Ping of Death :angel2:

Valle 9. Nov 2009 16:29

Re: http request/get flood
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Valle
Und was bitte willst du denn mit ICMP und UDP? Einen Server tot-pingen? :mrgreen:

Ping of Death :angel2:

Ist mir bekannt, aber ...

Zitat:

Die hierfür anfälligen Systeme wurden gepatcht und sind in der Regel heute nicht mehr im Einsatz. Betroffen waren neben Windows NT und Windows 95 auch viele Unix-Derivate wie zum Beispiel AIX, HP-UX, Linux und Solaris.
Liebe Grüße,
Valentin

painrestricter 9. Nov 2009 18:18

Re: http request/get flood
 
leute leute, ihr habt mich da wirklich falsch verstanden.

ICH GEBRAUCHE DAS PROGRAMM NICHT !!

ich will nur wissen wie das funktioniert! wie valle gesagt hat, mir macht das einfach spaß, ich werde mich auch tiefer damit beschäftigen. es ist mir scheissegal ob das teil irgendwas down bekommt, will ich auch gar nicht, dafür gibt es andere werkzeuge.

ich will einfach wissen wie das funktioniert und dem ganzen hintergehen und womoglich größere programme programmieren. dann brauch ich aber erstmal das allgemeine verständnis. werd mir demnächst ein buch über socketprogrammierung kaufen um da besser reinzukommen.

und was den ping of death angeht, ich denke mal keine nutzt mehr win95 ^^

Valle 9. Nov 2009 20:11

Re: http request/get flood
 
Hey,

jo, so habe ich dich auch verstanden.
Deswegen habe ich ja gesagt es bringt dir mehr, noch viel weiter ins Detail zu gehen! :-)

Liebe Grüße,
Valentin


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz