当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

由一次渗透引发的安全思考

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

近日对某网站进行了一次简单渗透,让我想起了不久之前发生的一次”小事件”;
 
拿出来和大家分享希望能对提高大家的安全开发意识有所帮助
 
事件回放:一个页面提供下载功能
 
结果是:程序bug导致下载服务器上的任意文件。
 
可能你会觉得下载了也没有用,因为我只开放了80端口,甚至还有负载均衡挡在外面,下载一个密码文件也没什么,但实际这是一个相当危险的问题。
 
以下是一些原理性的假设,其中一些细节是基于实际渗透的。仅供学习和交流,和给大家提个醒。
 
记得当时是这样的,有一个页面提供了活动相关mp3下载功能,结果被一些“细心”的朋友发现了其中的问题,并及时予以通知,这才进行了修补
 
其实原理很简单也很常见,和当年iis上出的那个目录遍历漏洞是一样的,就是提供下载功能的jsp文件将文件名作为参数传入,类似于:down.jsp?FileName=song.mp3,在浏览器地址栏提交后就能得到song.mp3这个文件了。
 
接下来,做一下简单的修改,将地址栏的参数改为如下样子:down.jsp?FileName=../../../../../song.mp3
 
由于这个目录下的文件根本不存在,如果程序处理的够好,包住了异常,那么就会返回一个0字节文件,这样看来不会出现问题,但是我们继续修改参数:down.jsp?FileName=../../../../../etc/hosts
 
猜猜看会怎么样?有两种可能
 
1.返回的仍然是空
 
原因:
 
a.文件不存在,也就是目录不对,那么需要再次尝试:down.jsp?FileName=../../../../../../etc/hosts;在增加一个“../”,直到找到文件
 
b.找到了文件,但是没有权限读取,但是很不幸,我见到过的类似问题都是能顺利读取的,而且能读取的远远不止这个文件
 
2.返回了hosts文件
 
bingo,如果顺利返回hosts文件,那么就可以更近一步渗透了。
 
可能你会想,就是个hosts么,没什么。
 
好了,下一步,我把地址改为如下内容:down.jsp?FileName=../../../../../etc/gshadow
 
于是获得文件,类似如下内容
 
bin:x:1:root,bin,daemon
 
daemon:x:2:root,bin,daemon
 
sys:x:3:root,bin,adm
 
…….
 
***:***:/home/dmtsai:/bin/bash
 
好了,这样我就获得了该系统中所有的用户名,也就是例子中/home/dmtsai:/bin/bash的dmtsai
 
当然一个系统中可能会有很多用户,当然也会全部列出来,
 
好了接下来做一件比较恐怖的事情
 
也是最核心的,将地址栏改为如下内容:down.jsp?FileName=../../../../../home/dmtsai/.bash_history
 
这下我就等于拿到了这台机器上的命令行历史记录
 
类 似于vi,ftp,cd /***,rm ***,等等,甚至是mysql的数据库连接命令,还有一些Python脚本,这些记录全部拿到,因为是web服务器,也就很容易可以拿到你的web目 录,以及其中的关键东西,如果用的struts,那么定位到你的web目录,那么好了,struts-config文件有了,web.xml有了,然后数 据库配置文件也有了,log配置文件也有了。那么这意味着什么呢,www.xuhantao.com,你的整套网站的jsp源文件会被下载,或许这并不能拿到服务器的权限,但是很大程度为黑 客提供了一次深度接触我们的机会,这是十分危险的!
 
接下来就可以分析从服务器上获得的资料,准备进一步渗透了。可能通过对jsp文件的分析,你可以拿到上传的权限,这样会使问题更加恶化。
 
所以在日常开发中,这种文件下载的功能要慎之又慎,有可能一个疏忽就导致你的服务器遭到渗透
 
以下是一些总结:
 
1. 在做开发中,如果有下载功能,请不要将客户端提交的文件名直接用来去取文件,这是很大意很危险的行为。建议定义好type类型,然后通过传递type,来 取得相应的文件,如:aa对应song1.mp3;bb对应song2.mp3。而且文件所在的根目录最好能固化在程序中,或者写在配置文件中
 
2.用户提交的数据都是不可信的,需要我们层层筛选,这其中合法性验证很必要,不是简单的数字判断,文件名判断之类的就行了的,至少要考虑两方面,
 
a.是否是未经处理就返回给用户(此处问题最近就发生过,还好已经及时修复)
 
b.是否未经处理就将参数传入到逻辑模块去执行了
 
a点的危害是我们常见的xss,用户提交恶意的代码,结果未做判断就扔回去。
 
b 点的危害就无法估量了,这取决于你的代码逻辑,如果它功能够强大,那么黑客获得东西也就越大,损失也就越大。所以对于用户提交的数据要十分谨慎,因为我们 的程序不只是要能够运行,还必须要健康的运行。其实完全可以把用户的提交数据看作是定时炸弹,不要犯懒,嫌麻烦,存在侥幸心理,觉得用户可能不会发现,要 知道面对几千万的用户,哪怕概率只有千万分之1,那也是恐怖的。
 
3.即使是只开放80端口,一样可以进行渗透,这时不管有没有防火墙什么的都没有用,因为这是通过正常的访问获得的,也就是说只要程序有bug,那么再强的防御也无济于事,涛涛电脑知识网,这其实是一种简单的穿透手段,利用程序bug来穿透,获得敏感数据。
 
5.web服务器启动者的权限问题,如果web服务器的权限很低,那么我什么也拿不到,或者拿到很少的东西。同样如果启动者的权限过高,拿到的文件也就越多,万一从对jsp文件的分析中发现了上传方面的bug,那就真的是不堪设想
 
6.要下载的文件最好单独存放,并且以静态方式下载,这样可以将风险降到最低,甚至是0风险
 
7.还有很多,大家自己根据需要自己理解吧
 
注:以上只是简单介绍,其中有些linux的细节可能不准确,关键在于问题原理。

相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1