Bash
Bash登錄腳本奇怪的行為
我目前正在製作一個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.sh
asadmin
using執行腳本時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