b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

struts2中ognl表达式 各种合集_struts2 ognl 正则表达式_struts2 ognl表达式

电脑杂谈  发布时间:2019-07-21 13:06:29  来源:网络整理

struts2中ognl表达式 各种合集_struts2 ognl表达式_struts2 ognl 正则表达式

摘要

0x00 前言

它们是对结构说明236的引用(因为字段256中的代码和在字段240中的代码相同)和对数据结构222的开始的引用,字段258包含该开始地址。三、data uri schema将文件包含漏洞变成代码执行漏洞并绕过360网站卫士的waf。如果直接向被拦截函数的入口写入jmp指令,会引起cpu保护错误,因此在修改代码前要采用下面的方法绕过段保护机制:。

0x01 前置知识OGNL

struts2命令执行是利用ognl表达式,所以必须了解ognl。

1、HelloWorld

OGNL有三大要素,分别是表达式、Context、根对象。

栈中添加了student对象浅析ognlognl是object-graphnavigationlanguage的缩写,是一种功能强大的表达式语言通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的,实现字段类型转化等功能ognl用得最多的地方就是和struts2的标签绑定,也可以在配置文件中通过${}使用ognl表达式ognl中$号的使用1..在国际化资源文件中,引用ognl表达式2..在struts.xml文件中,引用ognl表达式ognl中%号的使用1..使用%{}可以取出保存在值。ognl是object-graph navigation language的缩写,它是一种功能强大的表达式语言(expression language,简称为el),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的,实现字段类型转化等功能。 object value = ognl.getvalue(ognl, context, context.getroot())。

参数说明:

expressionognl表达式

context是一个实现了Map接口的对象

rootbean对象

来写一个helloworld,将上面抽象的东西实践一番。

class People{ public Integer age; public String realName; public void setAge(Integer age) { this.age = age;
    } public void setRealName(String name) { this.realName = name;
    } public Integer getAge() { return this.age;
    } public String getRealName() { return this.realName;
    }
} public class Temp { public static void main(String[] args) throws OgnlException {
        People root = new People();
        root.setAge(100);
        root.setRealName("lufei");
        OgnlContext context = new OgnlContext();
        context.put("nikename", "lufeirider"); //注意非根对象属性,需要加上#号 Object nikeName = Ognl.getValue("#nikename",context,root);
        System.out.println(nikeName); //使用跟对象属性时候,不需要加#号 Object realName = Ognl.getValue("realName",context,root);
        System.out.println(realName); //@[类全名(包括包路径)@[方法名|值名]] //执行命令 Object execResult = Ognl.getValue("@java.lang.Runtime@getRuntime().exec('calc')", context);
        System.out.println(execResult);
    }
} 

输出结果

lufei
lufeirider
java.lang.ProcessImpl@1f17ae12 
2、OgnlContext类

首先下载yasm最新源码,yasm下载地址:,下载最新的source .tar.gz源码(我这里使用的是这个版本yasm-1.2.0.tar.gz)。介绍地址也有下载地址,你可以进入下载地址,具体看下源码的大概大小(都是带演示数据的,安装完以后和演示站点一模一样,如果删除演示数据和图片,每个源码大小在20-30m左右。第二步:下载android-4.3.1_r1的device部分源码 由于我之前已经全部下载了android-4.3.1_r1的源码并编译成功运行到我的i9250手机上,具体参考我前面的文章<编译android-4.3.1_r源码并刷到自己的galaxy nexus i9250真机上>,地址:。

public class OgnlContext extends Object implements Map,它是实现了Map接口的类。

看一下里面的主要方法和属性

重写了Map的put方法,遇到RESERVED_KEYS里面的key,然后根据key进行使用不同方法进行赋值。如果不在RESERVED_KEYS里面的,则放入一个叫_values的Map里面。

public Object put(Object key, Object value) {
    Object result; if (RESERVED_KEYS.containsKey(key)) { if (key.equals(OgnlContext.THIS_CONTEXT_KEY)) {
            result = getCurrentObject();
            setCurrentObject(value);
        } else { if (key.equals(OgnlContext.ROOT_CONTEXT_KEY)) {
                result = getRoot();
                setRoot(value);
            } else { if (key.equals(OgnlContext.CONTEXT_CONTEXT_KEY)) { throw new IllegalArgumentException("can't change " + OgnlContext.CONTEXT_CONTEXT_KEY
                            + " in context");
                } else { if (key.equals(OgnlContext.TRACE_EVALUATIONS_CONTEXT_KEY)) {
                        result = getTraceEvaluations() ? Boolean.TRUE : Boolean.FALSE;
                        setTraceEvaluations(OgnlOps.booleanValue(value));
                    } else { if (key.equals(OgnlContext.LAST_EVALUATION_CONTEXT_KEY)) {
                            result = getLastEvaluation();
                            _lastEvaluation = (Evaluation) value;
                        } else { if (key.equals(OgnlContext.KEEP_LAST_EVALUATION_CONTEXT_KEY)) {
                                result = getKeepLastEvaluation() ? Boolean.TRUE : Boolean.FALSE;
                                setKeepLastEvaluation(OgnlOps.booleanValue(value));
                            } else { if (key.equals(OgnlContext.CLASS_RESOLVER_CONTEXT_KEY)) {
                                    result = getClassResolver();
                                    setClassResolver((ClassResolver) value);
                                } else { if (key.equals(OgnlContext.TYPE_CONVERTER_CONTEXT_KEY)) {
                                        result = getTypeConverter();
                                        setTypeConverter((TypeConverter) value);
                                    } else { if (key.equals(OgnlContext.MEMBER_ACCESS_CONTEXT_KEY)) {
                                            result = getMemberAccess();
                                            setMemberAccess((MemberAccess) value);
                                        } else { throw new IllegalArgumentException("unknown reserved key '" + key + "'");
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        result = _values.put(key, value);
    } 

还重写了get方法,跟上面的类似。Ognl.getValue("#ct['root']",context,root);,context['root']就能获取到保留属性比如获取到保留属性root temp.People@7eda2dbb,而非在_value中获取。

来看下保留字符

struts2中ognl表达式 各种合集_struts2 ognl表达式_struts2 ognl 正则表达式

public static final String CONTEXT_CONTEXT_KEY = "context"; public static final String ROOT_CONTEXT_KEY = "root"; public static final String THIS_CONTEXT_KEY = "this"; public static final String TRACE_EVALUATIONS_CONTEXT_KEY = "_traceEvaluations"; public static final String LAST_EVALUATION_CONTEXT_KEY = "_lastEvaluation"; public static final String KEEP_LAST_EVALUATION_CONTEXT_KEY = "_keepLastEvaluation"; public static final String CLASS_RESOLVER_CONTEXT_KEY = "_classResolver"; public static final String TYPE_CONVERTER_CONTEXT_KEY = "_typeConverter"; public static final String MEMBER_ACCESS_CONTEXT_KEY = "_memberAccess"; 


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-114616-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...