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

#3431
Está super bueno, me gustó me gustó me gustó  :D

PD:
Donde dice:
Código (‭‬javascript) [Seleccionar]
document.write("
background: url(
  'http://www.diosdelared.com/blogs/themes/blackcyan/imagenes/bg.jpg'
) #000;z-index:1002;overflow: auto;}
"); // background


Podrías apuntar hacia otra web? xD ya que cuando se incluya esa imagen la referencia de la inyección se enviará a su web dejando en su log de acceso las inyecciones que alguien podría encontrar y utilizar con este script.

A mi me gustaría mucho si pudieras reemplazar el buffer de las imagenes con string en base64 y data/*; o simplemente hacerlo sin imagenes y evitar la dependencia de inclusiones externas.
#3432
Nivel Web / Re: PHP upload security
11 Diciembre 2009, 22:55 PM
Hola se ve super bueno.

En la función de C1c4Tr1Z te limita de dos a tres carácteres de extensión, yo le pondría 2 a 4 ya que dejas afuera las extensiones con 4 carácteres como el .jpeg o el tiff.
Código (php) [Seleccionar]
<?php
$files
=array("example.php""new_example.log""third.txt""something.asp""another_thing.js"'x..jpeg');
foreach(
$files as $file){
$extention;
if((preg_match('/(?:[\.]+([a-z0-9]{2,3}))$/i'$file$extention))){
echo "$file -> {$extention[1]}\n";
}
}
?>


Yo preferiría utilizar preg_replace() para la eliminación de carácteres no soportados por el sistema operativo en el nombre de archivos y directorios tales como /\*?<>%00 etc.

La función pathinfo() que utilizó Seth me gustó mas porque utilizas una función nativa de php ahorrando el recurso de utilizar dos o mas funciones como lo hizo ozx para verificar una extensión o haciendo explode que al final da casi lo mismo en rendimiento.

Yo pienso que si vas a renombrar el nombre del archivo de la imagen para guardarla entonces está demás la verificación de la extensión ya que las misma función de exif_imagetype() es el corazón encargado de verificar que el archivo sea realmente de tipo imagen y php elimina de forma automática todos los archivos subidos de esta manera (hablo de los temporales) asi que veo innecesario la eliminación.

Como dijeron en el documento, si puedes hacer bypass a exif_imagetype() con el comentario del jpg tal como lo hacían antiguamente con el editjpgcom entonces buscaría otra solución como por ejemplo la utilización de GD para obtener la imagen desde el archivo sin importar su extensión con imagecreatefromstring(file_get_contents($file)) y luego hacer un imagepng() de salida como nuevo archivo evitando la inserción de comentarios y strings que puedan servir de inyección a nuestro servidor web.

Con esto te evitas utiliza exif_imagetype() y el case o loop para verificar el tipo de archivo y le das una @ al comienzo de la función de GD por si la imagen cargada no es una imagen válida.
También hay formas de procesar transparencias y animaciones con GD.

Para procesar el nombre del archivo yo creo que es otro tema, puedes mantener el mismo o puedes cambiarselo por uno al azar, yo en lo personal preferiría mantenerselo filtrando posibles incompatibilidades de carácteres y posibles ataques como por ejemplo
Código (php) [Seleccionar]
<?php
$nombrearchivo 
'test../../&$%;,(xx)-_-(xx)[]*\\n.jpg';
$nombrearchivo str_replace(array(
 
"\x00"'*''\\''/'':''?''¿''<''>''|''&'','';'
), ''$nombrearchivo);
echo 
$nombrearchivo;
exit;
?>


Y con respecto a la extensión preferiría utilizar pathinfo() como dijo seth. De todas formas si tu servidor tiene LFI eso ya es otro tema porque ni si quiera necesitas subir un archivo para ejecutar código arbitrario, basta con infectar el log de acceso o cualqueir tipo de log al cual se tengaa acceso aunque sea de solo lectura.

Ahora, para las descargas es otro tema también super interesante para evitar la descarga arbitraria de archivos locales, etc.

Este es mi comentario y crítica constructiva solamente xD el documento está super bueno de todas formas, lo agregaré al post de recopilatorios.

saludos.
#3433
Si esa era la idea y de esa forma lo hago en mysql pero en sqlite la función que retorna el id de error es sqlite_last_error() que debería devolver un integer y de paso le agrego sqlite_error_string() para comprobar el tipo de error pero el error es siempre uno sea cual sea y ese era mi problema, no puedo saber si el error fue una cosa u otra para recién comenzar a hacer el switch o el if elseif.

Pero bueno, no se que sea pero ya adapté casi todo para no utilizar ese tipo de control de errores, simplemente en sqlite utilizaré bases de datos estáticas y en mysql bases de datos dinámicas.

Alter table si lo spoprtaba sqlite pero a partir de la versión 3 y la mayoría de los hostings y app servers utilizan uno o dos como mucho en su versión.
#3434
Es que cuando falla la ip se utiliza la dirección local del servidor donde está localizado el datacenter.
#3435
sirdarckcat y octalh
#3436
ahh Skeletron  que desmadre tienes xD

Lo que encontraste se llama XSS y se ejecuta solamente por el lado del cliente, esto quiere decir que cuando tu le solicitas ver un archivo php al servidor este te responderá con texto plano, o sea texto y nada mas que texto, el explorador toma ese texto y lo transforma en una tabla, en una imagen, en una letra y así, si modificas ese código html no pasará nada porque es tu explorador el que interpreta esas cosas y el servidor no tiene nada que ver, el solo te da el texto y ahi verá lo que hace el explorador con el.

Si quieres forzar una descarga puedes darle en el menú archivo y luego en "guardar como" y podrás guardar el archivo html que te va a generar ese php porque es lo único que lograrás obtener de un servidor.

Si tiene LFI es otro asunto pero el de descargar archivos como lo quieres hacer es imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible, imposible.

Tampoco puedes modificar el código fuente del sitio web a menos que desde un script te permita escribir sobre el, en caso contrario imaginate que si todos los sitios webs que tubieran xss se les pudiera bajar un archivo fuente de php, todo lo que está en internet sería vulnerable y no es así.

Con un xss o lo ejecutas en el explorador o te buscas otro bug pero sacar cosas del servidor no puedes no puedes no puedes no puedes no puedes no puedes no puedes no puedes no puedes.
#3437
Bueno ya lo solucioné, simplemente no le di soporte a la función para que modificara columnas si se está utilizando sqlite xD
#3438
Bueno, sería lo mismo que hacer un select * from schema en mysql pero igual me sirve ;) , yo habia hecho un select * con limit 1 a la tabla y si daba error era porque no existía la tabla :P pero aun así me faltaban los datos del tipo de tabla pero ya con esto me basta.

El alter table no se como lo voy a solucionar :-/ hacer un dump y un import sería una tontera.

Ahora estaba haciendo una prueba para poder hacer un control interno de errores y responder con una acción diferente por cada error pero en todos los errores me devuelve un estado igual a uno:

Código (php) [Seleccionar]
$handle = sqlite_open('x.db', 0666);
$query = 'insert into xxx (id, data, nada) values (\'2\', \'WHK\', \'nono\')';
if($data = sqlite_query($handle, $query)){
while($fila = sqlite_fetch_array($data, SQLITE_ASSOC)){
 $retorno[] = $fila;
}
print_r($retorno);
}else{
echo sqlite_error_string(sqlite_last_error($handle));
}


La idea era que con sqlite_last_error() podría obtener el id de error y predecir si la tabla le falta una columna ya que en ese ejemplo solamente estaba la columna id y data pero me devuelve un uno igual que cualquier error que intento forzar. No se si sea por alguna mala configuración de mi servidor o no se, no quiero hacer doble query para verificar si la columna existe o no aunque despues de eso tendré que ver como hacer para insertarle una nueva columna xDDD
#3439
Hola, estoy haciendo un par de funciones para poder manipular mysql y sqlite desde un solo lado tratando de compatibilizar a ambos y seleccionando el uso de cada uno según el archivo de configuraciones pero tengo un par de problemas ya que como todos saben sqlite no trabaja igual que mysql.

El problema que tengo es justamente ese, tratar de compatibilizar las funciones y necesito encontrar algunos reemplazos.

El primer problema es que no puedo listar tablas con show desde sqlite tal como puedo hacerlo en mysql para poder crear el instalador y verificador de integridad de la base de datos.
En mysql hago esto:
Código (php) [Seleccionar]
$query = "SHOW TABLE STATUS LIKE 'xxx'";

Como puedo encontrar un reemplazo en sqlite?

Otro problema es que en mysql si haces un update a columnas que no existen dentro de una tabla entonces la función te los creará de forma automática evitando tener que cargar desde cero la base de datos nueva y lo hago así:
Código (php) [Seleccionar]
$query = "ALTER TABLE tabla ADD columna tipo";

Pero en Sqlite no existe el "alter" por lo tanto no puedo agregar nuevas columnas y si por x motivo despues del desarrollo de mi aplicacion quiero insertarle una columna mas tendria que pasar toda la tabla a una variable temporal en php o a un archivo serializado y crear la tabla nuevamente con las nuevas columnas y volver los datos guardados a la tabla y es demasiado trabajo para el servidor si es que llega a ser demasiado grande.

Otro problema que tengo aunque no es tan significativo es la busqueda con like %$% ya que las busquedas son cas sensitive no como mysql por lo cual las busquedas por el lado del visitante son demasiado inexactas ya que debería atinarle a las mayusculas.
Habría alguna forma de prevenir este problema tal como lo hace mysql emulando alguna función sin tener que utilizar un select * a toda la base de datos para comparar con strtolower?

Gracias.
#3440
Recopilatorio de Temas del foro de PHP del mes de Noviembre

Desarrollo de tutoriales y proyectos realizado por los usuarios

Micro Tutorial Tratamiento de imagenes en Php (N3FISTO)
http://foro.elhacker.net/php/micro_tutorial_tratamiento_de_imagenes_en_php-t276012.0.html
Clase para el manejo fácil de imagenes con GD

[Tutorial] - Login con ajax . Mysql || Php con clases || Ajax (Hadess_inf)
http://foro.elhacker.net/php/tutorial_login_con_ajax_mysql_php_con_clases_ajax-t259563.0.html


Temas interesantes

Proteger codigo Php (OHK)
http://foro.elhacker.net/php/proteger_codigo_php-t274475.0.html
Diferentes formas de proteger tu script hecho en PHP

[PHP] Codificar archivos con algoritmos reversibles. (DarkItachi)
http://foro.elhacker.net/php/php_codificar_archivos_con_algoritmos_reversibles-t273503.0.html

Script php Backup MySQL (EuroHack)
http://foro.elhacker.net/php/script_php_backup_mysql-t271748.0.html