dc-1 靶机渗透学习

2023-11-05

环境:

Vmware 虚拟机软件

dc -1 靶机ip地址:192.168.202.130

kali攻击机ip地址:192.168.202.129

本次渗透过程kali攻击机和dc靶机都采取NAT模式

信息收集

首先用ipconfig查看当前kali机所处网段。

得到当前kali机的ip地址后,用nmap对当前网段进行扫描,主机探活。

nmap超详细使用教程_Kris__zhang的博客-CSDN博客_nmap使用教程

nmap -sP 192.168.202.0/24 

上面命令中的/24的解释是:/24 = 255.255.255.0,加个/24是告诉nmap扫描当前网段

扫到了五个ip,排除kali机还有本地的物理机,还剩下3个ip,那么怎么判断哪个是我们要攻击的机子呢?

这时候就得通过nmap的其它指令来探测每个ip主机打开的端口,通过打开的端口服务来判断。

nmap -A -p- -v  192.168.202.130

-A :此选项设置包含了1-10000的端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测。

-p- :扫描所有端口  1-65535

-v:设置对结果的详细输出,效果和-vv差不多

nmap超详细使用教程_Kris__zhang的博客-CSDN博客_nmap使用教程

nmap使用教程_weixin_30372371的博客-CSDN博客

nmap基本使用方法 - bonelee - 博客园

这里直接扫192.168.202.130,可以自己扫一下其它有嫌疑的ip,就可以根据开启的端口服务排除了。

发现80端口开启,在浏览器访问一下80端口。

那么接下来的思路是怎么样呢?简单试一下没试出sql注入 ,观察一下这个页面,发现是Drupal框架,看一下百度百科的解释  Drupal_百度百科

 猜测一下Drupal可能存在框架漏洞,通过上面的扫描我们找到是Drupal 7

其实感觉也可以通过whatweb来查看框架,Whatweb是一个基于Ruby语言的开源网站指纹识别软件,正如它的名字一样,whatweb能够识别各种关于网站的详细信息包括:CMS类型、博客平台、中间件、web框架模块、网站服务器、脚本类型、JavaScript库、IP、cookie等。

简单了解一下msf吧

在渗透过程中,MSF漏洞利用神器是不可或缺的。更何况它是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。是信息收集、漏洞扫描、权限提升、内网渗透等集成的工具。

打开msf,搜索一下该框架的漏洞

msfconsole

搜索Drupal 7的漏洞

选择一个最近几年,同时品质比较好的,即exploit/unix/webapp/drupal_drupalgeddon2 ,2018年的,rank为excellent

use exploit/unix/webapp/drupal_drupalgeddon2

set RHOSTS 192.168.202.130

第一条命令是使用这个漏洞,第二条命令是将攻击目标的ip设为192.168.202.130。 

接着可以一个show options 来看一下RHOSTS和LHOST(本机ip地址)设置好了没

设置完毕就可以用run命令启动,来获取meterpreter 会话,进而命令执行了 

到了这一步得执行一下shell命令,然后利用python来获得一个交互shell。

shell

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

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

我们来看一下原因:

虽然说不执行shell命令也可以拿到第一个flag,但后面的flag得连接数据库才能得到。

而连接数据库就要通过交互shell来进行,因为meterpreter 会话感觉只是通过框架漏洞发送数据进行命令执行。而第一次输入shell命令只是利用shell脚本,将存放在shell脚本里面的命令读取并执行,这个过程虽然能得到回显,但是在连接数据库时无法进行交互。 

shell(计算机壳层)_百度百科

所以还得利用python来产生一个交互shell,才能在后面的操作中与数据库连接,并且与数据库进行交互。

到此,第一个flag就拿到了,下面开始第二个flag。

第二个flag

在拿到第一个flag的时候,提示要找配置文件,我们百度找一下Drupal框架的配置文件在哪。

百度查找Drupal7默认配置发现Drupal 数据库配置连接-->/sites/default/settings.php

 直接cd进入当前目录下,然后cat settings.php

cd /var/www/sites/default

ls

cat settings.php

在flag2里面发现了数据库的账号和密码,直接进行连接。

mysql -udbuser -pR0ck3t

 然后查库名、表名、列名什么的.......

 最后你会发现还是得select * from users;

第三个flag

到此为止已经找到了用于登录的用户账号和密码密文了,但是密码密文不能直接使用,所以要真正得到这个账号有两种办法。

一、更改后台的密码

使用Drupal对数据库的加密方法,加密脚本位置在网站根目录下的scripts下

回到/var/www路径下,运行这个password-hash.sh加密脚本,得到新密码

cd ../

php scripts/password-hash.sh 123

将得到的密文在mysql中利用update语句更改密码,重新进入mysql的时候记得use drupaldb;这个命令来使用drupaldb数据库。

update users set pass='$S$DSONG7gsKJzu9tytwcz4DHmszpx52i.bVcEPv58aKHqduJVNFE5r' where uid=1;

