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 - Dedalo

#1
Hola TheWAV.s antes que nada agradecerte, por un minuto pensé que nadie comentaría nada.

Primero, si, el tutorial no está hecho para gente que nunca ha visto flask sino más bien para alguien que alguna vez lo vio o vio frameworks similares en python.

Segundo, la verdad creo que estás redundando un poco sobre todo en:
CitarEsto difiere bastante y no solo depende de open(), también puede darse el mal uso de request.args.get para servir o guardar archivos conduciendo a un directory traversal o LFI.

Porque es exactamente lo que hago en el tutorial, a través de la variable que se espicifíca en request.args.get, hace un LFI.

Pero en todo caso agradezco que desees complementar mi post. Después de todo de eso se trata un foro. Igual sería bueno que saques un post para nutrir más la comunidad y para que brindes más información de como funciona flask para las personas que este tutorial les pueda parecer avanzado.

Una vez más vale aclarar que efectivamente este post no es para gente que recién ha visto python o flask, es para personas que ya lo vieron y para que me den más feedback de otros vectores a explotar y nutrirme yo también

Saludos!
#2
Por estos días tuve la oportunidad de trabajar con No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, un micro-framework que te permite hacer webs con Python y sintaxis de Jinja2. La aplicación que llegó a mis manos tenía un login, un panel que trabaja con una base de datos y hasta con algunos temas de criptografía. Me llamó mucho la atención como funcionaba y esto es un poco de lo que pude concluir.

Server-Side Template Injection

Por la forma en la que está diseñado Flask, podemos explotar Server Side Template Injection. Es interesante tomarlo en cuenta para el momento de hacer pentest porque ya le han reportado No tienes permitido ver los links. Registrarse o Entrar a mi cuenta explotando este tipo de vulnerabilidades.

El primer ejemplo es un XSS mediante Template Injection. Por defecto flask no filtra las variables cuando se usa request.args.get('var'). El código a continuación es vulnerable a XSS.

Código: python


from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/XSS')
def hello_xss():
template = '''<h2>Hola %s!</h2>''' % request.args.get('nombre')
return render_template_string(template, person=request.args.get('nombre'))

if __name__ == "__main__":
app.run(debug=True)



El cual se puede explotar fácilmente de la siguiente forma:



Otro vector de ataque que encontré fue LFI a través del popular open(), como se puede ver en el siguiente ejemplo:

Código: python


from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/LFI')
def hello_lfi():
template = '''<h2>Hola %s!</h2>''' % request.args.get('name')
return render_template_string(template, person=request.args.get('name'), get_user_file=get_user_file)

def get_user_file(f_name):
with open(f_name) as f:
return f.readlines()


if __name__ == "__main__":
app.run(debug=True)



El cual se puede explotar de la siguiente forma:



El código que usé en el anterior ejemplo en la variable name fue:

Código: text
<pre> {% for a in get_user_file("/etc/passwd") %} {{a}} {%endfor%} </pre>


También pude haber sacado el archivo completo de la siguiente forma:

Código: text
{{get_user_file("/etc/passwd")}}


Pero le puse el FOR para hacer que se vea mucho mejor, si quieren entender la diferencia entre {{}} y {%%} les recomiendo leer la info sobre FLASK en el link del principio de este post y la verdad 100% recomendable, un framework bien interesante.

Como se pueden imaginar, también se puede explotar Inyección SQL pero he pensado también en otros tipos de explotación bastante interesantes. Si se les ocurren otros métodos de explotación coméntenmelos y no olviden seguirme en TW como @SeguridadBlanca
#3
Wargames y retos / Reto PHP y Seguridad Web
Octubre 30, 2014, 02:24:47 PM
Hola, este reto lo hice para una campus party en la que participé y por cuestiones administrativas el reto nunca salió, se los dejo por aquí.

DEBEN ENCONTRAR QUE VULNERABILIDAD TIENE EL CÓDIGO Y CÓMO EXPLOTARLA

Código: php
<?php

$q = $_GET['a'];
$r = $_GET['b'];
$value = $_GET['v'];
$z2 = $q . $r;
$s = $_GET['c'];
$z1 = $s . $t;
$r4 = 34;
$x = "low";
$l = $x;
$t = $_GET['d'];
$r55 = 33;
$xx = $o;
$cd = $co . $pe;
$pq = $_GET['l'];
$c33 = $_GET['e'];
$y = $jr['x'];
$ss = "if x then y";
$a = $s.$r;
$c0 = $a($value);
$or = $dr;
$xor = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$xor2 = "!@#$%&";
$imp = $c33 . $xor . $xor2;
$l0b = (30000 * 3 * 60 * 60 * 60) / 1337;
$l0b2 = 8000 * 44 * 44;

$sss = $l0b * $l0b2 - 4444;

echo $imp;

if ($xx == $ss){
if ($lo != $d){
$rf = $ls;
}
$ll = $ss;
if ($po = $ro){
if ($x == "low"){
$dd = "high";
}
}
}

echo $c0;

if ($r4 >= 34){

echo "test".$y;

}

$r45 = $r4 . $r55;

$d8 = $d1;


?>



La Respuesta me la deben enviar por MP en el foro y tienen hasta la noche del 31 para resolverlo. Si encuentran mas de una vulnerabilidad en buena hora :) En la respuesta que me envíen deben decirme Que vulnerabilidad es y cómo explotarla.

GANADORES:
- Fermino
- Perverths0

Saludos,
Dedalo.
#4
Wargames y retos / Re:Reto
Octubre 30, 2014, 01:44:03 AM
Ya hay ganador pueden seguir intentando para saber la respuesta pero ya alguien ganó.
#5
Wargames y retos / Re:Reto
Octubre 30, 2014, 01:10:17 AM
A leer bro

Citarquien de con el valor de respuesta me la debe enviar por mensaje aquí en el foro

Envíamelo con mensaje aquí en el foro
#6
Wargames y retos / Re:Reto
Octubre 29, 2014, 11:57:08 PM
RETO MODIFICADO AHORA ESTÁ UN POCO MAS FACIL
#7
Criptografía / ¿Criptografía?
Octubre 29, 2014, 07:19:32 PM
La criptografía actualmente se encarga del estudio de los algoritmos, protocolos y sistemas que se utilizan para dotar de seguridad a las comunicaciones, a la información y a las entidades que se comunican.1 El objetivo de la criptografía es diseñar, implementar, implantar, y hacer uso de sistemas criptográficos para dotar de alguna forma de seguridad. Por tanto el tipo de propiedades de las que se ocupa la criptografía son por ejemplo:

Confidencialidad. Es decir garantiza que la información está accesible únicamente a personal autorizado. Para conseguirlo utiliza códigos y técnicas de cifrado.

Integridad. Es decir garantiza la corrección y completitud de la información. Para conseguirlo puede usar por ejemplo funciones hash criptográficas MDC, protocolos de compromiso de bit, o protocolos de notarización electrónica.

Vinculación. Permite vincular un documento o transacción a una persona o un sistema de gestión criptográfico automatizado. Cuando se trata de una persona, se trata de asegurar su conformidad respecto a esta vinculación (content commitment) de forma que pueda entenderse que la vinculación gestionada incluye el entendimiento de sus implicaciones por la persona. Antiguamente se utilizaba el término "No repudio" que está abandonándose, ya que implica conceptos jurídicos que la tecnología por sí sola no puede resolver. En relación con dicho término se entendía que se proporcionaba protección frente a que alguna de las entidades implicadas en la comunicación, para que no pudiera negar haber participado en toda o parte de la comunicación. Para conseguirlo se puede usar por ejemplo firma digital. En algunos contextos lo que se intenta es justo lo contrario: Poder negar que se ha intervenido en la comunicación. Por ejemplo cuando se usa un servicio de mensajería instantánea y no queremos que se pueda demostrar esa comunicación. Para ello se usan técnicas como el cifrado negable.

Autenticación. Es decir proporciona mecanismos que permiten verificar la identidad del comunicador. Para conseguirlo puede usar por ejemplo función hash criptográfica MAC o protocolo de conocimiento cero.

Soluciones a problemas de la falta de simultaneidad en la telefirma digital de contratos. Para conseguirlo puede usar por ejemplo protocolos de transferencia inconsciente.

Un sistema criptográfico es seguro respecto a una tarea si un adversario con capacidades especiales no puede romper esa seguridad, es decir, el atacante no puede realizar esa tarea específica.
#8
Es cifrado y descifrado. Usa DES hay ejemplos de implementación en muchos lenguajes.


Saludos,
Dedalo.
#9
Seguridad web y en servidores / Re:Dom Xss Persistente
Octubre 29, 2014, 02:52:47 PM
Gracias :) habría que ver como podemos orientarlo!
#10
Wargames y retos / Reto
Octubre 29, 2014, 02:48:08 AM
Bueno resulta que estaba haciendo un reto y pensaba dar una cantidad bonita en paypal pero primero quiero medir el nivel por lo que decidí hacer el reto mas simple primero, el premio será de 10 U$D en Paypal para el primero que lo resuelva, quien de con el valor de respuesta me la debe enviar por mensaje aquí en el foro. Mucha Suerte!


MODIFICADO!!!!!

mulcipher("espasmos") = 0x4e43414d46414449

mulcipher("dedalo") = 0x4d4f4f4d5943

mulcipher("respuesta") = ?

Tienen para resolverlo hasta el 31 de octubre por la tarde.

Los que estaban resolviendo el anterior también si quieren pueden seguir!

EDIT: El ganador, luego de que le acepte su respuesta como válida, debe hacer un texto de como lo resolvió.

Saludos,
Dedalo
#11
Seguridad web y en servidores / Dom Xss Persistente
Octubre 28, 2014, 02:53:23 PM
Resulta que en estos días he tenido unos flashes de ideas en la cabeza que me han llevado a hacer algunas pruebas con javascript... Por mas que encontré el término por algunas páginas no encontré un ejemplo real de esto y con un poco de imaginación llegué a algo interesante... DOM-Based Xss PERSISTENTES... Primero un ejemplo rápido de DOM Xss...

Código: javascript
<html>
<script type="text/javascript">
var prueba = location.hash;
document.write(prueba);
</script>
</html>


Guardamos ese código como dom.html (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) lo abrimos y no pasa nada pero si ponemos algo como: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta#"><img src=x onerror=prompt(1337)> tenemos un bonito prompt... ahora... he estado haciendo pruebas con localStorage y WebSQL y bueno miren la siguiente situación.

Código: javascript
<html>
<script type="text/javascript">
var msg;
var prueba = location.hash;
window.localStorage.prueba = prueba;
msg = window.localStorage.prueba;
document.write(msg);
</script>
</html>


Creamos un archivo con ese contenido y lo guardamos como dom1.html ingresamos y nos sale undefined verdad? ahora pongan No tienes permitido ver los links. Registrarse o Entrar a mi cuenta#"><img src=X onerror=prompt(1337)> como pueden ver salta el lindo prompt... se guardó en local y luego lo mostró en el sitio pero, ¿cómo confirmar esto?

Código: javascript
<html>
<script type="text/javascript">
var msg;
msg = window.localStorage.prueba;
document.write(msg);
</script>
</html>


creamos un documento llamado dom2.html con el contenido de arriba e ingresamos... casi como magia verdad? como pueden ver se ha mostrado el contenido del xss de un documento en el otro debido a que estaba guardado temporalmente...

Me pareció interesante compartirlo porque se me ocurren algunas formas interesantes de explotación imagen solamente que este storage vulnerable esté en un util.js que se use en todas las páginas...


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Saludos,
Dedalo
#12
creo faltaría hacer un par de pruebas mas pero así a groso modo has lo siguiente:


1.- Abrir Consola

2.- git clone No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

3.- cd rtl8723be

4.- make

5.- sudo su

6.- make install

7.- modprobe rtl8723be

8.- Reinicia


Saludos,
Dedalo
#13
Criptografía / Usando WebSQL con CryptoJS
Octubre 23, 2014, 04:01:49 PM
Me encontré que con la ayuda de nuevas funciones de javascript podemos hacer No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, algo muy similar a sqlite. El problema con este sistema, también conocido como No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, es que no tiene funciones de cifrado de información como tal. Entonces, decidí hacer un ejemplo de como implementar No tienes permitido ver los links. Registrarse o Entrar a mi cuenta con WebSQL para poder cifrar la data en las bases de datos.

Primer paso -> Importar AES:
Código: javascript
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>



Segundo paso -> Cifrar la data que queremos y crear (abrir) la base de datos que queremos usar:
Código: javascript
var encrypted = CryptoJS.AES.encrypt("estoesunaprueba", "password"); // Cifrar "estoesunaprueba" con AES usando "password" como Contraseña
var db = openDatabase('encripted', '1.0', 'Test DB', 2 * 1024 * 1024); // Nombre, Versión, Descripción, tamaño
var msg; // Crear variable msg



Tercer paso ->  Ejecutar lo correspondiente en la base de datos:
Código: javascript
db.transaction(function (tx) { // Empezar el proceso de la base de datos
tx.executeSql('CREATE TABLE IF NOT EXISTS PRUEBAS (id unique, prueba)'); // Crear la tabla
var secquery = 'INSERT INTO PRUEBAS (id, prueba) VALUES (1,"' + encrypted + '")'; // Poner la data cifrada en la base de datos
tx.executeSql(secquery); // Ejecutar el Query
msg = '<p>Data inserted in row.</p>'; // Crear mensaje de que la data fue ingresada
document.querySelector('#status').innerHTML =  msg; // Escribirlo
});



