实战 | 记一次艰难的任意文件下载漏洞挖掘和总结思考
2022-7-15 17:7:39 Author: F12sec(查看原文) 阅读量:39 收藏

0X01 前言

本文的起因是在一次渗透测试中,挖掘到了一个比较奇葩的任意文件下载漏洞,鄙人的性格又比较倔,非想着从这个任意文件下载漏洞收获一些足以打入内网的成果。于是整了半天,在这个过程中也进一步加深了对这类漏洞在利用方式上的理解。

0x02 漏洞点

在信息搜集的时候发现这样一个后台登陆入口

测试了弱口令、逻辑漏洞、注入等常见漏洞,分析JS文件无果后,自然就是要FUZZ目录了

可惜最终只成功找到了一个api/download,通过这个接口的名字不难发现是用于下载的,那就很可能出现任意文件下载漏洞。访问这个URL

500错误,提示缺少参数,这种直接告诉你参数名字就简单多了,不用去fuzz参数,我们拼接一下参数

简单的测试一下是否存在任意文件下载漏洞,在测试任意文件下载漏洞之前,最好能知道根目录在第几层,我尝试修改了一下大小写,发现这个站点大小写敏感,使用的linux系统,那么我们就按照linux系统的模式来测试。我个人比较喜欢通过etc/hosts的位置来确认根目录

先测试了一个肯定不存在的情况,这里抛出错误。通过这个错误我们可以发现两个细节。第一个细节是,当路径或者文件不存在的时候,下载下来的文件里面就会写着这样一个404报错内容,这就是我们后续判断路径或文件是否存在的核心思路。第二个细节是,这个错误抛出了当前的路径,在/mxxx/nodeweb/xxx-frontEnd/download (打码可能会影响观看,理解一下)。

通过上面的报错可知,向上跨越四层目录,就可以到达根目录,于是通过../../../../etc/hosts的payload成功下载到hosts文件

linux任意文件下载操作空间很大,我已经开香槟了。

0x03 开局不顺

如果要给linux上的敏感文件做个排行榜,那么/etc/shadow、/root/.ssh/authorized_keys、/root/.ssh/id_rsa、/root/.bash_history这四个绝对是毫无疑问的T0,逮着这四个测准没错。

这四个重量级选手,我只下载下来了/etc/shadow这一个,并且还解不出明文,肯定是没什么卵用的。网上有很多前辈也总结过任意文件下载漏洞的常用路径,我查阅了挺多资料,最后只下载下来了这么些个。

secure,用户登录安全日志,里面没啥有帮助的东西。shadow密码解不出来,那么只能看看远处的cron计划任务配置文件了家人们。

0x04 推理游戏

cron计划任务日志里总是有东西的,除非运维是个纯纯的小白,不然肯定会写一些脚本来辅助工作,最常见的比如说数据库定期备份的脚本等等。翻了一下计划任务日志,雀食发现了一些有趣的东西。

下载一下这个脚本来看看

简单分析一下这个脚本,首先定义了一个BACK_DIR作为存储路径。接着使用DATE获取年月日,把年月日拼接到自定义的文件名后面。然后从数据库里保存指定数据,将其储存在/media文件夹并命名为刚刚设定好的名字。接着跳转到/media目录,把刚刚的.sql备份文件压缩,然后再删除源文件,脚本执行结束。只要知道脚本执行的年月日,就可以下载数据库备份文件了。(这里已经出现了数据库密码,是个弱口令,可惜外网访问不了)

成功拿下,接着看看数据库里的内容。找到某个站点某些用户的弱口令

找到内网FTP服务的弱口令

另一个站点admin用户的MD5,试了一下所有用户的MD5都解不出来,推测应该是加盐了

虽然下载数据库备份文件已经很危险了,但是我还是想找找有没有别的更危险的东西。通过另一个站点的readme文件泄露,我发现了一些端倪

这个站点似乎还使用了Tomcat中间件,众所周知,tomcat是有配置文件来配置登陆密码、数据库连接密码的。如果拿到这些东西,或许可以推断出管理员的常用密码规律。但是tomcat的根目录都不知道,要怎么找?这第八条tomcat_start.sh和tomcat_shutdown.sh引起了我的注意,也许计划任务里也有。再回过头看看,确实找到了这个脚本,这个就是典型的Tomcat的目录结构

tomcat有几个比较敏感的配置文件,首先是tomcat/conf/server.xml,数据库连接相关的配置文件,我成功下载下来但是没有发现什么有价值的信息

接着是tomcat/conf/tomcat-users.xml,tomcat管理员账号密码的配置文件。这个更奇葩,甚至直接默认账号密码,要是有人进了他的内网那就直接打穿。

都没啥收获,还有最后一个tomcat/webapps/ROOT/WEB-INF/classes/database.properties,这个文件也是tomcat默认存储数据库连接信息的文件。不过我是用这个默认的并没有下载成功。但是我突然想起上面的README.txt文件提到一件事,“Mysql连接配置文件在web-inf/lib/c3p0. properties文件中,密码为DES加密”。

构造路径,成功下载,但是也没什么卵用,密码还是解不出来

