No entiendo como funciona éste tipo de parámetro en sitio web

Iniciado por Schaiden, 2 Junio 2017, 23:43 PM

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

Schaiden

Miren como funciona éste buscador:

http://www.ejemplo.com//SEARCHED/ST=mi_busqueda/gbpws.aspx

Fijense donde resalté mi_busqueda, aquí está el valor del parametro que utiliza el buscador de éste sitio web de ejemplo. Hay varias cosas que no enteindo en ésta url, entre ello no entiendo por que hay dos barras '//' entre el .com y el SEARCHED. SEARCHED lo interpreto como un directorio dentro de la web, pero entre las dos '//', se me viene algo a la mente como un directorio fantasma, sin nombre, pero no entiendo como puede ser posible. Después, no entiendo que sería 'ST', lo lógico sería que fuera el nombre del parámetro, pero no entiendo por que está antes del archivo .aspx que sería el archivo de la página en si. Lo normal, y lo que veo dia a dia en todas las webs es que los parámetros estén después del nombre de la página seguido a un signo de interrogación '?'

Por ejemplo, yo estoy acostumbrado a que la página sea de éste modo:

http://www.ejemplo.com/SEARCHED/gbpws.aspx?ST=mi_busqueda

Me gustaría que me ayudaran a entender la naturaleza de este enlace y también saber como se podría inyectar a través de sqlmap a un parámetro como éste, ya que la opción -p ST no funciona en éste caso.

Saludos y gracias!

Luis Leon B

