轩辕三官 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 SSH是一种网络协议,用于计算机之间的加密登录,通常用于远程登录Linux系统。 在渗透测试中,通常需要考虑SSH的密码爆炸和日志删除。 本文将介绍渗透测试的一些基本内容,并结合使用方法给出检测建议。 0x01 简介 本文将介绍以下内容: 程序SSH密码验证 删除SSH日志 绕过SSH日志 防御探测 0x02 程序实现SSH口令验证 1.Python实现 Paramiko库,第三方库,很好用。 我的代码已经上传到github,地址如下: https://github . com/3g student/Homework-of-Python/blob/master/ssh check . py 支持代码密码登录和证书文件登录 2.C#实现 在以下地址使用第三方库SSH.NET: https://github.com/sshnet/SSH.网 编译的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私钥,如下图所示 在使用ssh-keygen -t rsa命令时,默认是生成一个新格式的密钥文件,其格式是BEGIN OPENSSH PRIVATE KEY,需要在这里进行转换。 解决方法: 使用puttygen转换下载地址: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 选择加载导入密钥。 导出方法: 转换-导出OpenSSH密钥 因此,需要读取证书的文件内容,以确定格式是否正确。 我的代码已经上传到github,地址如下: https://github . com/3g student/home-of-C-Sharp/blob/master/sharpshcheck _ SSH。NET.cs 代码需要对应于。NET版的Renci.SshNet.dll,可以用csc.exe编译。命令示例: C:\Windows\Microsoft。NET \ framework 64 \ v 4 . 0 . 30319 \ CSC . exe sharpsh check _ 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,它记录了当前和以前登录过系统的用户的信息。查询命令在最后。 /var/run/utmp,记录当前登录系统的用户信息。查询命令是:w。 ~/.bash_history,它记录了从开始到最后一次登录所执行的命令。查询命令:历史记录 1.查看日志的内容 那些不能直接查看的需要使用字符串命令。 命令示例: 字符串/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/wtmp 11 \ mv/tmp/wtmp 11/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 /var/log/auth.log中以“May 1 23:17:39”开头的行 4.躲避管理员w查看 Logtamper是必需的。 命令示例: python log tamper . py-m 1-u re4 lity-I 192 . 168 . 0 . 188 通过修改文件/var/run/utmp来实现。 5.清除指定ip的登录日志 Logtamper是必需的。 命令示例: python log tamper . py-m 2-u re4 lity-I 192 . 168 . 0 . 188 通过修改文件/var/log/wtmp来实现。 6.修改上次登录时间地点 Logtamper是必需的。 命令示例: python log tamper . py-m 3-u re4 lity-I 192 . 168 . 0 . 188-t tty 1-d 2014:05:28:10:11:12 通过修改文件/var/log/lastlog实现。 7.清除当前会话使用的命令记录 退出会话前执行: 历史-r 0x04 SSH日志的绕过 如果我们使用SSH客户端(比如putty)登录,就需要考虑日志清理,很麻烦。 这里有一种绕过各种日志记录的方法:使用sftp、rsyn、scp和其他协议(notty)登录 这里有两种实现方法: 0x02中引入的两个SSH密码验证器(python和c#)就是用notty。 我在执行命令的功能中加入了密码验证程序,对应的代码地址如下: Python实现:3359 github . com/3g student/homework-of-python/blob/master/sshruncmd . py # C实现:3359 github . com/3g student/homework-of-C-sharp/blob/master/sharpshruncmd _ ssh . net . cs 两种代码都支持执行单个命令和交互式shell。 分别选择交互shell,执行以下命令获取连接类型: ps -aux|grep sshd 此时连接类型为notty,如下图所示 注: 如果putty用于远程连接,则类型为pts/2,如下图所示。 测试后,notty可以绕过以下日志: /var/log/lastlog,记录用户最后一次登录的信息。 /var/log/wtmp,它记录了当前和以前登录过系统的用户的信息。查询命令在最后。 /var/run/utmp,记录当前登录系统的用户信息。查询命令是:w。 ~/.bash_history,它记录了从开始到最后一次登录所执行的命令。查询命令:历史记录 0x05 防御检测 增强SSH守护进程,资源: https://www.putorius.net/how-to-secure-ssh-daemon.html Notty连接检测: 检查错误的登录尝试,查询命令:lastb,文件位置/var/log/btmp。 检查成功通过身份验证的用户,文件位置/var /var/log/auth.log 检查tcp连接,检查命令:netstat -vatn 0x06 小结 介绍了SSH在渗透测试中的基础知识(日志删除和日志绕过),并开放了四个实现代码(密码验证和命令执行),结合使用方法给出了检测建议。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子