回到靶机80端口开放的页面进行登录,admin,123。

在Dashboard找到第三个flag。

二、利用Drupal框架的sql漏洞再创建一个具有admin权限的用户

先查看Drupal版本,确定Drupal版本为7.24

cat /var/www/includes/bootstrap.inc  |  grep VERSION

利用searchsploit进行攻击

SearchSploit是一个用于搜索Exploit-DB漏洞数据的命令行工具,它可以允许你离线Exploit数据库,这样你就可以在本地执行离线搜索,这对于有时候不能联网的渗透工作非常的有用。 

searchsploit drupal   #查找针对Drupal的攻击脚本

 利用drupal7.0<7.31版本漏洞增加有admin权限的用户:admin1/admin1

 这里输入攻击命令的时候得加上完整路径,这个版本的searchsploit可能没有显示出来。

python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.202.130 -u admin1 -p admin1

可以看到完成攻击,登录成功了

重新登录一下mysql查看,发现用户已经添加了

说明一下,msf和searchsploit是两个不同的工具。那为什么在别的博客中,看到在msf中可以执行searchsploit呢?

是因为虽然你进入了msf,但是你可以执行root终端的任何命令,如cat、ls等,所以你在msf执行searchsploit相当于在root终端使用这个工具。

 

第四个flag

第三个flag提示的关键词是PERMS、FIND、passwd、-exec、shadow,查看一下/etc/passwd

,发现flag4用户

看一下/home/flag4的文件,尝试cat /home/flag4/flag4.txt,拿到flag4,发现提示我们将权限提升到root

根据提示把权限提升至root,尝试进行SUID提权,先来简单了解一下SUID提权。

什么是suid?suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性。通俗的理解为其他用户执行这个程序的时候可以用该程序所有者/组的权限。需要注意的是,只有程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。

如果/user/bin/find命令有SUID权限,那么如何利用find命令来进行提权呢?

一个典型的例子是将SUID权限分配给find命令,以便其他用户可以在系统中搜索特定的文件相关文件。尽管管理员可能不知道'find'命令包含用于执行命令的参数,但攻击者可以以root特权执行命令。

 find命令是包含用于执行命令的参数的,如果find以SUID权限运行,所有通过find执行的命令都会以root权限运行。

Linux find命令:在目录中查找文件(超详解) (biancheng.net)

Linux find 命令 | 菜鸟教程 (runoob.com)

可以看一下大佬们的文章

谈一谈Linux与suid提权 | 离别歌 

Linux通过第三方应用提权实战总结 - FreeBuf网络安全行业门户

https://xz.aliyun.com/t/7924#toc-14

最后一个flag

下面就开始我们SUID提权的步骤:

首先找一下有SUID权限的文件

find / -perm -4000

 find基础命令与提权教程 - 灰信网(软件开发博客聚合)

看到find命令有SUID权限,所以这里可以利用find命令进行提权。

用find命令包含的-exec参数进行提权

find /var/www -exec "/bin/sh" \;

这个命令中的/bin/sh是linux内核和用户之间的命令解释器,可以将我们的命令解释并发送给linux内核。

提权后发现我们的权限已经升级为root了,这下可以查看一下root目录的文件,直接拿到最后一个flag。 

参考文章

 Vulnhub靶机实战——DC-1_冠霖L的博客-CSDN博客_vulnhub靶机实战

DC-1靶机攻略 - shadow-ink - 博客园

vulnhub-DC1靶机 - xinZa1

谈一谈Linux与suid提权 | 离别歌

Linux通过第三方应用提权实战总结 - FreeBuf网络安全行业门户

https://xz.aliyun.com/t/7924#toc-14

nmap超详细使用教程_Kris__zhang的博客-CSDN博客_nmap使用教程

nmap使用教程_weixin_30372371的博客-CSDN博客

nmap基本使用方法 - bonelee - 博客园

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dc-1 靶机渗透学习 的相关文章

  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp

随机推荐

  • C++多态----虚函数初级剖析

    多态说白了就是多种形态 在C 中不少的函数都可以实现多种形态 例如函数重载 运算符重载等等 这种重载一般都是在编译阶段时就已经确定了形态 这种多态 我们一般称之为静态多态 那么既然静态多态是在编译阶段就已经确定好了形态 那么动态多态 自然也
  • 项目有大量的spring日志,log配置level无效的解决方案

    思路 log配置文件的level无效 是因为启动spring的时候 log尚未加载 解决方案 1 web xml中的log监听器的启动顺序早于spring监听器 2 log配置文件生效后 可根据日志种类设置level进行拦截 参考 web
  • 黑暗精灵修改为国内源

    第1步 修改 etc pacman d mirrorlist vim etc pacman d mirrorlist 1 第2步 修改 etc pacman d blackarch mirrorlist vim etc pacman d b
  • python 安装whl文件

    python 安装whl文件 使用场景 在terminal中 通过 pip install 命令进行第三方模块安装时 由于网络获其他原因会使得第三方模块下载失败 导致安装失败 此时 我们可以先通过下载网址将第三方模块包手动下载到本地 再手动
  • Linux系统下 查找已安装软件的命令

    1 find 使用find查找文件的所在路径 find 查找路径 查找参数 在根目录下查找以 conf结尾的文件 find name conf 2 ps 通过查找进程的方法找到对应的包的路径 ps ef grep mongo 也可以简写成
  • mysql5.7.13+VS3013 源代码阅读调试

    之前写Java 对C make cmake都不是很熟 所以参考了以下这些前辈写的博客 最后成功搭建了mysql5 7 13 VS3013调试环境 自己总结了需要需要注意的几点 Windows VS2012环境下编译调试MySQL源码 一 W
  • SQLServer如果指定列列值相同则用逗号拼接其他指定列数据 stuff函数+for xml path

    for xml path 就是将 sql 查询出来的内容以XML的格式显示出来 Stuff 查询字符串 开始位置 数字 长度 数字 需插入的字符串 示例 55替换abcd123字符串中的a 示例 55替换abcd123字符串中的abcd 示
  • vue+Echarts绘制k线图(二)--分时图和交易量图

    目录 1 前言 2 分时图 2 1 vue引入Echarts 2 2 分时图介绍 2 3 分时折线图配置 2 4 组合交易量图 2 5 鼠标指示数据设置 2 6 项目完整代码 3 总结 1 前言 近来发现Echarts API越发的强大 对
  • 二分查找的各种应用详解(C++)

    基本概念 Binary Search 二分查找也称折半查找 它是一种效率较高的查找方法 使用二分查找要求线性表必须采用顺序存储结构 而且表中元素按关键字有序排列 基本原理 查找 因为序列已经单调且有序排列 从中间位置开始比较 一次可以排除一
  • 只考一门数据结构!安徽工程大学计算机考研

    安徽工程大学 考研难度 内容 23考情概况 拟录取和复试分析 院校概况 23专业目录 23复试详情 各专业考情分析 各科目考情分析 正文992字 预计阅读 3分钟 2023考情概况 安徽工程大学计算机相关各专业复试和拟录取分析 083500
  • 分布式开放消息系统(RocketMQ)的原理与实践

    分布式开放消息系统 RocketMQ 的原理与实践 作者 CHEN川 关注 2016 02 25 15 43 字数 6784 阅读 135462 评论 49 喜欢 351 赞赏 7 一年前为了一次内部分享而写的这篇文章 没想到会有这么多人阅
  • (ANC)前三章思维导图总结

    最近发现对于一本书 如果一点点事无巨细的做笔记 效率会比较低 于是改变了一下之前的读书方式 用思维导图的做读书笔记 这样便于了解整本书的框架和每章的大致内容 也仅限于自己做笔记用
  • 数据结构和算法(栈的模拟、前中后缀表达式、表达式求值步骤和思路)

    1 栈的介绍 栈的英文为 stack 栈是一个先入后出 FILO First In Last Out 的有序列表 栈 stack 是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表 允许插入和删除的一端 为变化的一端 称
  • qt中qwt的安装的方式

    参考大神博客 https blog csdn net imkelt article details 51234230 utm medium distribute pc relevant none task blog BlogCommendF
  • Error in nextTick “TypeError Cannot read property ‘xxx‘ of undefined“

    报这个错主要是因为子组件还没加载完成就对子组件进行赋值 推荐使用第一个 this nextTick gt 修改子组件的内容 或 setTimeout gt 修改子组件的内容 50 父组件传值给子组件 子组件不能直接修改 会报错 子组件修改父
  • JavaScript中的endsWith

    如何在JavaScript中检查字符串是否以特定字符结尾 示例 我有一个字符串 var str mystring 我想知道该字符串是否以 结尾 我该如何检查 JavaScript中是否有endsWith 方法 我有一个解决方案是获取字符串的
  • 嘴说手画一文搞懂Spark的Join

    Spark Sql的Join和关系型数据库Sql的Join有很多相同点 比如inner join left join right join full join 这是二者都有的概念 并且含义相同 但是 Spark Sql是分布式执行 面对的是
  • ADB命令开启和关闭飞行模式,两段式操作方式!!!!

    开启飞行模式 必须要先执行1 再执行2 执行1 adb shell settings put global airplane mode on 1 执行2 adb shell am broadcast a android intent act
  • Docker部署Elasticsearch集群

    编写docker compose yml version 3 7 services es01 image elasticsearch 7 10 1 container name es01 ports 9200 9200 9300 9300
  • dc-1 靶机渗透学习

    环境 Vmware 虚拟机软件 dc 1 靶机ip地址 192 168 202 130 kali攻击机ip地址 192 168 202 129 本次渗透过程kali攻击机和dc靶机都采取NAT模式 信息收集 首先用ipconfig查看当前k