Bash đăng nhập script hành vi lạ

Oct 06 2020

Tôi hiện đang tạo một honeypot sẽ ghi lại tất cả thông tin người dùng nhập khi họ đăng nhập thành công thông qua SSH.

Đây là cách nó hoạt động: Tôi adminđặt shell mặc định của người dùng honeypot của mình thành tập lệnh bash:

admin:x:1001:1001::/home/admin:/home/admin/HoneyPot/spawner.sh

Tập spawner.shlệnh sẽ tiếp tục và khởi chạy một excepttập lệnh và ghi lại đầu ra bằng cách sử dụng script.

#!/bin/bash
cd /home/admin/HoneyPot/template/

pwd
script -c "./script.exp" -t 2> timing.log -a output.session #start recording session, execute except script
echo "we should not get here"

Đây là vài dòng đầu tiên của script.exp:

#!/usr/bin/expect -f
#
# This Expect script was generated by autoexpect on Mon Oct  5 13:55:35 
# boilerplate comments and code:

set force_conservative 0  ;# set to 1 to force conservative mode even if
              ;# script wasn't run conservatively originally
if {$force_conservative} { set send_slow {1 .1} proc send {ignore arg} { sleep .1 exp_send -s -- $arg
    }
}

# start of my code

set timeout -1
spawn emulator #emulator is a simh emulator executable. not a shell script.
...
interact

Khi tôi chạy kịch bản sử dụng ./template.shnhư adminsử dụng bash, kịch bản chạy hoàn toàn tốt đẹp. Tuy nhiên, khi tôi đăng nhập bằng cách sử dụng su, điều này xảy ra:

austin@ubuntu:~$ su admin
Password: 
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
...

Tại sao tập lệnh bash của tôi không hoạt động với trình bao của người dùng được đặt thành nó? Không có lệnh gọi đệ quy nào bên trong tập lệnh của tôi và scriptlệnh sẽ bị chặn!

Và đề phòng bất kỳ ai lo lắng, chiếc máy này không có kết nối mạng đi. Nó chỉ có thể nhận các kết nối SSH. Có, tôi biết rằng người dùng có thể thoát khỏi điều này. Điều này đang được chạy trong một máy ảo.

Trả lời

1 laktak Oct 06 2020 at 01:35

Tôi nghĩ rằng bạn đang sử dụng một script mà không có shebang ở đâu đó.

Xem câu trả lời này :

Nếu hàm executel () không thành công do lỗi tương đương với lỗi [ENOEXEC] được xác định trong phần Giao diện hệ thống của POSIX.1-2008, trình bao sẽ thực thi một lệnh tương đương với việc trình bao được gọi với tên đường dẫn do tìm kiếm là toán hạng đầu tiên của nó, với bất kỳ đối số còn lại nào được truyền cho trình bao mới, ngoại trừ giá trị "$ 0" trong trình bao mới có thể được đặt thành tên lệnh. Nếu tệp thực thi không phải là tệp văn bản, trình bao có thể bỏ qua việc thực thi lệnh này. Trong trường hợp này, nó sẽ viết một thông báo lỗi và sẽ trả về trạng thái thoát là 126.

trong spawner.shphần bổ sung của bạn echo "$@"để có thêm gợi ý.

OK, vì vậy câu trả lời phức tạp hơn nhưng điều này sẽ hữu ích. Trong spawner.shthêm này lên trên cùng:

if [[ $1 == -c ]]; then exec bash "$@"
fi