elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 213
91  Seguridad Informática / Seguridad / Re: Dudas servicios exteriorizados y correos en: 19 Mayo 2020, 08:41 am
El tema es que la gran mayoría de empresas lo que hacen es usar gmail (u otro webmail) bajo su propio dominio, cada vez menos empresas usan sus propios servidores de correo y tercerizan todo. Y aunque consigas la IP, seguramente sea dinamica, asi que puede cambiar en cualquier momento.

En cuanto al tema del IP y los mails, Gmail no envía la IP del remitente, envia la del servidor de google, en cambio Outlook o Yahoo si envian la IP original.

92  Programación / Desarrollo Web / [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 15 Mayo 2020, 03:56 am
Hola, queria compartirles este Ejemplo basico de como implementar MySQL en Node. Usando Promesas y async/await para dominar la asincronia sin bloquear el Event Loop.

Archivo mysql.js contiene la conexión a MySQL.
Código
  1. const mysql = require("mysql");
  2.  
  3. const mysqlConnection = mysql.createConnection({
  4.  host: "localhost",
  5.  port: 3306,
  6.  user: "root",
  7.  password: "",
  8.  database: "",
  9. });
  10.  
  11. mysqlConnection.connect((err) => {
  12.  if (err) {
  13.    console.error("[DB] No se pudo conectar con MYSQL", err);
  14.  } else {
  15.    console.log("[DB] Conectado con MYSQL", mysqlConnection.threadId);
  16.  }
  17. });
  18.  
  19. module.exports = mysqlConnection;
  20.  

Archivo con la clase principal. Implementa las 5 funciones básicas de CRUD+L = Create/Crear, Read/Leer, Update/Modificar, Delete/Borrar, List/Listar

Código
  1. const MySQL = require("./mysql");
  2.  
  3. function list(table) {
  4.  return new Promise(async (resolve, reject) => {
  5.    const sql = `SELECT * FROM ${table}`;
  6.  
  7.    await MySQL.query(sql, (err, results) => {
  8.      if (err) {
  9.        console.error("[DB]", err);
  10.        return reject({ message: err, code: 401 });
  11.      }
  12.      return resolve(results);
  13.    });
  14.  });
  15. }
  16.  
  17. function get(table, id) {
  18.  return new Promise(async (resolve, reject) => {
  19.    const sql = `SELECT * FROM ${table} WHERE id=${id}`;
  20.  
  21.    await MySQL.query(sql, (err, results) => {
  22.      if (err) {
  23.        console.error("[DB]", err);
  24.        return reject({ message: err, code: 401 });
  25.      }
  26.      return resolve(results);
  27.    });
  28.  });
  29. }
  30.  
  31. function insert(table, data) {
  32.  return new Promise(async (resolve, reject) => {
  33.    try {
  34.      const fields = Object.keys(data);
  35.      const values = Object.values(data);
  36.  
  37.      if (fields.length === 0) {
  38.        return reject({ message: "Faltan datos", code: 400 });
  39.      }
  40.  
  41.      const sql = `INSERT INTO ${table} (${fields}) VALUES (${values.map(
  42.        (h) => `'${h}'`
  43.      )})`;
  44.  
  45.      await MySQL.query(sql, async (err, results) => {
  46.        if (err) return reject({ message: err.message, code: 400 });
  47.  
  48.        const insertedData = await get(table, results.insertId);
  49.  
  50.        return resolve(insertedData);
  51.      });
  52.    } catch (error) {
  53.      return reject(error);
  54.    }
  55.  });
  56. }
  57.  
  58. function update(table, id, data) {
  59.  return new Promise(async (resolve, reject) => {
  60.    try {
  61.      const fields = Object.keys(data);
  62.      const values = Object.values(data);
  63.  
  64.      if (fields.length === 0) {
  65.        return reject({ message: "Faltan datos", code: 400 });
  66.      }
  67.  
  68.      const sql = `UPDATE ${table} SET ? WHERE id=${id}`;
  69.  
  70.      const beforeUpdate = await get(table, id);
  71.  
  72.      await MySQL.query(sql, data, async (err, results) => {
  73.        if (err) return reject({ message: err.message, code: 400 });
  74.  
  75.        const updateData = await get(table, id);
  76.  
  77.        return resolve({ ...results, beforeUpdate, updateData });
  78.      });
  79.    } catch (error) {
  80.      return reject(error);
  81.    }
  82.  });
  83. }
  84.  
  85. function remove(table, id) {
  86.  return new Promise(async (resolve, reject) => {
  87.    try {
  88.      const beforeUpdate = await get(table, id);
  89.  
  90.      if (beforeUpdate.length === 0)
  91.        return reject({ message: `El elemento ${id} no existe`, code: 403 });
  92.  
  93.      const sql = `DELETE FROM ${table} WHERE id=${id} LIMIT 1`;
  94.  
  95.      await MySQL.query(sql, async (err, results) => {
  96.        if (err) return reject({ message: err.message, code: 400 });
  97.  
  98.        return resolve({ ...results, beforeUpdate });
  99.      });
  100.    } catch (error) {
  101.      return reject(error);
  102.    }
  103.  });
  104. }
  105.  
  106. module.exports = {
  107.  list,
  108.  get,
  109.  insert,
  110.  update,
  111.  remove,
  112. };
  113.  
  114.  

Esta clase no tiene ningún tipo de validación, eso se debería hacer en otra capa, como por ejemplo en el controlador con @hapi/joi.

Para usarse simplemente debe importarse este modulo desde otro e invocar a la función CRUDL, por ejemplo

Ejemplo de Uso
Código
  1. const db = require("./db.js"); // suponiendo que el archivo anterior se llame "db.js y
  2.                                           // ademas este ubicado en el mismo directorio que el presente codigo.
  3.  
  4. // Usar como funcion asincrona que debuelve un resultado o un error
  5. // Operacion CRUDL: Listar la tabla 'usuarios' completa
  6. // SIEMPRE dentro de una funcion async
  7.  
  8. async function getUsers(){
  9.    const myUsers = await db.get('usuarios')
  10.    return await db.get('usuarios')
  11.    // return await db.get('usuarios')
  12. }
  13.  
  14. console.log(getUsers())
  15.  
  16. // O usar como funciones que devuelven promesas, y gestionarla con then/cath:
  17. // Operacion CRUDL: (D) Borrar el registro de la tabla 'usuarios' cuyo id sea igual a '666'
  18.  
  19. db.remove('usuarios', 666)//Borrar usuario con id 666
  20. .then(users=>{
  21.    // Se borro el usuario, hacer algo
  22.    console.log(`Se borro el user 666`)
  23. })
  24. .catch(error=>{
  25.   console.log(error)
  26. })
  27.  

Por ultimo, como tambien hago frontend, una cosa muy util es poder deshacer cualquier accion con un solo click, por cuestiones de UX/UI es una forma muy poderosa de fidelizar al usuario.

Por eso en las consultas 'remove' y 'update' se devuelve un objeto beforeUpdate y updateData

Código
  1. "beforeUpdate": [
  2.            {
  3.                "id": 14,
  4.                "nombre": "Departamento de Coordinacion y Gestion Cooperativa",
  5.                "responsable": ""
  6.            }
  7.        ]
  8.  

Eso es muy util para revertir la ejecucion de la queri con un simple boton o 'call to action' como tiene gmail.


93  Foros Generales / Dudas Generales / Re: Es seguro la app para almacenar contraseñas en el móvil y la extensión en: 10 Mayo 2020, 19:34 pm
Desde que la mismísima NSA fue hackeada por Shadow Brokers ningún sistema en el mundo esta a salvo  >:D

Pero de ahi a que te hackeen tu cuenta de fb o gmail....yo personalmente guardo mis contraseñas de redes y foros en el mismo chrome, sin extension y nunca tuve problemas, eso si, jamas en la vida guardaría info de mi home banking o de mi tarjeta de crédito....
94  Programación / PHP / Re: Subir Archivos con php Via SFTP en: 10 Mayo 2020, 18:38 pm
En Windows yo uso WinSCP.

Si esta en linux con gnome podes conectarte directamente a un servidor SFTP desde el mismo nautilus. O sino podes instalar gFTP o Filezilla que tienen soporte para SFTP.
95  Programación / PHP / Re: Como puedo instalar una extensión Manualmente en: 10 Mayo 2020, 18:35 pm
Hace años deje de usar PHP, me quede en la versión 5, nunca llegue a usar la 7....

Pero en mi experiencia, si tenes un sistema GNU/Linux es mejor instalar las librerias mediante el gestor de paquetes, sea apt si es una distro basada en Debian/Ubuntu o Yum si es una distro basada en RedHat (CentOS, Fedora).


Como instalar la extension SSH2 de PHP


Citar
En el siguiente ejemplo, remplace "X.Y" con tu version de PHP (por ejemplo, "5.4" o "7.1"). Para instalar una extensión PECL para multiples versiones de PHP, repita el proceso para cada version de PHP.

La extensión SSH2 proporciona funciones para acceder a máquinas remotas utilizando los protocolos seguros SSH y SFTP.

Esta extensión NO esta soportada por PHP 7.3

Instalar la extension SSH2 para PHP 7.0, 7.1, o 7.2
Nota: La extension SSH2 para PHP 7 esta en estado Alpha (en fase de pruebas, no recomendable para producción) .

Para instalar la extension en PHP 7.0, 7.1, o 7.2, ingrese a su servidor y ejecute los siguientes comandos (con sudo o como root):

Código:
sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install libssh2-1-dev
sudo pecl7.X-sp install ssh2-alpha

Una vez instalado, cree un archivo de configuración para la extensión y reinicie PHP.

Código:
sudo bash -c "echo extension=ssh2.so > /etc/php7.X-sp/conf.d/ssh2.ini"
sudo service php7.X-fpm-sp restart

Instalar SSH2 para PHP 5

Para instalar la extension en PHP 5.4, 5.5, o 5.6, ingrese a su servidor y ejecute los siguientes comandos (con sudo o como root):

Código:
sudo apt-get install gcc make autoconf libc-dev pkg-config
sudo apt-get install libssh2-1-dev
sudo pecl5.X-sp install ssh2

Una vez instalado, cree un archivo de configuración para la extensión y reinicie PHP.

Código:
sudo bash -c "echo extension=ssh2.so > /etc/php5.X-sp/conf.d/ssh2.ini"
sudo service php5.X-fpm-sp restart
Verifying the Installation

Puede verificar la instalacion de SSH2 con el siguiente comando:

Código:
phpX.Y-sp -i | grep ssh2

Si todo se instalo correctamente, deberia ver el siguiente mensaje en su terminal:

Código:
/etc/phpX.Y-sp/conf.d/ssh2.ini,
Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php,
    file, glob, data, http, ftp, zip, phar, ssh2.shell, ssh2.exec,
    ssh2.tunnel, ssh2.scp, ssh2.sftp
ssh2
SSH2 support => enabled
libssh2 version => 1.4.3
banner => SSH-2.0-libssh2_1.4.3

Fuente: https://serverpilot.io/docs/how-to-install-the-php-ssh2-extension/
96  Foros Generales / Dudas Generales / Re: Rubber ducky en: 4 Mayo 2020, 01:04 am
Me temo que no. Tenes bien en claro lo que es un Rubber ducky?  :silbar:

Al tratarse de un dispositivo que ejecutara su propio código malicioso si o si tiene que tener un procesador o microcontrolador como el ATMEGA32U4.

Tambien podes montarlo con un Arduino ProMicro que es mucho mas barato que un RB Zero. Si buscas en ML Argentina andan entre $600 y $800

Te dejo un video que te explica todo y hasta te da los materiales y codigos necesarios para montarlo.



PD: Solo te pido que no seas lammer y lo uses con fines didácticos....
97  Seguridad Informática / Nivel Web / [0day] Descubren XSS en Gmail con ayuda de Chrome. en: 3 Mayo 2020, 19:17 pm
Buen dia gente, esta revisando mi twitter y me tope con esto:

https://opnsec.com/2020/05/dom-xss-in-gmail-with-a-little-help-from-chrome/
98  Sistemas Operativos / GNU/Linux / Re: No me deja instalar ubuntu en: 3 Mayo 2020, 05:05 am
Si tenes Windows 10 podrias usar el Subsistema Linux (WSL), que te permite instalar un Linux (Ubuntu/Kali/Debian/SuSe) dentro del propio Windows 10. No tendras la interfaz gráfica propia de linux, solo podrás acceder a el a través de la consola, pero es mucho mejor que una máquina virtual.

De todad formas me juego que es por el Secure Boot de UEFI, seria muy util que al menos nos pongas una captura del error....
99  Programación / Desarrollo Web / Re: No cambia el valor de mi variable JS en: 3 Mayo 2020, 04:41 am
Pueden ser muchas cosas, pero creo que es porque no estas manejando bien la asincronía de JS, y la linea 5 se ejecuta inmediatamente despues de la linea 4, asi que no le da tiempo a realizarse la llamada ajax y asignarle el valor correcto a nl. Entonces cuando se resuelve la peticion y le asignas el valor a dicha variable ya es tarde, para la funcion Cniveles sigue valiendo 0 o null. prueba con esto:


Código
  1.  
  2. // aqui la eh dejado así null o vacia
  3. var nl = 0;
  4. $("#st").click(async function (e) { //defino la funcion como asincrona
  5.  await obNiveles(id);  //fuerzo al script a esperar que se temrine de ejecutar la funcion y su llamada ajax
  6.  Cniveles();
  7. });
  8.  
  9.  

Ademas tenes un typo (error de tipeo). Pegue tu codigo en mi editor y me sale que el bracket de la linea 29 sobra. Revisa bien que todos tus bloques esten correctamente cerrados con sus {}
100  Foros Generales / Dudas Generales / Re: Ayuda con la configuracion de mi gtx 1050 laptop en: 3 Mayo 2020, 04:26 am
Tenes el overlay de discord activado? si es asi siempre se ejecutara en la GTX. Sino por defecto windows 10 adminsitra muy bien eso, pero como te dice el comopañero EdePC tenes que tener correctamente instalaldos los drivers de nVidia.

Aun así las notebooks gamers tienen una autonomía pesima, no estan pensadas para eso. Yo tengo una Lenovo Y520 con una I5 7300HQ y una GTX 1050 y a bateria no dura ni 15 minutos, es el gran problema de estas maquinas: potencia vs autonomia.
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 213
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines