Bash

Bash登錄腳本奇怪的行為

  • October 5, 2020

我目前正在製作一個honeypot,一旦他們通過 SSH 成功登錄,它將記錄所有使用者輸入。

它是這樣工作的:我將我的honeypot使用者admin的預設 shell 設置為 bash 腳本:

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

spawner.sh腳本將繼續並啟動一個except腳本並使用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"

以下是前幾行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

當我使用./template.shas adminusing執行腳本時bash,腳本執行得非常好。但是,當我使用 登錄時su,會發生這種情況:

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
...

為什麼我的 bash 腳本不能與設置為它的使用者 shell 一起工作?我的腳本中沒有遞歸呼叫,該script命令應該是阻塞的!

以防萬一有人擔心,這台機器沒有傳出網路連接。它只能接收 SSH 連接。是的,我知道使用者可以擺脫這種情況。這是在虛擬機中執行的。

我認為您在某處使用沒有shebang的腳本。

看到這個答案

如果 execl() 函式由於與

$$ ENOEXEC $$在 POSIX.1-2008 的系統介面卷中定義的錯誤,shell 應執行一個命令,該命令相當於呼叫一個 shell,將搜尋產生的路徑名作為其第一個操作數,並將任何剩餘的參數傳遞給新的 shell,除了新 shell 中“$0”的值可以設置為命令名。如果執行檔不是文本文件,shell 可能會繞過此命令執行。在這種情況下,它應寫入錯誤消息,並應返回退出狀態 126。

在您的spawner.sh添加echo "$@"中獲得更多提示。

好的,所以答案更複雜,但這應該會有所幫助。在spawner.sh頂部添加這個:

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

引用自:https://unix.stackexchange.com/questions/613033