命令執行及代碼執行漏洞


命令執行漏洞

 

由於開發人員編寫源碼,沒有針對代碼中可執行的特殊函數入口做過濾,導致客戶端可以提交惡意構造語句提交,並交由服務器端執行。命令注入攻擊中WEB服務器沒有過濾類似system(),eval(),exec()等函數是該漏洞攻擊成功的最主要原因。

 

漏洞成因

應用在調用這些函數執行系統命令的時候,如果將用戶的輸入作為系統命令的參數拼接到命令行中,在沒有過濾用戶的輸入的情況下,就會造成命令執行漏洞。

 

php相關函數

  • system(args) 有回顯
  • passthru(args)(有回顯)
  • exec(args) (回顯最后一行-必須echo輸出)
  • shell_exec(args) (無回顯-必須輸出)
  • 反引號:``
  • popen(handle,mode)(無回顯)
  • proc_open(‘cmd’,‘flag’,‘flag’)(無回顯)
  • $process = proc_open(‘dir’,$des,$pipes);
  • echo stream_get_contents($pipes[1]); 

漏洞危害

  • 繼承Web服務程序的權限去執行系統命令或讀寫文件
  • 進一步內網滲透
  • 反彈shell
  • 控制整個網站

 

命令拼接符

windows

 

1
2
3
4
1. “|”:直接執行后面的語句。
2. “||”:如果前面的語句執行失敗,則執行后面的語句,前面的語句只能為假才行。
3. “&”:兩條命令都執行,如果前面的語句為假則直接執行后面的語句,前面的語句可真可假。
4. “&&”:如果前面的語句為假則直接出錯,也不執行后面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真。

 linux

1
2
3
4
5
1. “;”:執行完前面的語句再執行后面的語句。
2. “|”:顯示后面語句的執行結果。
3. “||”:當前面的語句執行出錯時,執行后面的語句。
4. “&”:兩條命令都執行,如果前面的語句為假則執行執行后面的語句,前面的語句可真可假。
5. “&&”:如果前面的語句為假則直接出錯,也不執行后面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真。

  

 

代碼執行漏洞

 

PHP代碼執行漏洞可以將代碼注入到應用中,最終到webserver去執行。該漏洞主要存在於eval()、assert()、preg_replace()、call_user_func()、array_map()以及動態函數中。

 

 

 

漏洞成因

在Web應用中有時候程序員為了考慮靈活性、簡潔性,會在代碼調用eval函數(PHP函數)去處理。比如當應用在調用一些能將字符串轉化成代碼的函數時,沒有考慮用戶是否能控制這個字符串,將造成代碼執行漏洞。

 

 

相關函數

eval()

將輸入的字符串當做PHP代碼執行

assert()

會檢查指定的 assertion 並在結果為 FALSE 時采取適當的行動

call_user_func()

把第一參數作為回調函數

call_user_func_array()

調用回到函數,並把第一個數組參數作為回到函數的參數

array_map()

為數組的每個元素應用回調函數

 

還有一些危險函數

preg_replace()、str_replace()、call_user_func()這些函數跟eval、exec等函數地特性相同,都屬於危險函數

preg_replace(mixed pattern,mixed replacement,mixed subject [,int limit]):此函數可以用來執行一個正則表達式的搜索和替換

$pattern:正則表達式匹配的內容

$replacement:用於替換的字符串或字符串數組

$subject:要搜索替換的目標字符串或字符串數組

當$pattern存在/e模式修正符,允許代碼執行

 

 

漏洞危害

  • 執行任意代碼
  • 向網站寫WebShell
  • 控制整個網站甚至服務器

 


免責聲明!

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



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