渗透基础——SSH 日志的绕过

发布于 2024-09-12 20:44:44 字数 6223 浏览 12 评论 0

0x00 前言

SSH 是一种网络协议,用于计算机之间的加密登录,通常用于远程登录 Linux 系统。

在渗透测试中,通常需要考虑 SSH 的口令爆破和日志删除。

本文将要介绍一些渗透测试相关的基础内容,结合利用方法给出检测建议。

0x01 简介

本文将要介绍以下内容:

  • 程序实现 SSH 口令验证
  • SSH 日志的删除
  • SSH 日志的绕过
  • 防御检测

0x02 程序实现 SSH 口令验证

1.Python 实现

使用第三方库 paramiko 库,用法很简单

我的代码已上传至 github,地址如下:https://github.com/3gstudent/Homework-of-Python/blob/master/sshCheck.py

代码支持口令登录和证书文件登录

2.C#实现

使用第三方库 SSH.NET,地址如下:https://github.com/sshnet/SSH.NET

编译好的 dll 下载地址:https://github.com/sshnet/SSH.NET/releases/download/2016.1.0/SSH.NET-2016.1.0-bin.zip

参考文档:https://github.com/sshnet/SSH.NET/releases/download/2016.1.0/SSH.NET-2016.1.0-help.chm

在程序中引入 Renci.SshNet.dll 后,用法也十分简单

在编写程序上需要注意以下问题:

(1) 使用证书登录

SSH.NET 对证书的格式有要求, SSH.NET-2016.1.0-help.chm 上提示必须为 BEGIN RSA PRIVATE KEY ,如下图

Alt text

而使用命令 ssh-keygen -t rsa 时,默认是以新的格式生成密钥文件,格式为 BEGIN OPENSSH PRIVATE KEY ,这里需要做一个转换

解决方法:

使用 puttygen 转换,下载地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

选择 Load 导入密钥

导出方法:

Conversions -> Export OpenSSH key

所以在编写程序上需要先读取证书的文件内容,判断格式是否正确

我的代码已上传至 github,地址如下:https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/SharpSSHCheck_SSH.NET.cs

代码需要对应.NET 版本的 Renci.SshNet.dll,可使用 csc.exe 进行编译,命令示例:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe SharpSSHCheck_SSH.NET.cs /r:Renci.SshNet.dll

代码支持口令登录和证书文件登录

0x03 SSH 日志的删除

同 SSH 登录操作相关的日志有以下几个位置:

  • /var/log/btmp,记录错误的登录尝试,查询命令:lastb
  • /var/log/auth.log,记录认证成功的用户
  • /var/log/secure,记录与安全相关的日志信息
  • /var/log/lastlog,记录用户上次登录信息
  • /var/log/wtmp,记录当前和曾经登入系统的用户信息,查询命令:last
  • /var/run/utmp,记录当前正在登录系统的用户信息,查询命令:w
  • ~/.bash_history,记录从最开始至上一次登录所执行过的命令,查询命令:history

1.查看日志的内容

无法直接查看的需要使用 strings 命令

命令示例:

strings /var/log/wtmp

2.替换日志中的 IP

使用 sed 命令替换指定的 IP

命令示例:

utmpdump /var/log/wtmp |sed "s/192.168.112.151/1.1.1.1/g" |utmpdump -r >/tmp/wtmp11 &&\mv /tmp/wtmp11 /var/log/wtmp

将 192.168.112.151 修改为 1.1.1.1

3.删除日志中的指定行

使用 sed 命令删除指定行

sed -i '/May 1 23:17:39/d' /var/log/auth.log

删除/var/log/auth.log 中以"May 1 23:17:39"开头的行

4.躲避管理员 w 查看

需要使用 logtamper

命令示例:

python logtamper.py -m 1 -u re4lity -i 192.168.0.188

通过修改文件 /var/run/utmp 实现

5.清除指定 ip 的登录日志

需要使用 logtamper

命令示例:

python logtamper.py -m 2 -u re4lity -i 192.168.0.188

通过修改文件 /var/log/wtmp 实现

6.修改上次登录时间地点

需要使用 logtamper

命令示例:

python logtamper.py -m 3 -u re4lity -i 192.168.0.188 -t tty1 -d 2014:05:28:10:11:12

通过修改文件 /var/log/lastlog 实现

7.清除当前会话使用的命令记录

在退出会话前执行:

history -r

0x04 SSH 日志的绕过

如果我们使用 SSH 客户端(例如 putty) 进行登录,需要考虑日志清除,十分麻烦

这里给出一种绕过各种日志记录的方法:使用 sftp、rsyn、scp 等协议进行登录(notty)

这里给出两种实现方法:

在 0x02 中介绍的两个 SSH 口令验证程序(python 和 c#) 正是使用了 notty

我将口令验证程序加入了执行命令的功能,对应的代码地址如下:

代码均支持执行单个命令和交互式 shell

分别选择交互式 shell,执行以下命令获得连接类型:

ps -aux|grep sshd

此时的连接类型为 notty,如下图

Alt text

注:

如果使用 putty 远程连接,此时的类型为 pts/2,如下图

Alt text

经测试,使用 notty,能够绕过以下日志:

  • /var/log/lastlog,记录用户上次登录信息
  • /var/log/wtmp,记录当前和曾经登入系统的用户信息,查询命令:last
  • /var/run/utmp,记录当前正在登录系统的用户信息,查询命令:w
  • ~/.bash_history,记录从最开始至上一次登录所执行过的命令,查询命令:history

0x05 防御检测

增强 SSH 守护程序,参考资料:https://www.putorius.net/how-to-secure-ssh-daemon.html

notty 连接的检测:

  1. 查看错误的登录尝试,查询命令:lastb,文件位置/var/log/btmp
  2. 查看认证成功的用户,文件位置/var/log/auth.log
  3. 查看 tcp 连接,查看命令:netstat -vatn

0x06 小结

本文介绍了 SSH 在渗透测试中的基础知识(日志删除和日志绕过),开源了 4 个实现代码(口令验证和命令执行),结合利用方法给出检测建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

把梦留给海

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文