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 Temas
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19
41  Seguridad Informática / Hacking / Tiene nombre este ataque/técnica? Como lo detecta Chrome? en: 10 Marzo 2020, 18:45 pm
Estaba en una red y al conectarme salia un portal cautivo con un código como:
Código
  1. <form method="post" action="<?= "$serverAddress"; ?>">
  2. <input type="text" placeholder="user">
  3. <input type="password" placeholder="password">
  4. <input type="submit" value="login">
  5. </form>

Todos los ordenadores de la red tienen el navegador abierto en esa página sin recargar.

Pongamos que la ip a la que apunta el form es 192.168.58.1:5432

Entonces el router se resetea y el DHCP reasigna las ips locales. Yo en mi PC en la misma red paso a tener la dirección 192.168.58.1 y decido abrir un un servidor:
netcat -l -k -v 192.168.58.1 5432

Todos esos ordenadores siguen teniendo la página sin recargar apuntando a esa dirección local.

Cuando los usuarios envian el form, yo me esperaba recibir todas las cookies, userAgents, usuarios y contraseñas de todas las personas que enviasen el form. Pero sorpresa, estos usuarios al darle a enviar el navegador detecta que no es el mismo servidor por lo que en vez de enviarme la petición y esperar una respuesta el Chrome abre about:blank#blocked

Puede forzar el reinicio y posterior reasignamiento de ips del DHCP para obtener la ip local que quiero. Es un ataque que se me ocurrió, no sé si tiene un nombre para poder profundizar en él?

Cómo Chrome detecta que este comportamiento es indeseado? No me lo esperaba en absoluto.
42  Foros Generales / Dudas Generales / ncat --lua-exec qué módulos trae? en: 28 Febrero 2020, 22:37 pm
Qué módulos tiene el intérprete integrado en Ncat de Lua?

Por lo que veo se puede utilizar Lua desde Ncat sin tener Lua instalado. Es decir, tiene un intérprete de Lua integrado. Lo he estado probando y buscando info y lo único que saco en claro es que tiene algunos módulos integrados. Me gustaría tener un listado de todos los módulos que tiene este intérprete.
43  Foros Generales / Foro Libre / [Aporte]Cross Origen HTML Sintax Highlighter en: 28 Febrero 2020, 00:25 am
Hice una aplicación web para obtener las cabeceras http y el código fuente desde el navegador a partir de una url. También hice un coloreador de código HTML y un parser del código para poder interpretarlo.

Blog - Versión Live

Github - Código Fuente

Podeis usarlo en local directamente o con vuestro propio servidor simplemente modificando una variable que tiene tiene la url de http://cors-anywhere... Por la ip local de vuestro server en el siguiente formato. http://127.0.0.1:8080/

El código es un poco caos porque ando aún en desarrollo. El html highlighter es prácticamente una función pura. Solo necesita un poco de CSS para aplicar a los span que añado.

*Si no te funcionan los botones, usa un navegador (con soporte ES6/EcmaScript2015) más actualizado. Pronto lo haré compatible con ES5.
44  Programación / Desarrollo Web / [Aporte] Coloreador de palabras y código. (Para DOM XSS) en: 26 Febrero 2020, 03:40 am
Os comparto un script que hice para resaltar palabras que suelen ser comunes en las inyecciones DOM XSS.

Qué hace?
-Obtiene el código fuente de la página web en la que estás, y te lo muestra con las palabras más interesantes coloreadas. Util para centrar la vista en lo que quieres y entender de un vistazo como entran los datos en la aplicación.

Preview del resultado de aplicar el scriprt a una página:


Como usar?
-Copiar el código, pegarlo en la barra del navegador y darle a enter.
*Si tu navegador elimina la palabra javascript de la barra de direcciones automáticamente al pegar el código, puedes copiar todo el script menos la primera letra j. Escribes la j en la barra del naevegador y pegas el código.

Copiar De Aquí

Otros usos?
- Puedes cambiar las palabras por las que tu quieras y darle otro uso. O utilizar prompt() dentro de un bucle para obtener las palabras de forma interactiva.