Cuarto Paso -> Cambiar de Hexadecimal a Ascii :
Código: javascript
function unhex(hexx) { // Esto es para cambiar de hex a ascii el contenido desencriptado del AES
var hex = hexx.toString();// forzar la conversión
var str = ''; // crear variable str
for (var i = 0; i < hex.length; i += 2) // moverse por la palabra de dos en dos
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); // sacar el texto de los hexadecimales
return str; // Mostrar el valor de STR
}



Quinto paso -> Sacar la data, descifrarla y mostrarla:
Código: javascript
db.transaction(function (tx) { // Empezar el proceso de la base de datos
tx.executeSql('SELECT * FROM PRUEBAS', [], function (tx, results) { // Query para sacar la data de PRUEBAS
msg = "<p> Data Found:</p>"; // Mensaje para el usuario
document.querySelector('#status').innerHTML +=  msg; // Escribir el mensaje para el usuario
msg = "<p><b>" + unhex(CryptoJS.AES.decrypt(results.rows.item(0).prueba, "password")) + "</b></p>"; // Obtener data de la BD - Mostrar mensaje descrifrado
document.querySelector('#status').innerHTML +=  msg; // Escribir mensaje descifrado
}, null);



El resto ya es poner el div llamado status para poder hacer que el código corra,  y listo muchachos, este es un ejemplo de como se puede usar WebSQL con CryptoJS para poder guardar data de manera segura.


¿Como lo usaría?

Imaginen poder hacer un script para escribir data sensible que deba ser guardada de manera urgente y lo puedan guardar en una base de datos en su navegador. Quiero ver si me da el tiempo para hacer una pequeña extensión de chrome para poder emular lo que digo.


Información útil:

Esto fue probado desde chromium en linux. Sin embargo, los navegadores modernos ya disponen de esto... (Firefox, Safari, Chrome). Para poder ver la base de datos y ver que el contenido si está cifrado pueden entrar a: ~/.config/chromium/Default/databases/ en caso de que estén usando su usuario por default de chromium

Si desean el script completo que hice pueden bajarlo de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta dándo click No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, los comentarios están en inglés, si no manejan mucho inglés, para comprender el código mejor mirar el de este tutorial.

Esta es la No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y Si tienen twitter y me pueden ayudar dando un RT este es el No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.


Saludos,
Dedalo.
#14
Ideas y Sugerencias / Re:SSL
Octubre 21, 2014, 05:36:04 PM
El ssl en cloudflare es gratuito ahora solo debes darle activar y listo.


Saludos,
Dedalo.
#15
Ideas y Sugerencias / SSL
Octubre 21, 2014, 02:24:14 AM
No me siento seguro en usar Tor en underc0de por temor a que puedan estar guardando data en el exit node de tor :/ podrían implementar SSL para poder estar mas seguros? no es necesario que sea un certificado comprado pueden hacer uno autofirmado y listo. Si gustan puedo ayudar pero para la seguridad, anonimato y privacidad de los usuarios del foro creo que es necesario.


Saludos,
Dedalo.
#16
Off Topic / Re:Recomendación UX!
Octubre 19, 2014, 08:06:51 PM
si osea puede cambiar pero no se no me cuadra es mas complicado para alguien que está haciendo uso del foro dar click en el segundo y o en el primero... es UX :/ bueno era una observación. Cambio y fuera.
#17
Off Topic / Recomendación UX!
Octubre 19, 2014, 07:42:07 PM
Deberían cambiar el botón website por el de inicio es incómodo dar click al segundo boton en vez de al segundo para ir a la primera página del foro tomando en cuenta que es el menú del foro.


Saludos,
Dedalo.
#18
Gracias a los 2 :) y si arthusu si das click al link de la web de developers de mysql que puse sale desde que versión funciona así.


Saludos,
Dedalo.
#19
Después de un tiempo sin escribir el buen clima hizo que mi perspectiva y mente se abrieran como para escribir un post interesante sobre una función de cifrado que tiene mysql. La función de la cual hablaré es AES_ENCRYPT();.

Primero, para desasnarnos un poco. ¿Qué es AES?.

AES es un algoritmo de cifrado simétrico (que depende de una password para descifrar), está calificado como un cifrado muy seguro. Mayor información sobre el cifrado googleen, por ahora me dedicaré a explicar cual el problema que hay con mysql.

Para cifrar información directo con la función de mysql debemos especificar lo que queremos cifrar y la contraseña para cifrar/descifrar. Esto se realiza de la siguiente manera.

Código: mysql
mysql> SELECT HEX(AES_ENCRYPT('textoquequierocifrar', 'password'));
+------------------------------------------------------------------+
| HEX(AES_ENCRYPT('textoquequierocifrar', 'password'))             |
+------------------------------------------------------------------+
| 3FBC9CB7DE3881CB47A2007AF57B94C3849648881F12E3B49A23D83CF5842A9A |
+------------------------------------------------------------------+
1 row in set (0,02 sec)


Entonces, como pueden ver, nos devuelve el hex del AES de lo que hemos cifrado con la contraseña "password".

¿Dónde recae el "error" de esto? Por defecto Mysql no pone 256 bits al cifrado. Lo deja en 128 bits por lo que no es lo estandarizado para que el uso de AES sea completamente seguro. Haremos la consulta a la variable del sistema block_encryption_mode.

Código: mysql
mysql> SELECT @@session.block_encryption_mode;
+---------------------------------+
| @@session.block_encryption_mode |
+---------------------------------+
| aes-128-ecb                     |
+---------------------------------+
1 row in set (0,00 sec)


Aquí se muestra lo que digo, se está usando AES-128-ECB -> AES es el cifrado 128 los bits y ECB el modo de operación. Esta información se puede corroborar en la página oficial de developers de mysql donde se documenta el uso de esta variable del sistema puedes dar click No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Para cambiarla a la de 256 solo debemos ejecutar la siguiente consulta -> SET @@session.block_encryption_mode = 'aes-256-ecb';

Una vez realizada la consulta pueden volver a hacer un select de block_encryption_mode y el resultado será diferente:

Código: mysql
mysql> SELECT @@session.block_encryption_mode;
+---------------------------------+
| @@session.block_encryption_mode |
+---------------------------------+
| aes-256-ecb                     |
+---------------------------------+
1 row in set (0,00 sec)


Entonces, ahora, si ciframos un contenido se cifrará con un estándar realmente seguro. Cifraré lo mismo y veremos como cambia el resultado.

Código: mysql
mysql> SELECT HEX(AES_ENCRYPT('textoquequierocifrar', 'password'));
+------------------------------------------------------------------+
| HEX(AES_ENCRYPT('textoquequierocifrar', 'password'))             |
+------------------------------------------------------------------+
| 6D9E4A37311B9A9FAB28BB183020341FADB51A99E038F22213B44876F88FD15A |
+------------------------------------------------------------------+
1 row in set (0,00 sec)


Si nos fijamos el hash que nos dio en el primer ejemplo con el de ahora son diferentes porque el cifrado fue fortalecido.

Primer Resultado:
3FBC9CB7DE3881CB47A2007AF57B94C3849648881F12E3B49A23D83CF5842A9A

Segundo Resultado:
6D9E4A37311B9A9FAB28BB183020341FADB51A99E038F22213B44876F88FD15A

Para decifrar estos hashes es muy simple:

Código: mysql
mysql> SELECT AES_DECRYPT(UNHEX('6D9E4A37311B9A9FAB28BB183020341FADB51A99E038F22213B44876F88FD15A'), 'password');
+----------------------------------------------------------------------------------------------------+
| AES_DECRYPT(UNHEX('6D9E4A37311B9A9FAB28BB183020341FADB51A99E038F22213B44876F88FD15A'), 'password') |
+----------------------------------------------------------------------------------------------------+
| textoquequierocifrar                                                                               |
+----------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)



En el caso que quieran descifrar el de 128 bits no van a poder, deberán volver a cambiar la variable global a 128 bits para que puedan realizar el descifrado.

Espero que les sirva, pueden aprovechar esta función al máximo para poder brindarle una mayor seguridad y privacidad a los usuarios de sus sistemas. Pueden usarlo para cifrar información personal del usuario y a menos que el no ponga su password, que también se debe guardar cifrada, no se pueda ver la información personal. De esa manera ni el administrador podrá leer la información personal y se le dará una mayor privacidad al usuario. Sé que se lee redundante pero es complicado de explicar un uso masivo. Ya haré un post sobre como usarlo de manera masivo con varios usuarios y su información.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos,
Dedalo.
#20
Alguien ha validado si no le hacen algo a la apk antes de darte el link de descarga?