首页>
技术资讯>
详情

剑走偏锋--灵巧的脚本攻击总结

2016-06-19 来源:CloudBest 阅读量: 208
关键词: 应用技术


  武学之中, 出其不意、剑走偏锋才能发挥灵巧之长。在防火墙广泛地应用于网络之间执行访问控制策略的今天,以往被漠视的CGI安全悄然兴起,形形色色的脚本攻击在防火墙的“认同”下大行其道,看似简单的脚本实质上处处暗藏玄机。本文真实再现利用脚本缺陷善意侵入20CN的全过程,试图让您得到一点乐趣和启示。
  
  20CN.ORG(20CN网络安全小组)是国内较为知名的黑客/安全站点,偶然间,我们开始了对她的安全测试。
  
  没有任何迟疑,我们直接从WEB下手。据了解:20CN整站程序由站主NetDemon编写。基于代码规模和复杂度方面的考虑,我们把目光集中到了网站论坛。我们习惯首先查看用户信息,因为用户名和用户密码总是紧贴着保存在一起,在这里我们更容易接近我们渴求的信息。提交如下URL查看NetDemon用户信息:
  
  http://www.20cn.org/cgi-bin/club/scripts/userinfo.pl?user=netdemon
  正常返回用户信息
  
  http://www.20cn.org/cgi-bin/club/scripts/userinfo.pl?user=./netdemon
  出错提示:论坛系统出现问题!
  
  http://www.20cn.org/cgi-bin/club/scripts/userinfo.pl?user=netdemon%00
  返回用户信息的“发贴数量”出现了一个莫名其妙的字符串,其他的一部分信息也全乱了
  
  看来这里有点问题,这个字符串到底是怎么回事?我们用以前申请的ID登陆上去后,看到每个URL的QUERY_STRING后面都有一个名为key的变量,而且其值和上述的字符串有些相似。难道这个是密码?我们接连登陆几次后,观察到这个key值每次都不一样,看来这个key是用来识别我们在论坛的身份,应该与用户密码没有直接关系...还是先不管这个key值了,继续用我们的ID做实验,提交了这个URL
  
  http://www.20cn.org/cgi-bin/club/scripts/userinfo.pl?user=envymask%00
  
  出来的还是跟先前类似的字符串,这个时候我们大胆猜测这个字符串是我们的密码,通过验证,我们发现这的确是把我们密码经过标准DES加密后得到的字符串。这证明了我们的猜测是正确的,这个字符串中就是加密过后的用户密码。但为什么密码会溜出来?于是我们接着推测:在用户数据目录里面肯定有两个保存每个用户信息的文件,一个里面保存有密码,而另一个没有,只有一些一般的信息,如邮箱,生日之类的。这两个文件应该一个是username,另一个是username.xxx(加了一个后缀)。userinfo.pl这个程序使用open函数打开文件的时候没有对user这个变量过滤完全,至少没有过滤掉 \0,这使得试图打开username.xxx文件的时候实质上打开的并不是username.xxx而是username。打开文件的代码可能是这样写的open(F,"$path/$username.xxx");所以当user=abcdef%00的时候相当于open(F,"$path/abcdef");而这个文件里正是保存用户密码的那个文件,所以部分用户信息变量直接到该文件中错误地取值,之后再反馈输出给用户,这样密码就出来了。惬意...我们随即找出了站长netdemon的密码,暴力破解的念头一闪而过后,我们看还能不能进一步突破这个目录,于是提交
  
  http://www.20cn.org/cgi-bin/club/scripts/userinfo.pl?user=../../../../../../../etc/passwd%00
  
  密码档文件出来了,看来这里有搞头,继续
  
  http://www.20cn.org/cgi-bin/club/scripts/userinfo.pl?user=../../../../../../../etc/%00
  
  受页面输出格式限制,我们只能查看到/etc目录中一部分文件和目录;于是试着打开一些文件,但也只能查看到文件的一些很小的片段,几乎没什么用,连续查看了很多文件过后,都没有新的突破,我们有点失望了。于是我们暂时把这个BUG放在一边,看看还有没有其他文件存在缺陷,继续找一些CGI程序如display.pl,show.pl等,都没有发现可以突破的地方,因为这些文件都做了一些过滤,看来这条路走不通了。
  
  既然CGI方面不能突破,那就只有另想路子了。我们拿着那个userinfo.pl到处查看一些片段文件和目录,首先搜寻apache的配置文件,最后在/usr/local/etc/apache目录下找到了httpd.conf ,但还是只能查看文件头几行,这些根本没什么用。又跑到/home目录下看了看,嗯,有好多用户,比先前查看/etc/passwd里面的用户多多了,因为查看/etc/passwd的时候只能看到头几行,随便进了一个用户tomy的目录,咦,见到了目录/public_html,看来系统有可能给每个用户分配了发布个人主页的空间,有意思, 看在浏览器里面能不能访问到
  
  http://www.20cn.org/~tomy
  
  呵,看到这家伙的个人主页了,再看看里面的东西,这时我们意外地看到了一个/phpmyadmin目录,立刻访问,发现竟然没有密码验证。现在的我们相当于得到了一个Mysql的用户,我们试图通过phpmyadmin往数据库里写东西,内容是一个小的phpshell,然后导出到主页目录里,忙活了半天,终于全写进去了,但往硬盘上写的时候却发现没有权限写,一阵郁闷袭来...
  
  继续查看了几个用户的目录,大部分都没有发布更多的东西,只有些静态的页面。经过一番努力后,我们终于找到了冤大头--shuaishuai(帅帅)这个用户,转到他发布的主页上看看,哈,发现了这个
  
  http://www.20cn.org/~shuaishuai/show.php?filename=20030329185337.txt
  
  好家伙,看看能不能跳转目录
  
  http://www.20cn.org/~shuaishuai/show.php?filename=../../../../../../../etc/passwd
  
  返回了下面这些东西给我们
  Warning: is_file() [function.is-file]: SAFE MODE Restriction in effect. The script whose uid is 1007 is not allowed to access ./data//../../../../../../etc/passwd owned by uid 0 in /usr/home/shuaishuai/public_html/show.php on line 77
  
  失败,但并不是不能跳转,只是没有权限而已。那好,我们再试着看看能不能查看有权限的文件
  
  http://www.20cn.org/~shuaishuai/show.php?filename=../../../../../../../home/shuaishuai/public_html/post.php
  
  呵呵,成功了,看到了post.php这个文件的

热门推荐 查看更多