Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Viết shell code nhưng không thành công, làm thế nào?

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    18

    Mặc định Viết shell code nhưng không thành công, làm thế nào?

    Mình đang test thử cái lỗi Buffer Overflow trên linux mà chạy shell code không được:

    Chương trình mình đơn giản như sau :
    C Code:
    1. #include <stdio.h>
    2. void notcall()
    3. {
    4. printf("execute ok");
    5. }
    6.  
    7. int main(){
    8. char buffer[6];
    9. gets(buffer);
    10. puts(buffer);
    11. return 0;
    12. }
    dịch ra file asm:

    g++ a.cpp -o asm

    Nếu mình nhập chuỗi lớn cho buffer thì dữ liệu tràn khỏi bộ nhớ
    khi dùng gdb disassemble hàm notcall
    gdb disassemble notcall :
    Debug Code:
    1. 0x080484ea <_Z7notcallv+0>:     push   %ebp
    2. 0x080484eb <_Z7notcallv+1>:     mov    %esp,%ebp
    3. 0x080484ed <_Z7notcallv+3>:     sub    $0x8,%esp
    4. 0x080484f0 <_Z7notcallv+6>:     movl   $0x80485e0,(%esp)
    5. 0x080484f7 <_Z7notcallv+13>:    call   0x80483b0 <printf@plt>
    6. 0x080484fc <_Z7notcallv+18>:    mov    $0x0,%eax
    7. 0x08048501 <_Z7notcallv+23>:    leave
    8. 0x08048502 <_Z7notcallv+24>:    ret
    trong linux có lệnh printf để in ra màn hình.trong option của lệnh này có xHH để xuất ra dạng HEX.
    0x080484ea là địa chỉ đầu 1 hàm.
    Nhưng em không chạy được hàm notcall bằng cách viết :

    Code:
    printf "AKJHFAKHFKAGFAKF\xea\x84\x04\x08" | ./asm
    nhưng nó không chạy được hàm notcall :(

    Theo tớ biết thì HDH thì có 2 cách quản lý bộ nhớ là phân segment và paging.Các Cpu đời cũ dùng các
    thanh ghi 16bit thì phải phân segment rồi(do đó mới có các thanh ghi segment),còn các CPU thế hệ mới(32bit-64bit) thì trên linux dùng kiểu nào,trên windows dùng kiểu nào?hay là dùng cả 2 cái theo từng trường hợp cụ thể :-?

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Có phải bạn định overwrite return address không?

    Cách thức để tiến hành inject code vào bạn cần hiểu cơ chế hoạt động của stack trước. Do stack có cơ chế quản lý bộ nhớ từ thấp đến cao, khi xảy ra Buffer Overflow, return address có khả năng được thay thế bằng một địa chỉ khác. Lý do đơn giản để hiểu là: return address cũng được lưu trên stack ở địa chỉ cao hơn các biến local.

    Dựa vào đặc điểm trên, bạn có thể tính toán stack size, để xác định return address ở tại địa chỉ nào bằng sử dụng gdb, ta thay thế địa chỉ đó bằng địa chỉ khác (cơ bản nhất là trỏ tới đầu buffer còn phần dữ liệu giữa đầu buffer tới return address sẽ thay bằng các đoạn mã thực hiện các công việc bạn muốn, hoặc trỏ tới hàm nocall) <== đó chính là cách thức exploit.

    Như vậy, cách bạn suy nghĩ không hề có căn bản, và đương nhiên là nó sẽ không chạy. Và cách exploit cũng có thể có nhiều dạng...
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Các đề tài tương tự

  1. Viết chương trình bài trắc nghiệm bằng Shell
    Gửi bởi bluelightning trong diễn đàn Thắc mắc lập trình shell Linux
    Trả lời: 0
    Bài viết cuối: 09-07-2013, 05:14 PM
  2. Mã nguồn C Lỗi định viết con shell nhưng bị lỗi segment fault
    Gửi bởi panfider1 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 6
    Bài viết cuối: 29-03-2012, 01:58 PM
  3. Viết chương trình shell tìm thư mục, nếu rổng in ra thông báo
    Gửi bởi thanhtuann trong diễn đàn Thắc mắc lập trình shell Linux
    Trả lời: 1
    Bài viết cuối: 17-08-2011, 11:34 AM
  4. Algorithm Viết code thời khóa biểu viết trên Window Form C# như thế nào?
    Gửi bởi hocphp_1998 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 12-04-2011, 11:10 PM
  5. Hiểu Cách Viết 1 Hàm Shell Programing ?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình shell Linux
    Trả lời: 1
    Bài viết cuối: 31-03-2011, 11:00 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn