|
Bugtraq
mailing list archives
Smashing the stack on a DEC Alpha
From: lamontg () hitl washington edu (Lamont Granquist)
Date: Thu, 16 Jan 1997 14:39:37 -0800
I've been trying to impliment Aleph1's stack-smashing attack, but on a DEC
Alpha, and have run into a bit of a glitch here. First, the Alpha appears
to stick the return address lower than the dynamic variables in the frame
-- okay, so you have to overwrite the return address of the previous
function such that it executes out of the environment. Not a major
problem. However, I'm trying to work my way up to executing code in the
dataspace and I'm running into a bit of a problem, e.g:
void main(void) {
int *ad1;
char shellcode[] = "\x01\x80\xfa\x6b"; /* ret */
__asm__("
addq $15,24,$8
stq $8,16($15)
");
printf("%x\n", &ad1);
printf("%x\n", ad1);
printf("%x\n", &shellcode);
printf("%x\n", *ad1);
__asm__("
addq $15,24,$21
jsr $26,($21)
");
printf("jsr worked\n");
}
That works correctly in that ad1 == &shellcode and *ad1 = 0x6bfa8001, but
it seems that it croaks when it attempts to execute the jsr into the
stack:
./testsc
1ffff6c0
1ffff6c8
1ffff6c8
6bfa8001
Segmentation fault (core dumped)
I haven't tried throwing the code into the environment and trying to
execute it there, but I can't see how that would make much of a
difference over the stack...
--
Lamont Granquist <lamontg () hitl washington edu> (206)616-1469 fax:(206)543-5380
Human Interface Technology Lab. University of Washington. Seattle, WA
PGP pubkey: finger lamontg () hitl washington edu
By Date
By Thread
Current thread:
|