Có nghĩa là gì khi giữ cho đường ống mở ra?


9

Tôi đã theo dõi các hướng dẫn cho các bài tập khai thác khác nhau cho các ứng dụng linux. Tôi hiểu nội dung của những điều này đủ tốt, tuy nhiên một số người đề cập đến việc sử dụng con mèo để "giữ cho đường ống mở", ví dụ ở đây .

Ví dụ:

(python2 exploit.py ; cat) | ./programToExploit

"Giữ cho đường ống mở" thực sự có ý nghĩa gì trong thực tế và làm thế nào để đường ống được mở như với lệnh trên?


Tôi cũng luôn tự hỏi điều này.
Wogsland

Câu trả lời:


12

Bạn đã thử à?

Xem sự khác biệt giữa

echo 'ls' | sh -s

( echo 'ls'; cat ) | sh -s

hoặc là,

{ echo 'ls'; cat; } | sh -s

Tại đây, sh -ssẽ bắt đầu một phiên shell đọc các lệnh để thực thi từ đầu vào tiêu chuẩn ( -s).

Trong ví dụ đầu tiên, shell sẽ chỉ thực hiện lsvà thoát (vì không có thêm đầu vào).

Trong ví dụ thứ hai và thứ ba, shell sẽ thực thi lsvà sau đó đợi cho đến khi không còn đầu vào nào nữa. Luồng đầu vào sh -sđược tạo ra đầu tiên bởi echolệnh, nhưng sau đó catđảm nhận vai trò này. Các catquá trình sẽ đọc từ phiên vỏ phụ huynh và vượt qua các lệnh thông qua các đường ống để sh -s. Nếu bạn gõ ls, hoặc bất kỳ lệnh nào khác (sẽ không có dấu nhắc nhập vào), shell sẽ thực thi các lệnh đó.

Điều này sẽ tiếp tục cho đến khi bạn chấm dứt catquá trình bằng cách nhấn Ctrl+Dvào một dòng trống để báo hiệu kết thúc đầu vào.

Tôi tin rằng đó là những gì bạn có nghĩa là "giữ cho đường ống mở".


Vâng, tôi đã thử nó và nó hoạt động như (các) tác giả đã mô tả, tôi hầu như chỉ muốn hiểu lý do tại sao nó hoạt động và tại sao subshell là cần thiết. Câu trả lời của bạn bao gồm điều này, vì vậy cảm ơn.
Plunkspeaker

Đây là một mẹo nhỏ mát mẻ!
Wogsland
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.