AppScan-文件參數Shell命令注入


文件參數Shell命令注入

1.問題信息

可能會在web服務器上運行遠程命令,未對用戶輸入正確執行危險字符清理,存在操作系統命令注入的至少以下兩種子類型:

  • 應用程序計划使用外部提供的輸入作為參數,執行受其控制的單個固定程序。例如,使用nslookup命令探測DNS域傳送漏洞,appscan工具官方描述:程序可能使用 system("nslookup [HOSTNAME]") 來運行 nslookup,並允許用戶提供 HOSTNAME 以用作參數。攻擊者無法阻止 nslookup 執行。但是,如果程序不從 HOSTNAME 參數中除去命令分隔符,攻擊者就可以將分隔符放置到參數中,從而能夠在 nslookup 完成執行后執行其自己的程序。
  • 應用程序接受輸入,將完整命令重定向至操作系統。appscan工具官方描述:例如,程序可能使用“exec([COMMAND])”來執行用戶提供的 [COMMAND]。如果 COMMAND 受到攻擊者的控制,那么攻擊者可以執行任意命令或程序。值得注意的是,如果命令是使用 exec() 和 CreateProcess() 之類的函數執行的,攻擊者可能無法將多個命令組合到同一行中。這些變體代表兩種不同類型的編程錯誤。在第一個變體中,程序員清楚地表明來自不可信方的輸入將作為要執行的命令中的部分參數。在第二個變體中,程序員不希望命令可供任何不可信方訪問,但未考慮到惡意攻擊者可提供輸入的所有方式。示例
    • open(FILE,"/bin/ls") - 打開文件 /bin/ls
    • open(FILE,"/bin/ls|") - 運行文件 /bin/ls

2.測試響應舉例:

POST /reqxml HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Referer: http://XXX/dist/src/market-data-analysis/index.html
Cookie: H5Token=M0T5I0wcM1T5I0w5N2j0E5x2McD7Mb10N9T4Eaz8N6z1kbz2M2jbYawdM7jdM9z2
Connection: keep-alive
Host: XXX:7781
X-Requested-With: XMLHttpRequest
Content-Length: 205
tztWebdataEncrypt: 1
Accept: */*
Origin: http://XXX:7781
Accept-Language: en-US
Content-Type: application/x-www-form-urlencoded;
MobileCode=null&channels=&Reqno=13800138000&ReqlinkType=2&newindex=1&action=51602&begindate=2020-10-05&enddate=2021-01-05&type=2$(../../../../../../../../../../../../bin/sleep 11)&tfrom=h5&cfrom=mobile
  • 描述:將參數值設置為:[originalValue]$(../ (12 times) /bin/sleep [timeout])
  • 差異:以下更改已應用到原始請求,已將參數“type”的值設置為“2$(../../../../../../../../../../../../bin/sleep 11)”
  • 推理:AppScan 接收到“超時”響應,指示注入的“Sleep”命令已成功

3.解決方法

  • 創建並使用庫調用,庫調用是建立在系統調用上,通常用於為應用程序提供更加方便的功能,這些過程調用可以分為4類:進程管理、文件管理、目錄與文件系統管理和雜項。
  • 沙盒安全機制,為運行中的程序提供的隔離環境。可以有效限制軟件可訪問特定目錄中的哪些文件或執行哪些命令,例如,網絡訪問、對輸入設備的讀取、控制程序可使用資源(文件描述符、內存、磁盤空間)。具體表現:(參考百科)
    • 軟件監獄:限制網絡訪問、受限的文件系統名字空間。最常用於虛擬主機上。
    • 基於規則的執行:通過按照一系列預設規則給用戶及程序分配一定訪問權限,完全控制程序的啟動、代碼注入及網絡訪問。也可控制程序對於文件、注冊表的訪問。
    • 虛擬機:運行於真實硬件,模擬完整的宿主系統。
    • 主機本地沙盒:創建一個模擬真實桌面的環境,研究人員就能觀察惡意軟件是如何感染一台主機。
    • 在線判題系統:編程競賽中用來測試參賽程序的在線系統。
    • 安全計算模式:Linux內核內置的一個沙盒。啟用后,seccomp僅允許write()、read()、exit()和sigreturn()這幾個系統調用。
  • 庫或框架:例如,java防止js注入使用ESAPI進行編碼。
  • 輸入驗證:使用嚴格黑白名單根據請求中參數的預期值來限制字符集。適當的輸出編碼、轉義和引用是防止操作系統命令注入的最有效解決方案,例如,調用郵件程序時,可能需要允許主題字段包含在其他情況下很危險的輸入(如“;”和“>”字符),這些輸入需要轉義或以其他方式進行處理。
  • Asp.Net:提供多種方法在打開文件前對文件名進行驗證。
  • J2EE:文件路徑驗證、輸入數據驗證(必須字段、字段數據類型(缺省情況下,所有 HTTP 請求參數都是“字符串”)、字段長度、字段范圍、字段選項、字段模式、cookie值、HTTP響應)。
  • 用於服務器端驗證的Java框架:Jakarta Commons Validator、JavaServer Faces。
  • PHP:文件路徑驗證,輸入數據驗證(必須字段、字段數據類型(缺省情況下,所有 HTTP 請求參數都是“字符串”)、字段長度、字段范圍、字段選項、字段模式、cookie值、HTTP響應)。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM