Hola,
quiero presentarles el siguiente escenario:
En una computadora hay un servidor y en otra un cliente. Con el cliente queria hackear la contrasena del servidor. Si el cliente sabe la contrasena escribe en el servidor /login <contrasena>.
Codigo del Servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Servidor
{
class Program
{
static void Main(string[] args)
{
Servidor_Chat chat
= new Servidor_Chat
(); }
}
}
Clase Servidor_Chat del servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Net.Sockets;
using System.IO;
using System.Net;
namespace Servidor
{
class Servidor_Chat
{
/*
TcpListener--------> Espera la conexion del Cliente.
TcpClient----------> Proporciona la Conexion entre el Servidor y el Cliente.
NetworkStream------> Se encarga de enviar mensajes atravez de los sockets.
*/
private TcpListener server;
private TcpClient client
= new TcpClient
(); private IPEndPoint ipendpoint
= new IPEndPoint
(IPAddress
.Any,
8000); private List
<Connection
> list
= new List
<Connection
>(); private string contrasena;
Connection con;
private struct Connection
{
public NetworkStream stream;
public StreamWriter streamw;
public StreamReader streamr;
public string nick;
}
public Servidor_Chat()
{
Inicio();
}
public void Inicio()
{
foreach (string line in File.ReadLines(@"Password.txt", Encoding.UTF8))
{
contrasena = line.Substring(12);
}
Console.WriteLine("Servidor OK!");
server
= new TcpListener
(ipendpoint
); server.Start();
while (true)
{
client = server.AcceptTcpClient();
con.stream = client.GetStream();
con
.streamr = new StreamReader
(con
.stream); con
.streamw = new StreamWriter
(con
.stream);
con.nick = con.streamr.ReadLine();
list.Add(con);
Console.WriteLine(con.nick + " se a conectado.");
Thread t
= new Thread
(Escuchar_conexion
);
t.Start();
}
}
void Escuchar_conexion()
{
Connection hcon = con;
do
{
try
{
string tmp = hcon.streamr.ReadLine();
Console.WriteLine(hcon.nick + ": " + tmp);
foreach (Connection c in list)
{
try
{
if(tmp == "/login " + contrasena)
{
c.streamw.WriteLine(hcon.nick + ", ahora eres administrador!");
c.streamw.Flush();
}
else
{
c.streamw.WriteLine(hcon.nick + ": " + tmp);
c.streamw.Flush();
}
}
catch
{
}
}
}
catch
{
list.Remove(hcon);
Console.WriteLine(con.nick + " se a desconectado.");
break;
}
} while (true);
}
}
}
Bueno, si es necesario poner el codigo del cliente, avisenme.
No se si lo puedo llamar inyeccion de codigo pero lo hare hasta que ustedes me digan que es incorrecto llamarlo asi a esto. Bueno trate de hacer una inyeccion de codigo poniendo en el texto de enviar del cliente: /login "" + contrasena + "" y despues, al ver que no funciono, envie: /login " + contrasena ".
Yo crei que el servidor, al recibir un texto, tiene lo recibido entre comillas. Por eso trate de cerrar las comillas (") luego de poner variable que contiene la contrasena (+ contrasena +) y luego de abrir otra comilla mas para cerrar la supuesta comilla final.
Si ustedes no me entienden debido a que me expreso mal quiero saber solo una cosa entonces.
Puedo hackear la contrasena desde la computadora cliente o tengo que hackear la computadora en donde esta el servidor para obtener la contrasena?
Esto lo estaba testeando en mi computadora.
Gracias y saludos