struts_OGNL

本文深入解析了OGNL(Object Graphic Navigation Language)表达式的使用方法及其在Struts框架中的角色。介绍了如何利用OGNL访问对象属性、调用方法、处理静态属性和方法,以及在页面上显示动态数据。

1. OGNL简介

  • 全称:Object Graphic Navigation Language(对象图导航语言)、
  • 是struts默认的表达式语言
  • 使用OGNL表达式,必须使用struts标签库
  • 相当于JSP的EL表达式,都是从作用域中取值

2. OGNL简单使用

  • <s:property>将其属性value的值直接输出到页面
  • jsp设置属性表达式:【<jsp:setProperty property="" name=""/>】    
  • value的值就是一个OGNL表达式,它不是一个字符串    
  • 若value的值为字符串输出,将其值加单引号即可
  • 使用前需要在jsp页面导入struts标签库
    <%--
        输出字符串 'OGNL表达式'
    --%>
    <s:property value="'OGNL表达式'"></s:property>
    <%--单引号里面是字符串
        双引号里面是表达式
        输出字符串 'OGNL表达式'的长度 7
    --%>
    <s:property value="'OGNL表达式'.length()"></s:property>

3. OGNL的功能

  • 访问对象方法
    • 比如输出字符串长度,字符串.length()
  • 访问静态属性
  • 访问静态方法
<%--单引号里面是字符串
        双引号里面是表达式
        输出字符串 'OGNL表达式'的长度 7
    --%>
    <s:property value="'OGNL表达式'.length()"></s:property><br>

    <%--
      访问静态属性(默认情况下,struts2把静态属性的访问权限关闭)
      解决办法:
          在struts.xml增加常量
          修改struts-core.jar的default.properties中的struts.ognl.allowStaticMethodAccess
          令其值为true
      示例:
      输出Integer.MAX_VALUE(整数的最大值,是一个静态属性)
    --%>
    max value of int:<s:property value="@java.lang.Integer@MAX_VALUE"></s:property><br>
    <%--
       访问静态方法
       示例:
        访问Math类的random()获取随机数
    --%>
    a random number:<s:property value="@java.lang.Math@random()"></s:property><b

 struts.xml中添加常量:

<!--配置struts2打开访问静态属性权限-->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

  • 封装List数据

 

<%--
        封装List
  --%>
<s:radio list="{'男','女'}" name="gender1" label="性别"></s:radio><br>

 

  • 封装Map
<%--
        封装Map
--%>
<s:radio list="#{'男':'male','女':'female'}" name="gender2" label="性别"></s:radio><br>

 

虽然给定引用中未直接提及`exploit(multi/http/struts2_content_type_ognl)`模块设置`Rhosts`、`RHOSTS`、`RPORT`和`targeturi`的使用说明,但可以依据Metasploit的通用使用逻辑来推测。 ### Rhosts和RHOSTS 在Metasploit中,`RHOSTS`通常用于指定目标主机的地址,它可以是单个IP地址,也可以是一个IP地址范围,或者是一个包含多个IP地址的文件路径。设置`RHOSTS`的命令格式如下: ```plaintext msf6 exploit(multi/http/struts2_content_type_ognl) > set RHOSTS 192.168.1.100 ``` 这里将目标主机的IP地址设置为`192.168.1.100`。如果要扫描一个IP地址段,可以使用如下命令: ```plaintext msf6 exploit(multi/http/struts2_content_type_ognl) > set RHOSTS 192.168.1.0/24 ``` 注意事项:确保输入的IP地址或地址段是有效的,否则扫描将无法正常进行。 ### RPORT `RPORT`用于指定目标主机上服务的端口号,默认情况下,不同的模块可能有不同的默认端口。对于这个模块,需要根据目标主机上Struts2服务实际监听的端口进行设置。设置`RPORT`的命令格式如下: ```plaintext msf6 exploit(multi/http/struts2_content_type_ognl) > set RPORT 8080 ``` 这里将目标主机上Struts2服务的端口设置为`8080`。 注意事项:要准确了解目标主机上服务的实际端口,否则可能无法成功连接到目标服务。 ### targeturi `targeturi`用于指定目标服务的URI路径。有些Web服务可能不是部署在根目录下,而是在特定的路径下,这时就需要设置`targeturi`。设置`targeturi`的命令格式如下: ```plaintext msf6 exploit(multi/http/struts2_content_type_ognl) > set targeturi /struts2-app ``` 这里将目标服务的URI路径设置为`/struts2-app`。 注意事项:需要准确知道目标服务的实际URI路径,否则可能无法正确定位到目标服务。 后续操作:在设置好这些参数后,可以使用`exploit`或`run`命令来尝试利用漏洞,例如: ```plaintext msf6 exploit(multi/http/struts2_content_type_ognl) > exploit ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值