记一次任意文件下载到getshell

0x01 前言

某日闲来无事,上fofa搜了xx系统,想着碰碰运气,类似这样

记一次任意文件下载到getshell

0x02 测试过程

随便挑了一个站点打开

记一次任意文件下载到getshell

Em…,试试运气,反手admin admin就进去了,是一个管理系统

记一次任意文件下载到getshell

然后根据网站的功能点,随便点击几个,发现除了常规的操作也没啥了,翻了一会,发现有一个文件下载操作

记一次任意文件下载到getshell


好家伙,藏得挺深,抓包看看,请求的地址好像是一个文件

记一次任意文件下载到getshell

fileName改成../etc/passwd看看,好家伙,报错了

记一次任意文件下载到getshell

看来应该不是这个路径,随后依次尝试了../../etc/passwd和../../../etc/passwd都是500错误,到了../../../../etc/passwd的时候就能访问到了

记一次任意文件下载到getshell

再看看能不能读历史命令,如果可以读历史命令,可以看看有没有网站备份文件或者网站安装包,嘿嘿,改路径为/root/.bash_history,访问!….500错误

记一次任意文件下载到getshell

看来应该是权限不够。没办法了,从其他地方入手吧。

接下来可以F12看看网站源代码,用源代码中标志性的语句或者文件去fofa搜索相同的系统,说不定会有root权限,大概像这样

记一次任意文件下载到getshell

有了相同的系统之后,再次尝试弱口令

记一次任意文件下载到getshell

可能是最近运气不错吧,弱口令又进去了。嘿嘿

记一次任意文件下载到getshell

接下来尝试刚刚的操作,下载../../../../etc/passwd文件看看

记一次任意文件下载到getshell

再试试读历史命令/root/.bash.history

记一次任意文件下载到getshell

可以读到历史命令,慢慢翻,最终发现有网站源码

记一次任意文件下载到getshell

反手下载下来

记一次任意文件下载到getshell

解压一下

记一次任意文件下载到getshell
记一次任意文件下载到getshell

JSP的站,没学过java的我裂开了,先跟着历史命令把环境搭起来,于是在自己服务器上部署了一样的系统。

没学过java,自动化java审计工具还收费,就手工一个方法一个方法康康把

记一次任意文件下载到getshell

找了大半天,都快想放弃了…

不过这套系统有mysql,先看看数据里面的结构吧。大概长这样

记一次任意文件下载到getshell

随后在管理网站用户的表里面发现了一个系统自带的账户(这里用账户x表示),账户x比admin权限还要高

记一次任意文件下载到getshell

把密码放到cmd5查一下

记一次任意文件下载到getshell

要钱?我穷的一批,没钱,反手找好师傅查一查,好师傅很快啊,就回了消息

记一次任意文件下载到getshell

随后我用这个账户x登录自己搭建的系统,发现在网站是根本查不到这个账户存在的,也就是说可能是开发商留下的。嘿嘿,有了这个账号,其他系统都可以登录了。

随后发现系统有一个上传点可以上传文件,既然都到白盒了,那么可以部署一个文件实时监控工具,看看发生变化的文件,也可以看看等会要上传的文件是否上传了。

这里使用了FileMonitor来监控文件

记一次任意文件下载到getshell

上传文件、抓包改后改后缀.jsp

记一次任意文件下载到getshell

提示上传失败

记一次任意文件下载到getshell

看看文件监控,已经能上传上去了

记一次任意文件下载到getshell

后缀可控,但是文件名不可控,这可麻烦了,一般文件名都是以时间戳或者有特定的算法命名,再多上传几次看看,看起来也没啥规律啊

记一次任意文件下载到getshell

翻看一下下载的网站源码中的class文件。再看看请求的地址

记一次任意文件下载到getshell

应该是upload类里面的Uploadfile方法(没学过Java,不知道对不对,别喷~)

找到了Uploadfile方法一行一行的看,头晕啊,但是最后还是找到了生成文件名的方法=-=

记一次任意文件下载到getshell

让我看看UUID.randomUUID().toString()是个啥

记一次任意文件下载到getshell

三部分组成:当前日期和时间+时钟序列+全局唯一的IEEE机器识别号(网卡mac地址)

突然想了想,前两个估计还能想办法得到,但是最后一个网卡的mac地址,就很难了,任意文件下载是下载不到带有网卡mac地址的文件的,又一条路被堵死了

过了几个小时,又发现一个上传点

记一次任意文件下载到getshell

文件监控起来

记一次任意文件下载到getshell

直接传马

记一次任意文件下载到getshell

回显了地址

记一次任意文件下载到getshell

冰蝎成功连上成功

记一次任意文件下载到getshell

最后如法炮制,利用系统自带的账号登录系统,然后用第二个上传点传马即可。

记一次任意文件下载到getshell

0x03  总结

1.通过fofa搜索某个开源CMS系统,点击任意一个目标站点,输入弱口令admin/admin进入系统
2.在后台的文件下载处,出现http://www.xxx.com/&filenam=xxxx.xls,那么这些链接存在任意文件下载漏洞
3.通过bp进行fuzz路径,尝试读取../../etc/passwd和../../../etc/passwd都是500错误,../../../../etc/passwd能读取到内容。那么换成../../../../root/.bash_history,显示500错误。
4.该测试的任意目标网站是不能读取到history记录,那么通过fofa搜索其他几个类似的开源cms系统,输入相同的弱口令admin/admin可进入系统,然后也能正常读取到../../../../root/.bash_history内容。
显示读取出目标管理员操作的记录,包括对目标站点进行备份的压缩包名称以及是保存到网站的根目录下
5.可直接下载根目录下的源码压缩包到本地,对其进行代码审计。
6.发现目标源码中包含了网站的配置文件以及mysql数据库的备份文件。
7.通过在本地搭建环境,让目标系统在本地能正常运行,同时也通过FileMonitor(https://github.com/TheKingOfDuck/FileMonitor)来监控文件变化,并通过phpmyadmin管理数据库,在数据库表中发现系统自带的账号system,以及对应的密码hash值,通过md5进行成功解密,并通过system账号登录到本地环境系统后台。
8.在后台的文件上传处,存在文件上传漏洞,上传test.jsp,提示上传成功,但是在FileMonitor监控显示已有新文件建立,虽搜索上传文件名并没有搜索到,证明是没有上传成功。
9.通过搜索源代码中的upload关键字,可以知道上传后成功的文件名的规则为:当前日期和时间+时钟序列+全局唯一的IEEE机器识别号(网卡mac地址)
10.在本地环境系统后台的另一处又发现一处文件上传,可成功上传a.jsp,并返回了上传的文件名,搜索该文件名,可知道保存的路径。
12.最后如法炮制,利用系统自带的账号system登录到目标系统后台,然后用第二处上传点传马即可。

原文链接:https://mp.weixin.qq.com/s?__biz=Mzg4NTUwMzM1Ng==&mid=2247493857&idx=1&sn=f7db570914d9e4b4f517ab05b5e5d380&chksm=cfa54cf2f8d2c5e41b2636bb3e6a9961617324182a2dd93b52a1fa3bea9dd42d8ed96b377bb4&scene=178&cur_album_id=1553386251775492098#rd

上一篇:建立个人网站


下一篇:mount命令