HTB練習紀錄 — Payload
回答[Day 11]
if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
/usr/bin/echo "Database service is not running. Starting it..."
./initdb.sh 2>/dev/null
else
/usr/bin/echo "Database service is running."
fi
exit 0
嘗試分解問題
這邊請GPT舉個例子
情境:自動化數據庫服務啟動
ChatGPT
假設在一個 Linux 系統上運行一個應用程序,它需要在啟動時確認數據庫服務是否正在運行。如果數據庫服務沒有運行,則腳本會啟動數據庫初始化腳本 initdb.sh。這樣可以確保數據庫在應用程序啟動之前是準備好的。
目前有一個名為 app_startup.sh 的啟動腳本,這個腳本在每次啟動應用程序之前會檢查數據庫服務是否已經啟動。如果數據庫服務未啟動,腳本會啟動數據庫初始化腳本 initdb.sh 來初始化數據庫。這樣可以確保應用程序在啟動時能夠正常連接到數據庫。
#!/bin/bash
# 檢查 initdb.sh 是否正在運行
if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
/usr/bin/echo "Database service is not running. Starting it..."
# 啟動數據庫初始化腳本
./initdb.sh 2>/dev/null
else
/usr/bin/echo "Database service is running."
fi
# 啟動應用程序
/usr/bin/echo "Starting application..."
# 替換下面的命令為實際啟動應用程序的命令
./start_application.sh
exit 0
這段程式碼在確保系統和應用程序可以正常啟動和運行時非常有用,特別是在生產環境中,自動化和確保服務正常運行是非常重要的。
結論
根據ChatGPT可知,執行syscheck必定會呼叫initdb.sh本身沒問題,這確保系統和應用程序可以正常啟動和運行。
注意下方程式碼,這是執行initdb.sh的關鍵。可以發現路徑是 ./
,有請GPT簡單介紹
./initdb.sh 2>/dev/null
ChatGPT
./
的作用
./
用於指示當前工作目錄。當你在命令行中使用 ./
來執行某個文件時,你是在告訴系統這個文件位於當前目錄下。例如:./script.sh
(這條命令告訴系統去當前目錄查找並執行名為 script.sh 的腳本。)
./my_program
(如果 my_program 在當前目錄下,這條命令會執行它,即使它不在系統的 PATH 中。)
./
常見誤區
./
執行的文件不存在或不可執行,系統會返回錯誤。例如:./non_existent_file
(如果 non_existent_file 不存在,會顯示「沒有此檔案或目錄」的錯誤信息。)
./
執行時會顯示「權限被拒絕」的錯誤信息。可以使用 chmod 命令添加執行權限:chmod +x ./file.sh
我的觀點
剛剛結論有提到,執行syscheck必定會呼叫initdb.sh可以確保系統和應用程序可以正常啟動和運行。但是有個前提,initdb.sh必須是事前寫好,儲存在固定檔案路徑的指令檔案。
舉個例子
今天爺爺告知大家自己有立一份遺囑(initdb.sh)放在家中(./initdb.sh),但是直到過世都沒告訴任何人遺囑的具體位置。
現在有繼承人立了一份假遺囑(攻擊者建立的initdb.sh),並告知所有人是在家中找到的遺囑,在找不到其他遺囑(攻擊者建立的initdb.sh)的情況下,遺囑就這麼替換掉了。嘿嘿,來、騙、偷襲