Comentario del código:
Código
  1. /*Funcion que remplaza varios caracteres inseguros del string que se le pase como parámetro en la llamada por su entidad homóloga. */
  2. function htmlEntities(str) {
  3.  r='replace'; /* Acortador para el método replace */
  4.  z=document; /* Acortador para document */
  5.  x=str[r] /* Utilizo la sintaxis del operador array en lugar de la de punto para acortar el código. Ej, de window.alert("hola") a window["alert"]("hola") o si utilizas variables a w[a](h); */
  6. (/ /g,"&#38;#32;")[r]
  7. (/!/g,"&#38;#33;")[r]
  8. (/"/g,"&#38;#34;")[r]
  9. (/%/g,"&#38;#37;")[r] /* Son múltiples replaces sobre el msimo string utilizando encadenamiento de métodos. El replace toma 2 parámetros, el string a remplazar y el string que ocupará su lugar. Utilizo RegExp Expresiones regulares /caracter/ para buscar un caracter y //g para buscar todas las ocurrencias de ese caracter en el string que se le pasó por parámetro a la función. El segundo parámetro es la entidad HTML correspondiente a dicho caracter. La entidad nos permite ver el caracter sin que se interprete. */
  10. (/'/g,"&#38;#39;")[r]
  11. (/\(/g,"&#38;#40;")[r]
  12. (/\)/g,"&#38;#41;")[r]
  13. (/</g,"&#38;#60;")[r]
  14. (/>/g,"&#38;#62;")[r]
  15. (/`/g,"&#38;#96;")[r]
  16. (/a/g,"&#38;#97;")[r]
  17. (/A/g,"&#38;#65;")[r]
  18. (/e/g,"&#38;#101;")[r]
  19. (/E/g,"&#38;#69;")[r]
  20. (/i/g,"&#38;#105;")[r]
  21. (/I/g,"&#38;#73;")[r]
  22. (/o/g,"&#38;#111;")[r]
  23. (/O/g,"&#38;#79;")[r]
  24. (/u/g,"&#38;#117;")[r]
  25. (/U/g,"&#38;#85;")[r]
  26. (/{/g,"&#38;#123;")[r]
  27. (/}/g,"&#38;#125;")[r]
  28. (/‘/g,"&#38;#8216;")[r]
  29. (/’/g,"&#38;#8217")[r]
  30. (/‚/g,"&#38;#8218;")[r]
  31. (/“/g,"&#38;#8220;")[r]
  32. (/”/g,"&#38;#8221;")[r]
  33. (/„/g,"&#38;#8222;")[r]
  34. (/&#8242;/g,"&#38;#8242;")[r]
  35. (/&#8243;/g,"&#38;#8244;")[r]
  36. (/‹/g,"&#38;#8249;")[r]
  37. (/›/g,"&#38;#8250;")[r]
  38. (/s/g,"&#38;#115;")[r]
  39. (/S/g,"&#38;#83;"); /* Se puede acortar el código con el constructor de Reg Exp, declarando todas las palabras y regexp del código como un único string separadas por un espacio y hacer split de string a array. Con que el código no laggease al pegar en la url me valia. */
  40.  return x; /* Retorna el string convertido a entidades */
  41. }
  42.  
  43. var temp;
  44.  
  45. /* Para rodear las palabras y aplicarles css para colorearlas */
  46. var c="<span class='xssRed'>";
  47. var d="</span>";
  48.  
  49.  
  50. /* Todas las palabras que encontré que de forma frecuente puede que sean relevantes en inyecciones DOM XSS */
  51. var b=[
  52. "write","writeln","domain","innerHTML",
  53. "outerHTML","insertAdjacentHTML","onevent","baseURI",
  54. "documentURI","location","referrer","URL",
  55. "URLUnencoded","href","search","hash","pathname","self","name","eval",
  56. "javascript","setInterval","setTimeout","import url",
  57. "add","after","append","animate",
  58. "insertAfter","insertBefore","before","prepend",
  59. "replaceAll","replaceWith","wrap","wrapInner",
  60. "wrapAll","has","constructor","init",
  61. "index","parseHTML"];
  62.  
  63. /* Obtiene el fuente de la página actual */
  64. var a=document.querySelector("html").outerHTML;
  65.  
  66. /* Itera una vez por palabra */
  67. for(var i=0; i<b.length; ++i) {
  68.  
  69. /* Crea una expresión regular Global caseInsensitive de cada palabra. Es decir, busca todas las ocurrencias de la palabra que toque indistintamente de si tiene mayusculas o minuúsculas. */
  70.  temp=new RegExp(b[i],"gi");
  71.  
  72. /* Remplaza las palabras que encuentre en el código por cadenas temporales reconocibles que no vayan a ser codificadas a entidades. En medio de estas cadenas pon la palabra original.*/
  73.  a=a.replace(temp,"nblblbl"+b[i]+"nhlhlhl");
  74. }
  75.  
  76. a=htmlEntities(a); /* Transforma el fuente a entidades para poder leerlo sin que se interprete. */
  77. a=a.replace(/nblblbl/g,"<span class='xssRed'>"); /* Modifica las cadenas temporales reconocibles por los elementos span. */
  78. a=a.replace(/nhlhlhl/g, "</span>");
  79. document.write(' /* Escribe un código html sin entidades en el que meter dentro el código con entidades. Así se interpretan los <span> y el nuevo código para colorear su innerHTML. */
  80. <!DOCTYPE html>
  81. <html>
  82.  <head>
  83.    <meta charset="utf-8">
  84.  </head>
  85.  <body>
  86.    <section id="code">'+a+'</section>
  87.    <style>
  88. #code {
  89.  background-color: #fefefe;
  90. }
  91.  
  92. .xssRed {
  93.  color:red;
  94. }
  95.    </style>
  96.  </body>
  97. </html>');
45  Foros Generales / Foro Libre / Autosabotaje y autoconcepto. en: 23 Febrero 2020, 03:43 am
Últimamente reflexiono más asiduamente sobre mi mente, limitaciones que me han puesto los años, objetivos, tiempo perdido...

En concreto hoy ha sido algo pequeño lo que ha disparado mis instintos cazadores de conocimiento. Estaba sin sueño, en la cama, leyendo con el móvil y pensé, no tengo sueño, ni voy a dormirme. De repente cerré los ojos y me sentí tan cómodo, a punto de dormirme. Entonces pensé, no quiero dormirme, voy a pensar que mañana tengo que madrugar. El sueño desapareció por completo. Esto último tiene sentido en mi mente. Cuanto más tengo que madrugar, más me cuesta dormirme, me quedo hasta por ejemplo las 5 de la mañana despierto y pienso, para el tiempo que me queda, no me vale la pena dormirme porque me va a sentar mal despertarme durmiendo solo 2 horas. En ese momento es cuando paso de tener un 1% de sueño a un 99%. Reflexionando, creo que es por no afrontar ciertas situaciones que están arraigadas mentalemente. Un conglomerado de tópicos y sensaciones irrealistas que poco a poco se van llendo, pero que siguen ahí.

Desde hace un tiempo, tengo una extraña sensación de que me gusta complicarme la vida subconscientemente. O quizás solo es el subconsciente al que le gusta complicarme la vida. Es una lucha constante día a día con flashbacks aleatorios producidos por mi subsconsciente trayéndome pensamientos negativos a la parte consciente, y la parte consciente respondiendo con un, vete a la m...No pienses eso!

En mi habitan 2 personas totalmente opuestas. Una despreocupada, inmadura, amable, con la mente en las nubes, débil* psicológicamente (de una forma extraña, porque cosas que a los demás aterran a mi me trae sin cuidado y cosas superfluas me reconcomen como por ejemplo lo del sueño) pero extremadamente reflexiva y fría y por ende con control absoluto sobre su entorno y el lugar que ocupo en él, tanto para los demás como para mi mismo.

Por otro lado, a veces soy una persona totalmente distinta. Una persona a la que si un León se le tirase encima respondería con un cabezazo, una persona tosca, pasional, extremadamente centrada, que no se ríe con nada y que en cualquier momento te interpela con rabia "la vida no es una broma, de qué te ríes?". La típica persona que ante una situación como sería la de una manifestación de gente desnuda delante de la ventana del trabajo no se levanta a mirar y comentarlo, si no que sigue a lo suyo.

Algo que me ronda la cabeza desde hace tiempo es, podré controlar realmente quien soy y cómo? Desde luego que si me viese en la situación de peligro, no me gustaría estar temblando incapaz de dar un paso.

Intento analizarme a mi mismo, mi mente, la mente de los demás...
Tras algún tiempo de reflexión saco en claro que esta persona sin miedos y exageradamente eficaz que ansio habita en mi y sale cuando no duermo bien. Es como si tuviese una parte del cerebro que se ocupa de tener activa mi personalidad divertida y despreocupada como mecanismo de defensa o autosabotaje, y cuando no duermo bien o no tengo ganas de activarla, o algún proceso químico relacionado con mi cerebro no funciona o quizás funciona correctamente.

Igual dormimos de más o nuestros habitos de sueño son a los que estamos habituados sociológicamente, pero nos limitan como ser?
Tengo la creencia de que dormir nos mejora nuestra parte social, y con ello nos impone todo lo bueno y todo lo malo de nosotros como sociedad dentro de la misma y el rol que ocupamos en ella.

Busco la forma de romper mis limitaciones autoimpuestas y me produce inquietud la sensación de que me acerco a esto mismo. La sensación de que mi vida va a cambiar.

Leí recientemente en un libro al que le doy crédito que la personalidad no acaba de formarse completamente hasta llegados los 30. Me pareció muy curioso debido a que los artículos técnicos suelen dar mayor relevancia a la primera decada de vida cuando estudian la formación de la personalidad. Lo cual no implica que no se pueda extender más.

Teneis experiencias similares? Igual arrojan algo de luz en el asunto.

Qué curiosa es la mente, me obnubila.
46  Programación / Desarrollo Web / Obtener url de una respuesta? XHR en: 22 Febrero 2020, 23:02 pm
Hice un programa para enviar peticiones en base a un diccionario y obtener las respuestas.

Hago por ejemplo 950 peticiones en 1 segundo:
google.com/
google.com/admin
google.com/about
google.com/login
....

Recibo las respuestas, pero no sé a que petición corresponde cada petición.
Con xhr.responseUrl me retorna siempre undefined.
Mirando las cabeceras de respuesta no saco ninguna útil, solo el dominio tls sin directorio.
Si analizo la respuesta, no en todas queda claro de que ruta proceden.

Mi objetivo es listar todos los directorios con respuesta 200, pero no lo consigo.


Código
  1. function Leer() {
  2.  
  3. /* for (var i =0; i < dominios.length; ++i)
  4.     alert */
  5. req.url = dominios[0].value;
  6. alert("Url a buscar\n" + req.url);
  7. HacerPeticiones();
  8. /*  for (i =0; i < diccionarios.length; ++i)
  9.     alert (diccionarios[i].value);
  10. */
  11. }
  12.  
  13. function ObtenerDiccionario() {
  14.  
  15. req.url = "https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/general/common.txt";
  16. alert("Obteniendo diccionario de\n" + req.url);
  17. HacerPeticiones(1);
  18.  
  19. }
  20.  
  21.  
  22. function HacerPeticiones(retornar) {
  23.  req.method = "GET";
  24.  req.statusCode = 200;
  25.  request(req);
  26.  
  27.  function request(obj) {
  28.    var url = "https://cors-anywhere.herokuapp.com/" + obj.url;
  29.    var xhr = new XMLHttpRequest();
  30.    xhr.open(obj.method, url, true);
  31.    xhr.onreadystatechange = function() {
  32. alert(xhr.responseUrl);
  33.      if (xhr.readyState == 4) {
  34.        alert(xhr.status);
  35.        if (xhr.status == obj.statusCode) {
  36.          if (retornar) {
  37.            dictUrls = xhr.responseText;
  38.            alert("Obtenidas las siguientes palabras del diccionario\n" + dictUrls);
  39.            dictUrls = dictUrls.replace(/(\r\n|\n|\r)/gm, " ");
  40.            alert("Eliminados los espacios de las palabras del diccionario\n" + dictUrls);
  41.            dictUrls = dictUrls.split(" ");
  42.            alert("Obteniendo las palabras en un contendor\n" + dictUrls);
  43.            Leer();
  44.          }
  45.          else {
  46.          /*  urlFound */
  47.        /*    alert("Urls válida\n" + xhr.responseText); */
  48.            alert(xhr.getAllResponseHeaders());
  49.            masiveReq();
  50.          }
  51.        }
  52.      }
  53.    }
  54.  xhr.send();
  55.  }
  56. }
  57.  
  58. function masiveReq() {
  59.  while(!dictUrls.length) {
  60.  
  61.   }
  62.  
  63.    alert("Realizando " + dictUrls.length + " peticiones");
  64.      var baseUrl = dominios[0].value + "/";
  65.  
  66.    for (var i = 0; i < dictUrls.length; ++i) {
  67.      req.url = baseUrl + dictUrls[i];
  68.      /*alert("Haciendo petición a\n" + req.url);*/
  69.      HacerPeticiones();
  70.        if (i == (dictUrls.length-1))
  71.          alert("Realizando última petición");
  72.  
  73.  }
  74. alert(urlFound);
  75. }

47  Programación / Desarrollo Web / Qué software d terceras partes me recomendais aprender primero? javascript/ web. en: 16 Febrero 2020, 18:57 pm
Hay un montón de software de terceras partes y no sé con cuales debería empezar. Más que nada por añadir a un portfolios.

He hecho una lista de software que no utilizo y que debería aprender a manejar. Si considerais que me falta alguno indispensable en la lista mencionarlo. Con cual/cuales me recomendais empezar? Cuales considerais imprescindible?

- MEAN fullstack
- Jquery
- Backbone.js
- Angular
- Ember
- Riotjs
- React
- SQL
- Polymer
- Sass
- Less
- Stylus
- Mocha
- Jasmine
- Vue.js
- Leaflet
- Gitlab
- Jenkins
- Sonar
- Testlink
- Docker
- REST
48  Programación / Desarrollo Web / [Aporte] htmlEntities() para javascript. en: 16 Febrero 2020, 00:51 am
Siempre me veo en la necesidad de codificar entidades a mano y acabo mirando una tabla porque no me acuerda alguna entidad en concreto. Por lo tanto hice una función en javascript que lo haga.
En principio la hice con el pseudoprotocolo
Código
  1. avascript:r='replace';d=document;a=prompt()[r](/ /g,"&#38;#38;#38;#32;")[r](/!/g,"&#38;#38;#38;#33;")[r](/"/g,"&#38;#38;#38;#34;")[r](/%/g,"&#38;#38;#38;#37;")[r](/'/g,"&#38;#38;#38;#39;")[r](/\(/g,"&#38;#38;#38;#40;")[r](/\)/g,"&#38;#38;#38;#41;")[r](/</g,"&#38;#38;#38;#60;")[r](/>/g,"&#38;#38;#38;#62;")[r](/`/g,"&#38;#38;#38;#96;")[r](/a/g,"&#38;#38;#38;#97;")[r](/A/g,"&#38;#38;#38;#65;")[r](/e/g,"&#38;#38;#38;#101;")[r](/E/g,"&#38;#38;#38;#69;")[r](/i/g,"&#38;#38;#38;#105;")[r](/I/g,"&#38;#38;#38;#73;")[r](/o/g,"&#38;#38;#38;#111;")[r](/O/g,"&#38;#38;#38;#79;")[r](/u/g,"&#38;#38;#38;#117;")[r](/U/g,"&#38;#38;#38;#85;")[r](/{/g,"&#38;#38;#38;#123;")[r](/}/g,"&#38;#38;#38;#125;")[r](/‘/g,"&#38;#38;#38;#8216;")[r](/’/g,"&#38;#38;#38;#8217")[r](/‚/g,"&#38;#38;#38;#8218;")[r](/“/g,"&#38;#38;#38;#8220;")[r](/”/g,"&#38;#38;#38;#8221;")[r](/„/g,"&#38;#38;#38;#8222;")[r](/&#8242;/g,"&#38;#38;#38;#8242;")[r](/&#8243;/g,"&#38;#38;#38;#8244;")[r](/‹/g,"&#38;#38;#38;#8249;")[r](/›/g,"&#38;#38;#38;#8250;")[r](/s/g,"&#38;#38;#38;#115;")[r](/S/g,"&#38;#38;#38;#83;");a=d.createTextNode(a);b=d.createElement('p');b.appendChild(a);d.writeln(b.innerHTML);

Pense que a alguien más le podría ser algo útil y no me costaba nada asique hice una aplicación/página web con una interfaz muy simple para hacer esta tarea de forma automatizada.

htmlEntities() es una función que codifica caracteres que puedan ser interpretados y/o peligrosos a sus respectivas entidades. Estás entidades son códigos que el navegador conoce y puede mostrar. Por ejemplo el caracter < es codificado como &lt;
Si en el código de tu página web permites que usuarios introduzcan caracteres como < podrían llegar a formar códigos que el navegador interprete como <img src="http://paginaporno.com/imagenPorno.jpg">, el navegador entiende la etiqueta imagen y muestra un imagen externa en tu página web sobre la que tu no tienes control. En vez de una imagen podría ser un código de javascript de un keylogger que te robase la cuenta. Otro caso común es que tu mismo quieras compartir un código para que los demás lo vean, pero el dichoso código en vez de mostrarse como texto, es interpretado por el navegador. O incluso en un ataque MITM interceptan una la respuesta a una petición por XHR. Para estes y otros casos una de las múltipes medidas que se toman es convertir los caracteres peligrosos en entidades. De esta forma el código no es interpretado por el navegador, en su lugar muestra el caracter correspondiente a dicha entidad.

Este programa que traigo hace precisamente esto. Le introduces un código o texto que no quieres que se interprete y te lo traduce a entidades html.

Solo debes copiar el código generado y lo pones en tu página web por ejemplo dentro de un div. En el blog que comencé hace unos días podeis ver que voy mostrando códigos. Para poder hacerlo codifico las entidades. Si no lo hiciese se ejecutaría y por lo tanto no podría compartir los códigos que creo.

Podeis copiar el código siguiente en un documento.html para abrirlo y utilizarlo o utilizar la función sin el resto de la página.
Código
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>htmlEntities</title>
  6. </head>
  7. <body>
  8. <h4 id="en" onclick="cambiarIdioma('en');" style="display:inline;font-size:40px">EN</h4>
  9. <h4 style="font-size:40px;display:inline"> | </h4>
  10. <h4 id="es" onclick="cambiarIdioma('es');" style="font-size:40px;display:inline;color:coral"> ES</h4>
  11. <div style="width:100%;align:center">
  12. <h1 style="color:coral;font-size: 60px;align:center;text-align:center;display: block; margin-right: auto; margin-left: auto;">htmlEntities()</h1>
  13. <input type="text" id="codigo" placeholder="Introduce tu código a parsear" style="width:95%;font-size: 60px; display: block; margin-right: auto; margin-left: auto; outline-color:coral">
  14. <br />
  15. <button type="button" id="bt" onclick="Parsear()" style="width:47.5%;font-size: 50px;display: block; margin-right: auto; margin-left: auto; background-color: #fafafa;outline-color: coral">Parsear</button>
  16.  
  17.  
  18. <br />
  19. <textarea id="ta" contenteditable="true" style="width:95%;height:400px;overflow-y:scroll;padding:10px;background-color:#eee;color:coral;align:center;display: block; margin-right: auto; margin-left: auto;">Aquí aparecerá tu código.</textarea>
  20. </div>
  21.  
  22. <script>
  23. function cambiarIdioma(identificador) {
  24.  if (identificador == "en") {   document.getElementById("codigo").placeholder = "Introduce your code to parse here";
  25. document.getElementById("ta").innerHTML = "Here is going to be your code.";
  26. document.getElementById("en").style.color="coral"; document.getElementById("es").style.color="black";
  27.  document.getElementById("bt").innerHTML="Parse";
  28.  }
  29.  
  30.  if (identificador == "es") { document.getElementById("codigo").placeholder = "Introduce tu código a parsear"; document.getElementById("en").style.color="black"; document.getElementById("es").style.color="coral"; document.getElementById("ta").innerHTML = "Aquí aparecerá tu código."; document.getElementById("bt").innerHTML="Parsear";
  31.  }
  32. }
  33.  
  34.  
  35. function Parsear() {
  36.  var miString = document.querySelector("#codigo").value;
  37.  
  38.  miString = htmlEntities(miString);
  39.  
  40.   document.querySelector("#ta").innerHTML= miString;
  41. }
  42.  
  43.  
  44. /* Codigo */
  45. function htmlEntities(string) {
  46. r='replace';d=document;a=string[r](/ /g,"&#38;#38;#38;#32;")[r](/!/g,"&#38;#38;#38;#33;")[r](/"/g,"&#38;#38;#38;#34;")[r](/%/g,"&#38;#38;#38;#37;")[r](/'/g,"&#38;#38;#38;#39;")[r](/\(/g,"&#38;#38;#38;#40;")[r](/\)/g,"&#38;#38;#38;#41;")[r](/</g,"&#38;#38;#38;#60;")[r](/>/g,"&#38;#38;#38;#62;")[r](/`/g,"&#38;#38;#38;#96;")[r](/a/g,"&#38;#38;#38;#97;")[r](/A/g,"&#38;#38;#38;#65;")[r](/e/g,"&#38;#38;#38;#101;")[r](/E/g,"&#38;#38;#38;#69;")[r](/i/g,"&#38;#38;#38;#105;")[r](/I/g,"&#38;#38;#38;#73;")[r](/o/g,"&#38;#38;#38;#111;")[r](/O/g,"&#38;#38;#38;#79;")[r](/u/g,"&#38;#38;#38;#117;")[r](/U/g,"&#38;#38;#38;#85;")[r](/{/g,"&#38;#38;#38;#123;")[r](/}/g,"&#38;#38;#38;#125;")[r](/‘/g,"&#38;#38;#38;#8216;")[r](/’/g,"&#38;#38;#38;#8217")[r](/‚/g,"&#38;#38;#38;#8218;")[r](/“/g,"&#38;#38;#38;#8220;")[r](/”/g,"&#38;#38;#38;#8221;")[r](/„/g,"&#38;#38;#38;#8222;")[r](/&#8242;/g,"&#38;#38;#38;#8242;")[r](/&#8243;/g,"&#38;#38;#38;#8244;")[r](/‹/g,"&#38;#38;#38;#8249;")[r](/›/g,"&#38;#38;#38;#8250;")[r](/s/g,"&#38;#38;#38;#115;")[r](/S/g,"&#38;#38;#38;#83;")[r](/\./g,"&#38;#38;#38;#46;");a=d.createTextNode(a);b=d.createElement('pre');b.appendChild(a);return b.innerHTML;
  47. }
  48.  
  49. </script>
  50. </body>
  51. </html>

Si encontrais algún bug o alguna forma de que se interprete código, avisar para mejorarlo.
No quite ni todas las entidades, ni solo las típicas, quité un poco las que yo creo que son mínimas imprescindibles.
49  Comunicaciones / Android / Reversing Crackeo de apps .apk en Android sin root con Termux en: 9 Febrero 2020, 01:38 am
Reverse Enginering Android APKs usando Android sin root.

Instala Termux de la PlayStore.

Actualiza.
pkg update & upgrade

Instala software útil:

pkg install aapt

pkg install apksigner

pkg install apktool

pkg install dpkg

pkg install git

git clone https://github.com/Lexiie/Termux-Jadx

dpkg -i ./jadx-0.6.1_all.deb

pkg install nano

pkg install nodejs (el npm que viene incluido es muy útil y hay varias herramientas para nodejs útiles para reversing)
pkg install openssl-tool

pkg install radare2

pkg install vim

pkg install wget

pkg install zip

Si no se encuentra algún soft en el repo que viene por defecto, installa también el unstable y prueba de nuevo:

pkg install unstable-repo

Puede que quieras usar tus herramientas o de terceros en algún lenguaje de programación. Hay más en otros repos no oficiales. Puedes ver todos los paquetes disponibles con el comando:

pkg list-all


O usar git clone como en uno de los comandos anteriores e instalar manualmente.

Ahora que tienes todas la herramientas, vamos a hacer algunos retos.

Crea una carpeta donde quieras, yo voy a crear RE/CC de Reverse Enginering y Cracking Challenges.

mkdir RE
cd RE
mkdir CC
cd CC

Y descargamos los retos.

wget https://github.com/OWASP/owasp-mstg/tree/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk


Copiamos desde la ruta de descarga a la ruta de trabajo que creamos. Si no sabes la ruta usa el comando pwd para ver la ruta actual. En mi caso queda:
cp /data/data/com.termux/files/home/storage/downloads/UnCrackable-Level1.apk /data/data/com.termux/files/home/RE/CC/

Si te da problemas de acceso usa el comando termux-setup-storage y ya deberías tener la ruta disponible.

Cuando lo tenga al usar el comando ls dentro de la ruta /RE/CC podrás ver que tienes el uncrackable ahí.

Ahora tenemos varias herramientas que podemos usar para desempaquetarlo en distintos archivos. La más conocida es el zip. Si le cambias la extensión a .zip puedes abrirlo con el zip de toda la vida.

Algunas requieren root, por ese motivo nos bajamos el jadx. También puedes usar Apis online si no tienes root. Por ejemplo http://www.javadecompilers.com/apk también es muy usado el dex2jar incluso puedes instalarlo directamente con el r2pm (el manager de packetes de radare). Requieren root. Si tienes tu Android root instala el tsu con pkg install tsu que es un wraper del su para termux.

También comentar que puedes instalar el UnCrackable.apk sin problemas. Es una aplicación que pide una contraseña para acceder, la cual no conocemos.

Pues vamos a desempacar directamente el .apk

jadx --deobf UnCrackable-Level1.apk

Si usas el comando ls vas a ver que a parte del .apk se creo un .jobf y una carpeta con el mismo nombre del archivo.
Entramos con cd y seguimos la ruta hasta encontrar los .java

cd UnCrackable-Level1
cd sg
cd vantagepoint
cd uncrackable1

En este ruta tenemos el MainActivity.java que suele ser la actividad principal del programa.

Si hacemos un nano o vim al .java:

nano MainActivity.java

bajamos un poco y ya vemos el
if (C0005a.m6a(obj)) {
  create.setTitle("Sucess!"); dentro de la clase public void verify()

2 Líneas más arriba del if vemos la declaración y definición del String obj que es el texto que el usuario ponga en la aplicación, porque se está obteniendo de un EditText que es la versión de Android de un InputText.

Como vemos no tiene mucho más código, ni realiza intentos a otras aplicaciones ni a otras actividades de la aplicación.

Salimos de nano con control + X y si hacemos ls vemos que en la misma carpeta tenemos el C0005a.java al que de referencia en el código.

Lo abrimos con nano o vim y vamos a buscar el método m6a.

vim C0005a.java

Es la primera subclase de C0005a y como vemos es de tipo boolean. Como en el MainActivity estaba dentro de un if, necesitamos que devuelva true.

Podemos modificar el código si queremos y meterle un ! en la condición del if, y siempre que se ponga mal la contraseña actuará al revés.

Si miramos el resto de archivos veremos la clave cifrada, el tipo de cifrado, la contraseña del cifrado el modo de bloque...

Podemos sacar la clave con el comando
echo 5UJiFctbmgbDoLXmpL12mkno8HT4Lv8dlat8FxR2GOc= | openssl enc -aes-128-ecb -base64 -d -nopad -K 8d127684cbc37c17616d806cf50473cc

Ya estaría el reto completado. Hay muchas más formas de obtener el código o strings importantes para resolver el reto.

Por ejemplo podemos obtener el archivo classes.dex descomprimiendo el archivo.
cp UnCrackable-Level1.apk UnCrackable-Level1.zip
unzip UnCrackable-Level1.zip

Despues lo abrimos en el rabin2 o en el radare2.

rabin2 -izq classes.dex
Para cuando tengas muchos resultados, si buscas algo en concreto añade grep para filtrar:
rabin2 -izq classes.dex |grep "http"

Con radare2 se pueden hacer muchas cosas y analizar binarios de todo tipo.
r2 classes.dex
>aaa
>fs
>ii
>VV para salir dale a Q
>s main
>exit


Ahora vamos a resolver el reto otra vez pero vamos a hacerlo parcheando la app en vez de sacando el string.

Esta vez vamos a usar el apktool en lugar del jadx para obtener el código .smali que es una versión human readable (ensamblador) del bytecode que ejecuta Dalvik Virtual Machine.

apktool d -f UnCrackable-Level1.apk

-f sirve para sobrescribir la carpeta que nos creó el jadx, que ya no la necesitamos.

Ahora vamos a buscar el MainActivity.smali

cd UnCrackable-Level1
cd smali
cd sg
cd vantagepoint
cd uncrackable1

vim MainActivity.smali
Si miramos en el código encontraremos donde dice sucess.
Justo encima tenemos un condicional if que dice, if-eqz p1, :cond_0

Vamos a negar la condición para que siempre que pongas la contraseña mal nos deje "pasar".
Para saber como hacerlo están aquí los op codes de smali:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

Es decir solo necesitamos cambiar el if-eqz por el if-nez y guardar el archivo.

Ahora lo buildeamos, lo alineamos y finalmente lo firmamos, es este orden siempre y cuando se usen estas herramientas.

Nos vamos a la ruta RE/CC y buildeamos.

apktool b -d UnCrackable-Level1 build.apk

cd UnCrackable-Level
cd dist
Dentro de dist tenemos el apk generado. Lo tenemos que alinear.

zipalign -f -v 4 UnCrackable-Level1.apk aligned.apk

apksigner autokey aligned.apk firmada.apk

Lo ideal es usar el keytools para generar el keystore y firmas la app para máxima compatibilidad. En algunos dispositivos me corre la app sin problemas, y en otros me da error. Si teneis root o quereis rooterlo podeis bajaros el kingoroot de su página oficial y bajaros el paquete de reversing que viene en la wiki de termux. Con root se puede usar software más adecuado y bajarse suits enteras.

Ahora la puedes copiar de vuelta a descargas e intalarla. Una vez instalada pongas la contraseña que poñas verás que la aplicación te la valida como correcta a pesar de no serlo, ya que en vez de comprobar: "Es el texto introducido igual a la contraseña? Entonces valida." con el cambio que hicimos en el código pasa a ser "Si el texto introducido no es igual a la contraseña, Entonces valida". A alto nivel eso es lo que hicimos.

Otra forma que se me ocurre de resolver el reto sería debuggeando la aplicación ponieno breakpoints y analizando la memoria para ver el string directamente descifrado.

Espero que os sirva!
50  Programación / Desarrollo Web / [Resuelto] Forma correcta de hacer esto? No referencia en funcion en click. en: 3 Febrero 2020, 03:34 am
Al añadir listeners con una función que hace alert de i, se queda la referencia asignada al listener, es decir, cuando se presione el botón, se comprueba cual es el valor de i al presional el botón. Cual es la forma correcta de dejar una valor fijo incremental en cada botón? Es decir, que cuando presione el primer botón salga 1, cuando presione el segundo salga 2, etc.

Una forma corta y eficiente.

Código
  1. <!DOCTYPE html>
  2. <html>
  3. <input type="number" placeholder="input" id="inpcalc"></input>
  4. <button type="button" class="bcalc">7</button>
  5. <button type="button" class="bcalc">8</button>
  6. <button type="button" class="bcalc">9</button>
  7. <button type="button" class="bcalc">+</button>
  8. <button type="button" class="bcalc">4</button>
  9. <button type="button" class="bcalc">5</button>
  10.  
  11. <script>
  12. var botones = document.querySelectorAll(".bcalc");
  13. var input = document.querySelector("#inpcalc");
  14.  
  15. for(var i = 0; i < botones.length; ++i) {
  16. botones[i].addEventListener("click",  function(){alert("Boton Número " + i)});
  17. }
  18. </script>
  19. </body>
  20. </html>
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines