这次的靶机同样来自vulnhub上的Planets系列:Mercury(水星)
环境
虚拟机软件:VirtualBox 7.0.18
网络连接模式:NAT网络
攻击机:kali-linux,ip为10.0.2.4
目标机:ip为10.0.2.6
渗透过程
扫描当前网段存活主机:nmap -sn 10.0.2.4/24
-sn:发现主机后不进行端口扫描,只打印响应扫描的存活主机

接着扫描端口:nmap --min-rate 10000 -p- 10.0.2.6

可以看到开着22(ssh)与8080(HTTP)端口
进一步扫描端口信息:nmap -sT -sC -sV -O -p22,8080 10.0.2.6
由于目标开放了web服务,可以趁着扫描的时间,打开网页看看有什么信息(访问时用http协议,端口为8080)
打开网页后只有一句话:Hello. This site is currently in development please check back later.
源码中也没有信息
在进行常规的目录暴破前,可以先手动试试一些常见的目录,如robots.txt之类
robots中没有信息,而在我输入admin后,回显如下

从这个404响应中我们能提取出哪些信息呢?
- 目标开启了debug模式
- 目标使用了Django框架
- 该网站存在一个
mercuryfacts目录
我们进这个目录看看

先来看看Facts:

发现url中的数字会影响回显的信息,burp抓包测试后确认一共有八个信息,对应1到8整形数字,当我们输入字符后,会有一条报错信息

猜测可能存在数字型的sql注入,测试一下

确认存在sql注入后,可以获取网站用户的用户名与密码

这时可以尝试ssh连接,多次尝试后使用webmaster用户连接上了ssh,成功getshell
(这就给我进来了?)

简单的信息收集:
- 目标主机系统:Ubuntu
- 网络情况:单网卡(废话这是靶机)
- flag获取

可以看到,渗透过程中不一定要按部就班地按照常规的流程来,可以凭借自己的经验撕开一条口子,无法成功时,再用常规的手段,可以大大减少渗透的时间。什么,你问我为什么不用sqlmap?
手注多了都没想起来有这玩意能用 :)
提权
知识点:环境变量提权
尝试sudo -l查看当前用户的权限,发现没有这个权限
四下查找一番,在网站目录中找到了note.txt,内容如下

得知两个用户均为受限用户
切换到linuxmaster用户,查看当前权限:

该用户可以调用需要root权限的程序
check_syslog.sh
我们看看这个程序的权限:

没错,有suid权限与x执行权限
来看看这个执行程序做了些什么:

发现该程序需要调用tail命令
提权思路:在环境变量中替换tail使其可以调用bash,使root执行替换后的tail
提权过程:
-
编辑新的tail文件,写入
/bin/bash,给执行权限
-
将文件路径写入原有的tail命令的环境变量前,如此一来,在调用tail命令时会优先匹配该目录下的tail文件执行

-
保留当前环境变量PATH,使用sudo运行
check_syslog.sh,触发root用户调用tail,实现提权
获取root用户的flag,拿下这台靶机

总结
- 主机发现:
nmap -sn - Django的debug模式获取报错信息
- 常规sql注入获取用户名密码,ssh连接
- 环境变量替换提权:
- 保留当前环境变量运行
sudo --preserve-env
- 保留当前环境变量运行