到这里已经欲哭无泪了,都不知道该说这个运维的安全意识是好还是坏。说他安全意识差吧,密码基本都是加盐的或者是强口令,啥都解不出来。你说他安全意识好吧,内网里又用了一堆弱口令,要是被人突破进去,直接寄中寄。

0x05 一些总结与思考

对于任意文件下载漏洞在实战中的应用,测试思路其实是非常明确的。要么就下载各种配置文件分析出用户凭据进行利用,要么就通过目录结构下载源码进行审计。在实战中最常见最高效的手段无疑是前者,因此了解常见的敏感文件必不可少。我在网上总结了各位师傅的任意文件下载漏洞常用路径,加上自己的一些理解,应该是比较全面的了。

/root/.ssh/authorized_keys/root/.ssh/id_rsa/root/.ssh/id_ras.keystore/root/.ssh/known_hosts/etc/passwd/etc/shadow/etc/issue 系统版本/etc/fstab/etc/host.conf/var/log/xferlog  FTP会话,记录拷贝了什么文件/var/log/cron 计划任务日志/etc/(cron.d/|crontab) //这两个也是定时任务文件/var/log/secure 用户登录安全日志/etc/rc.local 读apache的路径/etc/motd/etc/sysctl.conf/var/log/syslog 记录登陆错误时的密码等信息/etc/environment 环境变量配置文件 可能泄露大量目录信息/etc/inputrc 输入设备配置文件/etc/default/useradd 添加用户的默认信息的文件/etc/login.defs 是用户密码信息的默认属性/etc/skel 用户信息的骨架/sbin/nologin 不能登陆的用户/var/log/message 系统的日志文件/etc/httpd/conf/httpd.conf 配置http服务的配置文件/etc/mtab     包含当前安装的文件系统列表   有时可以读取到当前网站的路径/etc/ld.so.conf/etc/my.cnf/etc/httpd/conf/httpd.conf/root/.bash_history/root/.mysql_history/proc/mounts/porc/config.gz/var/lib/mlocate/mlocate.db/porc/self/cmdlinetomcat/conf/server.xml   tomcat连接数据库的密码配置文件tomcat/webapps/ROOT/WEB-INF/classes/database.properties  同上tomcat/conf/tomcat-users.xml  tomcat管理员账号密码的配置文件

有些配置文件,可以自己生成字典,来遍历一下常见的路径,比方说httpd.conf,就有如下常见情况。实战中直接用自己做好的字典来跑即可。

/usr/local/apache/conf/httpd.conf/var/www/html/apache/conf/httpd.conf/home/httpd/conf/httpd.conf/usr/local/apache2/conf/httpd.conf/usr/local/httpd/conf/httpd.conf/etc/apache/httpd.conf

当然,主要集中在linux,因为linux有相对固定的路径,各种配置文件也能分析出各种敏感信息,相比之下Windows可利用的就比较少了。

C:\windows\system32\drivers\etc\hosts host文件C:*\apache-tomcat-7.0.1/conf/context.xml、web.xml、server.xml、tomcat-users.xmlC:\boot.ini //查看系统版本C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件C:\Windows\repair\sam //系统初次安装的密码C:\Program Files\mysql\my.ini //Mysql配置C:\Program Files\mysql\data\mysql\user.MYD //MysqlrootC:\Windows\php.ini //php配置信息C:\Windows\my.ini //Mysql配置信息C:\Windows\win.ini //Windows系统的一个基本系统配置文件

当然这并不是说只有以上东西可以利用,实战中遇到的情况千变万化,我自己总结了一些任意文件下载漏洞的利用思路,理解可能还有不到位的地方希望各位师傅斧正。

1.若存在框架、中间件,或者由某些CMS二开的情况。可以百度一下相关的配置文件以及目录结构,对敏感文件进行下载利用。(linux、windows通用思路)2.若通过前期的目录FUZZ、robots.txt、readme.txt等信息搜集手段了解了网站的目录结构,可以下载config、dbconfig等配置文件,其中一般保存有明文数据库连接密码。(linux、windows通用思路)3.如果是linux系统,主要下载/etc/shadow、/root/.ssh/authorized_keys、/root/.ssh/id_rsa、/root/.bash_history四个文件,能下载到私钥,或是能分析出密码有机会一把梭4.如果是linux系统,也可以分析计划任务日志,从计划任务脚本入手进行分析。还有其他的一些配置文件或许可以帮忙推断路径,这个就仁者见仁智者见智了。5.windows系统可利用的东西比较少,除非能清晰的知道路径,不然没什么机会一把梭。


推荐阅读:

实战 | 记一次对iphone手机游戏的渗透测试

实战 | 记一次HOST头中毒导致的密码重置漏洞挖掘

干货 | SRC和漏洞挖掘中的隐藏参数测试手法和工具总结

实战 | WAF-Bypass之SQL注入绕过思路总结

干货 | Certutil在渗透中的利用和详解

原创投稿作者:[email protected]


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5NjU3NzE3OQ==&mid=2247487886&idx=3&sn=6055dbfe70b65b3a34cd00fa49531089&chksm=c07faa7af708236cff1db681138ad7a8d77e724523679bfee686db472097464562ed6b121af3#rd
如有侵权请联系:admin#unsafe.sh