在靶機中遇到一個shell注入的腳本過段時間會有該靶機的博客發出 因爲暫時不能發出
什麼是OS 命令注入——
操作系統命令注入(也稱爲shell注入)是一個Web安全漏洞,允許攻擊者在運行應用程序的服務器上執行任意操作系統(OS)命令,並且通常會完全破壞應用程序及其所有數據。通常,攻擊者可以利用操作系統命令注入漏洞來破壞託管基礎架構的其他部分,利用信任關係將攻擊轉移到組織內的其他系統。
hackthebox_jarvis 靶機中的問題
通常滲透過程中拿到的shell 都是較低權限 之後會進行提權 以獲得目標或者可以更方便獲得目標
如果有的目標服務器上可以執行一些命令的腳本或者程序,就有可能會造成權限提升,腳本文件的屬性或者其他地方的配置有缺陷
列如 sudo -l 查看到可以不用密碼的用戶 操作目錄和執行的程序等
詳細可以參考 visudo 文件
腳本如果可以執行一些命令如:ping
若採用白名單
通常會有下面一些符號進行限制
邏輯與邏輯或
&& ||
a_command || b_command
執行順序如果 a 執行成功 || 成立 b不會執行
相反b 會執行 具體要看a 的返回值
示例
#include<stdio.h>
int main()
{
printf("test");
return 1;
}
上面這段C 設置了返回值爲1Linux中0表示正常執行 編譯並使用||
./a.out || echo "hello"
testhello
結果是這一個 前面的a.out 正常執行但是返回值爲1所以爲假之後執行echo "test"
&& 邏輯與類似但是如果前面爲假則後面的命令不會執行
如果是在命令注入中則是 ping dada || whoami
會使前面錯誤執行到達whoami
管道符號後臺執行
& |
& 後臺執行
如果命令由控制操作符&終止,則shell在子shell中在後臺執行命令。shell不等待命令完成,返回狀態爲0。
ping 8.8.8.8 & whoami
會使得ping命令進入後臺執行 同時獲得一個PID 通常將程序放入後臺執行會和nohup 搭配使用
|管道命令操作符
它僅能處理經由前面一個指令傳出的正確輸出信息,也就是 standard output 的信息,對於 stdandard
error 信息沒有直接處理能力。然後,傳遞給下一個命令,作爲標準的輸入 standard input.
常用的如
ls ~|gerp filename 等
可以使得兩個命令一起使用
; 單行區分
如果命令在單行時作爲區分代碼塊
可以將腳本寫在一行中
ping 8.8.8.8 ;whoami
內聯執行
` $
反引號或美元字符在原始命令中執行注入命令的內聯執行:
在學習shell腳本時反引號可以使一個字符串作爲一條命令執行
如:
echo "hello `whoami`"
需要注意的是 反引號內的轉義子符不會起作用
https://blog.csdn.net/apache0554/article/details/47055827 鏈接是`` 與$ 的區別
類似$(command)
ping 8.8.8.8 $(whoami)
如果是使用白名單則可以檢查是否過濾不嚴格或者檢查是否可以由其他方式越過白名單如使用的語言函數等
到目前爲止,防止操作系統命令注入漏洞的最有效方法是永遠不要從應用程序層代碼調用操作系統命令。幾乎在每種情況下,都有使用更安全的平臺API實現所需功能的替代方法。
如果認爲使用用戶提供的輸入調用OS命令是不可避免的,則必須執行強輸入驗證。有效驗證的一些示例包括:
- 驗證允許值的白名單。
- 驗證輸入是否爲數字。
- 驗證輸入僅包含字母數字字符,不包含其他語法或空格。
可以參考鏈接https://portswigger.net/web-security/os-command-injection