Archive for Programación

Varios navegadores son vulnerables a un DoS mediante un código JavaScript

Este fallo se ha encontrado en los siguientes navegadores:
IE7, IE8, Mozilla Firefox, Avant browser, Flock Browser, Safari browser y arapentemente Opera no es vulnerable

El código funciona con document.href y window.open.

Internet Explorer:
Aplicación que no responde: iexplore.exe, versión 8.0.6001.17184,
módulo que no responde hungapp, versión 0.0.0.0, dirección
que no responde 0×00000000.

Flock Browser:

Aplicación que no responde: flock.exe, versión 1.1.1.0,
módulo que no responde hungapp, versión 0.0.0.0, dirección
que no responde 0×00000000.

Mozilla Firefox:
Aplicación que no responde: firefox.exe, versión 1.8.20080.31114,
módulo que no responde hungapp, versión 0.0.0.0, dirección que
no responde 0×00000000.

Avant Browser:
Aplicación que no responde: avant.exe, versión 11.5.0.0,
módulo que no responde hungapp, versión 0.0.0.0,
dirección que no responde 0×00000000.

En Avant Crowser si tenemos la opción de bloquear popups’ el navegador se bloquea en 5 segundos.
Si esta opción no está activada, el navegador detecta que esta aplicación es lenta, pero acaba bloqueandose también.

Safari For windows:
En Safari para Windows [X], si tenemos abierta una ventana con google por ejemplo y abrimos el exploit en una ventana nueva de safari con el exploit, safari abre 5 popups y luego cierra todos los popups y cierra todas las otras ventanas.

También la primera ventana que contiene la página web de Google.

Este fallo de seguridad ha sido descubierto por mi amigo Lostmon juntamente con el equipo Lostmon Group (de google).

Las especificaciones las podeis encontrar en AQUÍ.

Aquí está el exploit: http://usuarios.lycos.es/reyfuss/xss/images/explorer/browser_die.html

Un saludo y si hay dudas no dudeis en ponerlo en los comentarios.

Comments

Programa electoral : para contar votos y qué votos ha tenido en cada barrio

Bueno, aquí viene otro programa hecho en C con su respectivo código fuente.. El programa lo que hace es que pide nombres de partidos politicos y de barrios segun especificados en las constantes del principio del programa y calcula el número de votos totales y el repartimiento de regidores ( hay 10 ).
Si hay algún tipo de duda no dudeis en hacer un comentario.


Licencia:

Creative Commons License


Esta obra está bajo una
licencia de Creative Commons.

/*

Autor: Imydes
Data:11/03/2008
Descripció Programa de les eleccions.

*/

#include

/******************
Definicions
******************/
#define MAXLL 16
#define MAXP 2
#define MAXB 2

/******************
Tipus
******************/
typedef char Tnom[MAXLL];
typedef int Tvots[MAXP][MAXB];
typedef Tnom Tnp[MAXP];
typedef Tnom Tnb[MAXB];

/******************
Capcelera
******************/
void Demanar_noms_partits(Tnp partits);
void Demanar_noms_barris(Tnb barris);
void Demanar_vots(Tnp partits, Tnb barris, Tvots vots);
int buscar_guanyador(Tvots vots);
void Dir_guanyador(Tnp partits, int pguanyador);
int buscar_barri_guanyador(Tvots vots, int guanyador);
void dir_barri_guanyador(Tnb barris, int barriguanyador);
void repartir_regidors(Tvots vots, Tnp partits);

void main(void) {
Tnp partits;
Tnb barris;
Tvots vots;
int guanyador; //aquí guardarem la posició del partit guanyador.
int barriguanyador;

Demanar_noms_partits(partits);

Demanar_noms_barris(barris);

Demanar_vots(partits,barris,vots);

guanyador = buscar_guanyador(vots);

Dir_guanyador(partits, guanyador);

barriguanyador = buscar_barri_guanyador(vots,guanyador);

dir_barri_guanyador(barris,barriguanyador);

repartir_regidors(vots, partits);

}