Siempre recomiendo aprender a programar y administrar servidores, antes de embarcarse a la auditoría web, en mi experiencia ayudó a comprender de que forma se consituyen las aplicaciones web, qué limites y que posibilidades hay dentro de la web.
.aspx es un script en VBscript del lado del servidor (si tienes acceso a este, identificarás el VBscript cuando usen <% %> en vez de <?php ?> caracteristico.

No tengo mucha experiencia con IIS, pero en nginx en el nginx.conf que define cómo nginx va a tratar las peticiones HTTP provenientes, dentro del bloque de directiva http -> server -> existe una directiva llamada location. Una vez que se recibe

HTTP 1.1 GET /

el servidor busca en las directivas location el siguiente: /, y si autoindex está activado busca index.html para servirlo.

El módulo rewrite de apache y nginx toma una URI ejemplo /articulo-1923-index.html vuelca el query_string, y el $path a los servicios backend como /articulo.php?id=1923&page=index.html.

Espero te de una idea de lo que SEARCHED/ST=mi_busqueda/file.aspx está haciendo.
Por supuesto, instalate IIS y lee la siguiente documentacion para comprender el funcionamiento interno de las redirecciones internas del servidor https://docs.microsoft.com/en-us/iis/configuration/configpaths/

engel lex

CitarMe gustaría que me ayudaran a entender la naturaleza de este enlace y también saber como se podría inyectar a través de sqlmap a un parámetro como éste, ya que la opción -p ST no funciona en éste caso.

te soy sincero y acabas de decir algo como

"realmente quiero tunear mi carro yo mismo, pero no entiendo que es ese liquido que le hecha mi papá todas las semanas y siempre me regaña por gastarselo..."

así como ya te dijeron... empieza desde lo básico... antes de intentar "hackear" tienes que tener un conocimiento decente en programación y en la estructuración de los sistemas involucrados...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Schaiden

Perdón, éste thread lo subí hace mucho tiempo ya, y ya llegué a comprender lo que pasaba en éste caso. Se ve que el GET estaba parseado a mano, ya que originalmente probe con éste enlace:

http://www.ejemplo.com//SEARCHED/ST=mi_busqueda/gbpws.aspx

y luego cambie de lugar las cosas:

http://www.ejemplo.com//SEARCHED/gbpws.aspx/ST=mi_busqueda

y obtuve el mismo resultado, por lo que puedo llegar a concluir que el GET se parsea a mano, para obtener los parámetros, y no se utilizan directamente a través de $_GET['parametro']. Cosa que yo no vi en ninguna página web, y lo que me respondieron arriba no tiene que ver con lo que pasa en éste caso.

Citar"realmente quiero tunear mi carro yo mismo, pero no entiendo que es ese liquido que le hecha mi papá todas las semanas y siempre me regaña por gastarselo..."

No me gustó ésta analogía, en primer lugar porque suena muy despectivo contra mi persona, y en segundo lugar estoy en desacuerdo ya que uno puede empezar leyendo algo avanzado y cuando encuentra palabras/conceptos que no va entendiendo los va buscando hasta que llegue un punto en el que terminas entendiendo toda la idea. Por ejemplo, el otro día lei sobre la vulnerabilidad CRIME (vieja, del 2012), para entenderla había que entender por un lugar sobre https, las cabeceras que se usan y como son las transacciones, luego el funcionamiento de la compresion dflate, y para saber como aplicarla en la vida real había que saber hacer un ataque mitm, y saber que son y como funcionan las cookies y las sesiones. Una persona que no sepa de session hijacking, de arp spoofing, rogue dhcp o dhcp ack injection, podría tranquilamente haber buscado esa vulnerabilidad, y luego ir googleando lo que no sabe, por ejemplo, ataque de hombre en el medio, cookies, session hijacking, javascript injection, etc, etc.

Por otra parte soy estudiante de informática, asi que estoy aprendiendo mucho de programación. Al mundo del desarrollo web en lleno, con todas las librerias y funciones que se utilizan hoy en dia lo voy a tocar en una materia que empieza en un mes. Por ahora solo se lo básico de php, html y css, pero como lo que más me llama la atención es la seguridad, aprendí también sobre algunos ataques, como xss, inyeccion sql, csrf, xxe, file include, y mi opinión es que no es necesario ser una persona que emplea mucho tiempo en el desarrollo para entender esos conceptos, lo que si admito, es que cuanto más programás, más sabes como utilizar todos esos conceptos en situaciones de la vida real.

Luis Leon B

 :silbar:

No es PHP, es vbscript, corriendo en un Windows Server con tecnología IIS y Windows Host Scripting (procesador asp).

Tampoco creo que parsee los query_strings, déjame enseñarte algo:

URI:
http://www.google.com/path.php?id=query&strings=true

URL:
www.google.com

PATH:
path.php

QUERY
?id=query&strings=true

QUERY STRINGS
query, true

Ahora bien, query_strings es el que recibe el servidor para pasar métodos $_GET al procesador php (el procesador php puede correr como mod_php dentro de un solo thread en el caso de apache O ejecutarse en diferentes pools para hacer load balancing de las ejecuciones del procesador osea, aumentar el rendimiento en nginx)

Bien, los módulos rewrite toma la URI y construye una QUERY con query_strings en PATH, para servir un servicio estático de backend (a veces es diferente con Express js y node).

Estoy muy seguro que es igual en IIS, aprender PostgresSQL te facilitará, además te recomiendo aprender un lenguaje nativo y .NET es uno que comparte la plataforma Windows Phone, ASP, VBScript y Autoit. Es importante conocer de backend si deseas hacer un mass defacement, si no no podrás escalar privilegios.

Schaiden

Muchas gracias por la información Luis! Es cierto lo que decis, debería saber algún lenguaje nativo de Windows, nunca aprendí C# ni VBScript, etc.. Las cosas que habré hecho siempre tuvieron una arquitectura LAMP, por lo que estaría bueno experimentar con algún Windows Server y IIS. Saludos y gracias x tu tiempo!

engel lex

actualmente tanto ASP, como los java serverlets son poco usados, bueno en realidad creo que nunca superaron a php



esta es más o menos una distribución del mercado hace un tiempo ya... actualmente allí está haciendo fuerza nodejs y python

lo que dije no pretendía ofender, sino dejar claro que empezabas desde el final... el problema de eso es que se crean vicios y mitos, que luego pueden perjudicarte a la hora de trabajar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Schaiden

#7
Gracias engel por la información!!! Ya tendríamos que empezar a cambiarnos todos a Python, o Ruby a ésta altura! jaja.

Gracias por la sugerencia tambien! Admito que sufro problemas de ansiedad que me llevan a eso, a querer aprender cosas de adelante para atras, y siempre esta bueno saber las bases de todo, como funcionan las cosas, y tambien ponerse a programar. Ya durante los siguientes meses me va a tocar meterme en el mundo del desarrollo web con jquery, nodejs, y librerías de las que se utilizan hoy en día... Lo malo es que voy a tener que usar PHP y no Python :p . Lo que a mi no me gustaría es que me tomaran como un lammer o una persona que no sabe nada de nada y que solo quiere divertirse o presumir sin importarle entender lo que hace... Yo me considero un aficionado, una persona que puede ignorar muchisimas cosas pero que siempre tiene el entusiasmo de aprender algo nuevo, y de hacerlo por el conocimiento y sin pensar en el dinero. Saludos!

#!drvy

#8
Citarentre ello no entiendo por que hay dos barras '//' entre el .com y el SEARCHED. SEARCHED lo interpreto como un directorio dentro de la web, pero entre las dos '//', se me viene algo a la mente como un directorio fantasma, sin nombre, pero no entiendo como puede ser posible.

No es un directorio. Se parsea mediante el servidor web. En llaman reglas de reescritura o rewrite rules. En este caso, es un ejemplo de lo que no hay que hacer ya que es poco intuitivo y mal interpretado por muchos buscadores pero simplemente apunta al archivo root (normalmente un index) del directorio principal.

Es decir, en realidad podría quedar como:
http://www.ejemplo.com/index.aspx/SEARCHED/ST=mi_busqueda/gbpws.aspx

Citarespués, no entiendo que sería 'ST', lo lógico sería que fuera el nombre del parámetro, pero no entiendo por que está antes del archivo .aspx que sería el archivo de la página en si

Por que puede. En realidad ese archivo no lo llama directamente el navegador. Es un parámetro para el archivo principal que como he dicho antes, seguramente sea el archivo root del directorio principal.

CitarMe gustaría que me ayudaran a entender la naturaleza de este enlace y también saber como se podría inyectar a través de sqlmap a un parámetro como éste, ya que la opción -p ST no funciona en éste caso.

No puedes jugar con parámetros GET ya que estan mal estructurados en esa pagina. En SQLMAP tendrías que indicar un parametro propio como parte de la url.

Esto es, crear un punto de inyección añadiendo un asterisco * donde quieras que inyecte. En este caso, seria:

http://www.ejemplo.com//SEARCHED/ST=algo*/gbpws.aspx

Puedes leer mas sobre esto aquí:
https://github.com/sqlmapproject/sqlmap/wiki/Usage#uri-injection-point





Ten en cuenta que el servidor puede interpretar muchas cosas de muchas maneras. De hecho, esto es una url perfectamente valida:

http://ejemplo.com/index.php/test.php/hola.php?param=holaKase/ola=kase

Esta mal estructurada en un principio, pero es completamente valida. En nGInx esto por ejemplo se configuraria asi:

location / {
   try_files $uri $uri/ /index.php?$query_string;
}


En PHP por ejemplo podrias tener un index asi:

Código (php) [Seleccionar]
<?php
echo '<pre>';
echo 
$_SERVER['REQUEST_URI'];
print_r(explode('/'$_SERVER['REQUEST_URI']));
?>


Entonces al ejecutar esa url, te devolvería:
/index.php/test.php/hola.php?param=holaKase/ola=kase

Array(
   [0] =>
   [1] => index.php
   [2] => test.php
   [3] => hola.php?param=holaKase
   [4] => ola=kase
)



Y si, es recomendable que practiques un poco de programación, sobre todo lo que son los enrutadores (routers) y el protocolo HTTP.

Saludos

Schaiden

Excelente respuesta #!drvy! Muchas gracias por la ayuda!