1. 启动在线靶场

登陆 在线靶场,启动S2-007环境,等待环境启动之后,点击访问靶场按钮即可前往靶场环境。该环境来源于vulhubvulapps

2. 查看检测结果

登陆洞态IAST官方网站,查看漏洞检测结果

3. 进入搜索功能,分析完整的污点调用图

3.1 Source点

首先,在org.apache.struts2.dispatcher.Dispatcher.DefaultActionMapper#createContextMap()方法中,调用Servlet接口的getParameterMap方法获取外部参数,形成初始污点,然后将Map对象放入struts2的上下文com.opensymphony.xwork2.ActionContext.parameters

3.2 Propagator方法

经过一系列的处理,在com.opensymphony.xwork2.interceptor.ParametersInterceptor#doIntercept方法中,调用this.retrieveParameters(ac)方法获取参数,最终通过this.get("com.opensymphony.xwork2.ActionContext.parameters”)方法通过struts2上下文获取参数,与初始污点关联起来;

初始污点在com.opensymphony.xwork2.interceptor.ParametersInterceptor#doIntercept方法中通过setParameters方法将参数传递至ParametersInterceptor实例化对象中,最终在com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor#intercept中调用org.apache.struts2.interceptor.StrutsConversionErrorInterceptor#getOverrideExpr方法,经过字符串拼接,形成最终的ognl表达式,代码如下:

protected Object getOverrideExpr(ActionInvocation invocation, Object value) {ValueStack stack = invocation.getStack();String var4;try {stack.push(value);var4 = "'" + stack.findValue("top", String.class) + "'";} finally {stack.pop();}return var4;
}

代码中字符串拼接对应JDK层StringBuilder的一系列操作,如下图

ognl表达式在com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor#intercept方法中,被放入map对象faike中:fakie.put(propertyName, this.getOverrideExpr(invocation, value));

然后,设置fakie对象到ExprOverrides

if (fakie != null) {stack.getContext().put("original.property.override", fakie);invocation.addPreResultListener(new PreResultListener() {public void beforeResult(ActionInvocation invocation, String resultCode) {Map<Object, Object> fakie = (Map)invocation.getInvocationContext().get("original.property.override");if (fakie != null) {invocation.getStack().setExprOverrides(fakie);}}});
}

然后,在com.opensymphony.xwork2.ognl.OgnlValueStack#lookupForOverrides方法中,将Ognl表达式读取出来

然后在com.opensymphony.xwork2.ognl.OgnlUtil#getValue方法中,调用compile方法,形成Ognl对象

public Object getValue(String name, Map<String, Object> context, Object root, Class resultType) throws OgnlException {return Ognl.getValue(this.compile(name), context, root, resultType);
}

3.3 Sink方法

最后,在ognl.Ognl#getValue方法中,使用Ognl表达式对象的getValue方法获取Ognl表达式的值

本文没有对完整的漏洞细节进行分析,大家可以根据这篇文章,在关键方法的位置设置debug,然后逐步分析,还原漏洞的形成过程。

账号申请

  • SaaS版本地址:https://iast.huoxian.cn:8002
  • SaaS版本账号申请

  • 洞态IAST合作伙伴计划之整体开源联合开发,申请方式请扫描下方二维码

  • 如需加入技术讨论群,扫描二维码添加微信并备注"洞态IAST-加群",工作人员将拉您进群

  • 官网:https://huoxian.cn
  • 火线安全平台:
  • 火线Zone