// Demanar noms dels partits.
void Demanar_noms_partits(Tnp partits) {
int p=0;
while(p < MAXP) {
printf("Insereix el nom del %i partit\n",p+1);
gets(partits[p]);
p++;
}
}

// Demanar nom dels barris.
void Demanar_noms_barris(Tnb barris) {
int b=0;
while(b < MAXB) {
printf("Insereix el nom del %i barri\n",b+1);
gets(barris[b]);
b++;
}
}

// Demanar els bots segons el partit i el barri.
void Demanar_vots(Tnp partits, Tnb barris, Tvots vots) {
int p, b;
for (p = 0; p < MAXP; p++) {
for (b = 0; b < MAXB; b++) {
printf("Diguem el nombre de vots del partit %s al barri %s\n", partits[p], barris[b]);
scanf("%i", &vots[p][b]);
}
}
}

// Cerquem el partit guanyador i retornem la seva posició.
int buscar_guanyador(Tvots vots) {
int p, b, votstemp;
int pguanyador = -1;
int pvotsguanyador = -1;

for (p = 0; p < MAXP; p++) {
for (b = 0; b < MAXB; b++) {
votstemp = vots[p][b];
}
if (votstemp > pvotsguanyador) {
pguanyador = p;
pvotsguanyador = votstemp;
}
}
return pguanyador;
}

// Mostrem un missatge de qui és el guanyador.
void Dir_guanyador(Tnp partits, int pguanyador) {
printf(”Ha guanyat el partit %s\n”, partits[pguanyador]);
}

int buscar_barri_guanyador(Tvots vots, int guanyador) {
int b;
int bguanyador, bvotstemp;
bguanyador = bvotstemp = -1;

for (b=0; b < MAXB; b++) {
if (bvotstemp < vots[guanyador][b]) {
bvotstemp = vots[guanyador][b];
bguanyador = b;
}
}
return bguanyador;
}

// Mostrem el barri guanyador.
void dir_barri_guanyador(Tnb barris, int barriguanyador) {
printf("Ha guanyat el barri %s\n", barris[barriguanyador]);
}

// Repartir regidors
void repartir_regidors(Tvots vots, Tnp partits) {
int totalvots,votspartittemp;
int npartits, barris;
int votspartit[MAXP];
totalvots = 0;

for (npartits = 0; npartits < MAXP; npartits++) {
votspartittemp = 0;

for (barris = 0; barris < MAXB; barris++) {
votspartittemp = votspartittemp + vots[npartits][barris];
}

totalvots = totalvots + votspartittemp;
votspartit[npartits] = votspartittemp;
}
//a partir d'aqui esta malament
for (npartits = 0; npartits < MAXP; npartits++) {
printf("El partit %s ha tret un total de %f regidors.\n", partits[npartits], ((float)votspartit[npartits]/(float)totalvots)*10);
}
}

En teoria si tienes las librerias de ANSI C instaladas y un compilador de C (como gcc en *NUX y Visual C++ en Windows) debería funcionar perfectamente.

Comments

Codigo fuente de mi programa: Juego de la Vida

Bueno, como seguramente ya sabreis mi objetivo es ser un programador y estoy estudiando eso, informática y en mi blog espero ir compartiendo los programas que escriba.

Generalmente use C para escribir los programas aunque no descarto algunos otros lenguajes como PHP o Python (o quizás perl).

Aquí va el codigo fuente de un juego de la vida (cualquier duda podeis dejar un comentario y lo responderé lo más rápido posible):


Licencia:

Creative Commons License


Esta obra está bajo una
licencia de Creative Commons.

WordPress no me permite poner todo el código del programa así que adjunto el fichero .c que podeis descargarlo dándole click aquí:

joc de la vida.c
/*

Autor: Imydes
Descripció: Joc de la vida
Data: 21/02/2008
*/

#include

/*****************************
* Definicions *
****************************/
#define MAX_COOR 7

/*****************************
* Tipus *
*****************************/

typedef int Tterreny[MAX_COOR][MAX_COOR];

/*****************************
* Capcelera de les funcions *
******************************/

void preparar_terreny(Tterreny &original, Tterreny &temporal);
void inserir_habitants(Tterreny &original);
void mostrar_terreny(Tterreny &original);
int obtenir_generacions(void);
void resoldre_terreny(int generacions, Tterreny &original, Tterreny &temporal);
void copiar_terreny(Tterreny &original,Tterreny &temporal);

int main() {

int generacions;
Tterreny original, temporal;

printf(”Introduce los habitantes mediante coordenadas, la tabla es de 5×5\n”);

preparar_terreny(original, temporal);

inserir_habitants(original);

mostrar_terreny(original);

generacions = obtenir_generacions();

resoldre_terreny(generacions, original, temporal);

return 0;
}

/* Copiar Terreny */
void copiar_terreny(Tterreny &original,Tterreny &temporal) {
int fila, col;
for (fila = 1; fila < MAX_COOR-1;fila++)
for (col = 1; col < MAX_COOR-1; col++)
original[fila][col] = temporal[fila][col];
}

/* Gestió d'habitants del terreny */
void resoldre_terreny(int generacions, Tterreny &original, Tterreny &temporal) {
int g, fila, col;
int contador;
for(g=0;g printf("GENERACION %i\n",g+1);
for (fila=1;fila for (col=1;col contador = 0;
contador = original[fila-1][col-1]+original[fila-1][col]+original[fila-1][col+1];
contador = contador+original[fila][col-1]+original[fila][col+1];
contador = contador+original[fila+1][col-1]+original[fila+1][col]+original[fila+1][col+1];

/* Decidim si creem o eliminem un habitant */

if (original[fila][col] == 1) {
if (contador == 2 || contador == 2 ) {
temporal[fila][col] = 1;
}
else {
temporal[fila][col] = 0;
}
}
else {
if (contador == 3) temporal[fila][col] = 1;
else temporal[fila][col] = 0;
}
printf("%i",temporal[fila][col]);
}
printf("\n");
}
copiar_terreny(original,temporal);
}
}

/* Preparació del terreny */
void preparar_terreny(Tterreny &original, Tterreny &temporal) {
int fila, col;
for (fila=0;fila for (col=0;col original[fila][col] = 0;
temporal[fila][col] = 0;
}
}
/* Sistema d'insersió d'habitants */
void inserir_habitants(Tterreny &original) {
int fila, col;
do {
scanf("%i",&fila);
scanf("%i",&col);

if (fila > 0 && fila < MAX_COOR-1 && col > 0 && col < MAX_COOR-1)
if (original[fila][col] == 1)
printf("Ya tienes un habitante en la casilla %i:%i\n",fila,col);
else
original[fila][col] = 1;
else
if (fila != 0 || col != 0) printf("El terreno es de 1x5 x 1x5\n");
}while(fila != 0 || col != 0);
}

/* Obtenim el nombre de generacions */
int obtenir_generacions(void) {

int generacions;
printf("Dime el numero de generacions que quieres que haga (valor positivo)\n");

do {
scanf("%i",&generacions);
printf("\n");
}while(generacions < 1);
return generacions;
}

/* Mostrem el terreny amb els habitants */
void mostrar_terreny(Tterreny &original) {

int fila, col;

for (fila=1;fila for (col=1;col printf("%i",original[fila][col]);
printf("\n");
}
}

En teoria si tienes las librerias de ANSI C instaladas y un compilador de C (como gcc en *NUX y Visual C++ en Windows) debería funcionar perfectamente.

Un saludo y espero que os haya gustado!!

Comments (5)