buffer overflow.pdf
(
688 KB
)
Pobierz
Microsoft Word - real.doc
Bufer overflow
by Adam Zabrocki (pi3 -
pi3ki31ny@wp.pl
)
(
http://www.pi3.int.pl
)
:VW
S
Û à
ƪ
â
äåæ
Ł
ç
غŒ
Ÿìä
D
à
D
í îðïâ
æ-
ìîŸå
Œ-
òôó
$ı
ó
D
æöâ
æV
ä
D
à
$
÷
Bł‚
ï
Dø
œ/
ì
Dß
Æ
üó
Dæ-ı(
ý
iæ-
â
í
y
å
þ®ÿ
1
à÷
î
B
ä
D
à
$
÷
ł
ò
tŒi
þ®ÿ ï
Dø
B
ì
ÿ
‘ß
æ+
à í
ı
iŒ
"!#
!#
$
%
&’
(
)
*+%&#’,’,
-
(.
/’,0$
2143
56
0
87(
!9!
2:";
<9=6
$>?
"@
:A!#
,BDCE@):
!
)
w biblioteczce ANSI funkc
BD
=#F(:HG
)
I!
$
@J
)
K(
8
BLCK
(
M4N8
ON8
"C P(QRTS
U
VW X
Y
Z
[]\LW ^
U
W
_)P
‘aEb
X(c
YOd(eIU
strcpy(), strcat(), sprintf(), vsprintf(), gets()
. Niestety
bezpieczne funkcje takie jak
fgets()
, oraz
fgetc() czy getc() i getchar()
cHb kqaU
P(lsrJS
URKUV
UR W
t
zcze
jach z rodziny
*printf()
(
syslog()
tez).
»#'$»#'$‡,• ‚/¯ «‹
Ö
†
¯
H„"«”
¸#¤
‡
Ô
›#
°
‚
„†
¯
† ‹m‚D'$
Ñ‘
›
¯
,¯ «—#¤
'$ˇ «
×
ƒ•D†
”
“I«
”
°
(
¯
¯
«
œ
‚)„†8
×
y»#'$‡
¯ “y«”#¤
‡
Ô
›
°
(›
¸¤$†
¯
,»
‡
Ô
—
¨+
Ñ
8˘
«?„"«
›¸
buffer overflow (BO).
2. Teoria
ØÚÙ
ÛÜÞÝß
)
à
Ý
8Æ
â
ª$
Ùä
8
åçæ
LŁ ØŒ
â
à
º
ì
#Ł¡
íÔÜ
Ø#
à
ßÝÜ
î
)
ï
HŁ
ä
˙
Û
ð
Aæ
ò
ó
¿
ô
"
ó
ı
ö
Œ
÷
]łpøA
ô
œ
ß
ýü
#
þ
8
ò
þ
¡
ÿ
(ß
œ
2œ
ô
+œ ß¿
ôó
ı
ö
buffer
overflow -
ı
"œ
üö
,
ÿ
)œ
œ
Dı
ô
ü
œ
ò
ô
)
ÿ
ö
!"
Dœ
ß
#
ô
&
ÿ
’
œ
(
ÿ
Kœ
ó
þ
1
243+561
783
9
:
;
<=2
>
1%?+;
<A@B2C>
?
DFE
@G2
>
?
DH:I24?+5.@G2
J.KL@G2
>
?
DH:=M
3N"OQP%;
OSR>
31
strefy stosu. Dwie pierwsze strefy praktycznie nie m
ı
œ
!*
"
þ
+)%
,.-/
)
ÿ
)
ß
Aœ8
ò
œ
y sam jest abstrakcyjnym typem
danych. Stos jest typu LIFO (Last In First Out).
^
À
ÑØ
#ˆ
À×
C
Ó
.
Ù
Q
Â
*
Ó
.
Ù
(Æ"˙/
É
˚¸0
à
L˝
Ñ
Â
p˘
šÖß
h˘c
Â
V˘\
Â
+
Ñ
ÂÓ
A
Â
%
ÕÂ
Ö
f
Â
+
Ó×
H
à
S˜"¯%
À
6˝
˜¢
×
C
â
Ö
ª
ÙÑ
˝%
Ù
C
Â
fˆ
Â
+
Ñß
Ü
ß
c˘c
Â
o
À
=
×
H
Â
Ó
A
ÂÕ
Q
Â
+
Ö
*
ÂÓו
ˆG
À
˝+
Ö
"
Ù
Q˜+ˆ
stosu. Rysunek 1 opisuje operacje PUSH, a rysunek 2 opisuje operacje POP.
ä
—
å
.
æ
ç
ŁXØŒLº%
ìí”î
Œ
ïð
ç
hæcØe
îò
XØ
ó
G
ï
+
ô
pæcıV
í
d
ö÷
ł¢
ì
ø—œ.ß
ü
ýþÿ
ÿ
ü
c
þ
þ
ı
)
ÿ
)
-
ò÷
S
ò
7
ï
u
í
œG
÷
KßW
ü
K
ý
8
ó
þ
?
ÿîö
îí
^
î
Y
ð
/
þ
?
ò
t
ó
?
í
º
ï
M
ö
]
íó
ó
?
í
?
ö
¥
ì
8
òó
í
s
ó
#
ö
Y
í
º
7
ì
/
ó
?
í
_
ì
8
ð
=
ð
ì
OœDæC
ð÷
Sº
íó
#
ö
Y
ò
÷
^º
í
7
ì
/
ó
ö
Y
í
S
î
[
÷
S
ò
7
ï
W
þ
ö
œ*
ð
ý
:
ô
alnych jak i
o
ö
Y
í
]
íþ
ðï
ö
D
ò
Jœ1
ð
/
÷
Oæ
ý
– wskazuj
lA-
o
,
/?"H-;o
‘
,
(0-
x9
/*:c
=
m
7
BA
Y
7^
#)c)#a
=/
X
e
t
BRmDs96 S=
‡
|p
A
H-D
9
,
Q0
1?J a
:9=s0-
,
Q
s8
ˆ
e
D/=/
V
=DB=03A
V+
‰
p
BHV9H0C2
zwany jest epilogiem funkcji.
Listing 1. prolog.c
void funkcja(in a1, int a2, int a3) {
char buf1[5];
char buf2[10];
}
int main() {
funkcja(1,2,3);
}
^CH03?
-
^>.
>
40
=B
8rH0C2e
„
3
x
x
B?J.-F
B
=
# cc -S -o prolog.s prolog.c
# cat prolog.s
pushl $3
pushl $2
pushl $1
call funkcja
- Instruction Pointer). Jest on potrzebny do tego, by procesor podczas, gdy
”
¿]
¾
s`"
Â
Gˆ<˜-ˆ¯,˘Q˙B¨C˜-¿6
É
<»<˚
¸`
˜
˚
»7ˆ
À
pushl %ebp
movl %esp,%ebp
subl $20,%esp
Ô
/»4ˆ/˜
˚
š
˘(
É
BÆW
Ò
ä
‘
Ú
h
àÝ—å
a
ä
w—
Ù
o˜-ˆ¯
˘(˙B¨C˜-¿
É
aktualny adres SP jest kopiowany do EBP (nazwiemy go SFP), a sam SP jest przesuwany o rozmiar
y -
μ6
ì
B
í
Yºq
î
m
ï
K
ð
æ7
ì
s
òóô
Qı3
ö
,
÷
æ
ƒ
ł
ì
î
møBœ
íü
ßC
ö
øBœ
ß-
ì
ý
3
ó
C
þ
@æeœ
ł
ð
-
î
xºk
ÿ
ì
m
ô
œ
[
þ
-ºh
ô
-
!
"$#&%(’*),+-"$.&/’
0
1324 6587:9<;=#&%>
?)A@B0C’
DFEA%
øs
ì
6
÷
/œ@
ô
(
ð
ð
C
ý
Wß
öð
Œ
÷
î
:
ðöì
)
ì
/
ó
Sæ7º
sŒ
•
æ
Q
þ
łC
ó
Œ
fº
î
ý
3æ4
ì
C
þ
y
ð
3
ö
pœ
SP jest przesuwany o 20 bajtów (subl $20,%esp). Stos
o
P
gpOq[Xb
r-sItBuPXYKT
ePCO>R3o
N
TQv[HN
nBM?TQwYKPCdxQ‘PCdyo
P
rysunku 3.
widzimy na listingu 2.
Listing 2. victim1.c
int main(int argc, char *argv[]) {
char bufor[100];
if (argv[1]==0) {
printf("Ussage %s <argument>\n",argv[0]);
exit(-1);
}
strcpy(bufor,argv[1]);
return 0;
}
który
¥
ƒ$§¤ƒ
‹
'
“V«|‹G›>
®
C
¯
°
“
–&†>‡
'
ƒI
®
w·-
µ
–“&
µ
‡
¶
°
•⁄·-
µ
•B‚-„-”$‡B»&
°
…‹
eO
b6Q
eOGT?
„
– listing 3.
€
root@localhost:~# gdb victim1
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-slackware-linux"...
(gdb) r `perl -e 'print "A"x108'` // komenda “r” oznacza “run”
‰B
¾
C¿
À
F`
Â
ˆ
Â
‰B˜
¯
˘y`F˙⁄¨-ˆJ¯-
É
ˆ˚
˘
‰
¸˚⁄¨
¯>
Ì
*`
˝˛
`perl-e
'print "A"x108
'`
wynosi on
0x41414141
P5\].I(V.I
@
C
:
$%7&
.^
<?F
D
(2
_N;
‘
D
4
A
wynosi
65
, a co za tym idzie w systemie
szesnastkowym wynosi ona 0x41
P2aZ
4&Z^
2+b
-
/bin/sh
O,>
(=02
4
|05v7}4
EU
(2
7
58~
@0
702
E&!
&S&
d
<
?L4%7
I
./
a
ustawiony atrybunat
SUID
*b
D
%7(
‚
(
e
8D
ƒ
2%
X78D
:
„
%
…
0
e8;7V
Y%
5.I
@
V
<
)(
27
J.T{
!N
N:V
†
e
‡
D
przed naszym shellcodem bardz
%7
+!
™
&(
*Z
D
%
("
%
(
&
d
<
<
Y(
Œ
ntoZa
’
Y.T54&
^ !
d
51
[
j.
D
M
2
M^?
[ instrukcje NOP ] [ nasz shellcode ] [ zmieniony RET ]
ret=0xc0000000-strlen(shellcode)-strlen(program)-4;
0xc0000000
P7\302
M&(
>
N
<+!
V
[
$
Db70
I!
M
•
(5
2N<
%2p
Jh
š
//
ˇ6`
—x¨
¯-
Ñ
˚˛‘˝w
Ì
¯
ˆ˘˚G
À‹Ì
*`F˝w¨
˚
ˆJ˚C˘y˝C
Ò
Iˆ¿i
ÓŠ
˚CˆJ
ÉÂ
-˘y˝
Ì
-
Ò
F¿
ÔÕ
Starting program:
/root/victim1 `perl -e 'print "A"x108'`
Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) info reg eip // info pokazoje informacje o czym chcemy reg to skrut od
// registers – czyli rejestry a eip to nazwa interesujacego nas
// rejestru...
eip 0x41414141 0x41414141
(gdb) quit // wychodzimy z programu...
Plik z chomika:
dutchmasters
Inne pliki z tego folderu:
Pieczatki zwolnienia i legitymacje.rar
(18498 KB)
Hakin9 filmy instruktażowe.zip
(22908 KB)
Pakiet v2.rar
(18 KB)
Hakerzy.zip
(5183 KB)
Rapidshare - Stałe IP (OMIJANIE LIMITÓW).doc
(1061 KB)
Inne foldery tego chomika:
►pdf informatyka
KURSY
Linux Magazine
Microsoft Certyficate
Place - informatyka
Zgłoś jeśli
naruszono regulamin