洞态IAST自动检测S2-007漏洞相关推荐

  1. 洞态IAST自动检测S2-001漏洞

    一.使用Dongtai-IAST检测S2-001漏洞 1. 启动在线靶场 登陆在线靶场:http://labs.iast.huoxian.cn:8081,启动`S2-001`环境,等待环境启动之后,点 ...

  2. 洞态IAST Python-agent 内测版 测试

    一.背景 洞态 IAST 首发 Python-agent 尝鲜,验证 Agent 针对路径穿越漏洞的检测能力. 洞态 IAST 的检测方式是扫描运行中的应用程序,将扫描到的漏洞信息发送到云端进行检测处 ...

  3. 洞态IAST在某互联网甲方的落地实践

    IAST作为开展SDL中黑白盒测试的有效补充,还是很有必要去了解使用的.笔者为了完善公司的SDL流程,调研了开源的IAST产品进行测试和内部推广 刚开始,笔者测试百度OpenRASP的IAST功能(主 ...

  4. 洞态 IAST v1.1.4 新版本来袭,DevSecOps 更进一步

    导语 洞态 IAST 自开源发布以来,一直保持着双周更新一版的节奏不断迭代.项目开启之初,社区小伙伴们参与的积极性很高,为洞态提出了许多建设性意见,也贡献了很多代码,很感谢洞态伙伴们的付出. Dong ...

  5. 洞态漏洞检出测试第二期:NoSQL LDAP注入漏洞

    ​测试环境 DongTai-Python-agent 版本号:v1.2.0 支持 Python 框架:Flask Python 3.8 NoSQL 注入漏洞 以 JavaScript 注入为例 Jav ...

  6. 精选用户故事|洞态在聚水潭的误报率几乎为0,如何做到?

    亮点锦集: 我个人在实际使用过程中体验到,对于像命令执行和sql注入这类漏洞,洞态能够做到百分百的检测. --Spenser 除了之前关于敏感信息检测这一块有误报,其它基本没有.不过这块儿经过优化之后 ...

  7. web渗透--69--洞态IAST部署及使用

    前不久[洞态IAST]正式开源,喜大普奔,此前使用百度开源的OpenRASP-IAST,效果其实很差,可能是平台的问题,也可能是开发写的程序本来就安全,最终一个漏洞都没产出,只能靠二次开发的一些辅助功 ...

  8. linux心跳出血漏洞,heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)

    heartbleeder 可以探测你的服务器是否存在 OpenSSL CVE-2014-0160 漏洞 (心脏出血漏洞). 什么是心脏出血漏洞? CVE-2014-0160,心脏出血漏洞,是一个非常严 ...

  9. linux 心脏滴血漏洞,心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南))...

    心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)),哪吒游戏网给大家带来详细的心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏 ...

最新文章

  1. 移动硬盘格式从RAW修复成ntfs的方法
  2. MyBatis学习总结(三)——优化MyBatis配置文件中的配置
  3. dbref java_查询mongodb dbref内部字段
  4. 开源数字媒体资产管理系统:Razuna安装方法
  5. pytorch模块函数API介绍
  6. 嵌套查询(2020-3-25 )
  7. mdx格式的词典用什么软件打开_英专生必备词典
  8. Linux 删除分区
  9. highcharts的柱状图显示数据
  10. eclipse默认指向 WebContent 目录 修改为 webRoot
  11. java如何实现web页面聊天_Java和websocket实现网页聊天室
  12. java山地车 故障,十年骑龄车友总结山地车保养维修技巧
  13. 人生苦难重重,如何解决人生的问题?| 读《少有人走的路:心智成熟的旅程》
  14. 360安全浏览器极速模式对rem失效
  15. Java与Unix时间戳的相互转换
  16. Linux sed 命令简要
  17. 尼尔机器人技能快捷键_尼尔机械纪元武器配置及全出招操作详解-游侠网
  18. 【模块介绍】WS2812(硬件部分)
  19. Android 常用的网络框架
  20. python-----闭组会议总结

热门文章

  1. vector底层结构简介
  2. 四巨头音源500GB合集-Spectrasonics omnisphere | Keyscape | Trilian | Stylus RMX 2020
  3. Unity UWA内存优化总结列表
  4. 滴滴CEO程维:创业是一条没有尽头的路
  5. 一文读懂什么是编程!
  6. 获取网站 favicon.ico 的三种方法
  7. 低价低配的海外服务器的对比
  8. 药理学(综合练习)题库【2】
  9. [网鼎杯 2020 朱雀组]phpweb-反弹shell
  10. OTA巨头的开局之战:战线逐渐下沉 边界更加模糊